fix: Solution of conflict
Change-Id: If6304999f1dfbcdfbc1670b73ace61b8024336bd
This commit is contained in:
@@ -55,10 +55,14 @@ STATIC INLINE VOID OsAddNode2SortLink(SortLinkAttribute *sortLinkHeader, SortLin
|
||||
}
|
||||
|
||||
SortLinkList *listSorted = LOS_DL_LIST_ENTRY(head->pstNext, SortLinkList, sortLinkNode);
|
||||
if (listSorted->responseTime >= sortList->responseTime) {
|
||||
if (listSorted->responseTime > sortList->responseTime) {
|
||||
LOS_ListAdd(head, &sortList->sortLinkNode);
|
||||
sortLinkHeader->nodeNum++;
|
||||
return;
|
||||
} else if (listSorted->responseTime == sortList->responseTime) {
|
||||
LOS_ListAdd(head->pstNext, &sortList->sortLinkNode);
|
||||
sortLinkHeader->nodeNum++;
|
||||
return;
|
||||
}
|
||||
|
||||
LOS_DL_LIST *prevNode = head->pstPrev;
|
||||
|
||||
@@ -107,9 +107,8 @@ struct VmMapRegion {
|
||||
|
||||
typedef struct VmSpace {
|
||||
LOS_DL_LIST node; /**< vm space dl list */
|
||||
LOS_DL_LIST regions; /**< region dl list */
|
||||
LosRbTree regionRbTree; /**< region red-black tree root */
|
||||
LosMux regionMux; /**< region list mutex lock */
|
||||
LosMux regionMux; /**< region red-black tree mutex lock */
|
||||
VADDR_T base; /**< vm space base addr */
|
||||
UINT32 size; /**< vm space size */
|
||||
VADDR_T heapBase; /**< vm space heap base address */
|
||||
|
||||
@@ -123,149 +123,6 @@ VOID OsDeletePageCacheLru(LosFilePage *page)
|
||||
OsPageCacheDel(page);
|
||||
}
|
||||
|
||||
#if VFS_IMPL_LATER
|
||||
STATIC LosFilePage *OsPagecacheGetPageAndFill(struct file *filp, VM_OFFSET_T pgOff, size_t *readSize, VADDR_T *kvaddr)
|
||||
{
|
||||
LosFilePage *page = NULL;
|
||||
struct page_mapping *mapping = filp->f_mapping;
|
||||
|
||||
page = OsFindGetEntry(mapping, pgOff);
|
||||
if (page != NULL) {
|
||||
OsSetPageLocked(page->vmPage);
|
||||
OsPageRefIncLocked(page);
|
||||
*kvaddr = (VADDR_T)(UINTPTR)OsVmPageToVaddr(page->vmPage);
|
||||
*readSize = PAGE_SIZE;
|
||||
} else {
|
||||
page = OsPageCacheAlloc(mapping, pgOff);
|
||||
if (page == NULL) {
|
||||
VM_ERR("Failed to alloc a page frame");
|
||||
return page;
|
||||
}
|
||||
OsSetPageLocked(page->vmPage);
|
||||
*kvaddr = (VADDR_T)(UINTPTR)OsVmPageToVaddr(page->vmPage);
|
||||
|
||||
file_seek(filp, pgOff << PAGE_SHIFT, SEEK_SET);
|
||||
/* "ReadPage" func exists definitely in this procedure */
|
||||
*readSize = filp->f_vnode->u.i_mops->readpage(filp, (char *)(UINTPTR)*kvaddr, PAGE_SIZE);
|
||||
if (*readSize == 0) {
|
||||
VM_ERR("read 0 bytes");
|
||||
OsCleanPageLocked(page->vmPage);
|
||||
}
|
||||
OsAddToPageacheLru(page, mapping, pgOff);
|
||||
}
|
||||
|
||||
return page;
|
||||
}
|
||||
|
||||
|
||||
ssize_t OsMappingRead(struct file *filp, char *buf, size_t size)
|
||||
{
|
||||
INT32 ret;
|
||||
vaddr_t kvaddr = 0;
|
||||
UINT32 intSave;
|
||||
struct stat bufStat;
|
||||
size_t readSize = 0;
|
||||
size_t readTotal = 0;
|
||||
size_t readLeft = size;
|
||||
LosFilePage *page = NULL;
|
||||
VM_OFFSET_T pos = file_seek(filp, 0, SEEK_CUR);
|
||||
VM_OFFSET_T pgOff = pos >> PAGE_SHIFT;
|
||||
INT32 offInPage = pos % PAGE_SIZE;
|
||||
struct page_mapping *mapping = filp->f_mapping;
|
||||
INT32 nPages = (ROUNDUP(pos + size, PAGE_SIZE) - ROUNDDOWN(pos, PAGE_SIZE)) >> PAGE_SHIFT;
|
||||
|
||||
ret = stat(filp->f_path, &bufStat);
|
||||
if (ret != OK) {
|
||||
VM_ERR("Get file size failed. (filepath=%s)", filp->f_path);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (pos >= bufStat.st_size) {
|
||||
PRINT_INFO("%s filp->f_pos >= bufStat.st_size (pos=%ld, fileSize=%ld)\n", filp->f_path, pos, bufStat.st_size);
|
||||
return 0;
|
||||
}
|
||||
|
||||
LOS_SpinLockSave(&mapping->list_lock, &intSave);
|
||||
|
||||
for (INT32 i = 0; (i < nPages) && readLeft; i++, pgOff++) {
|
||||
page = OsPagecacheGetPageAndFill(filp, pgOff, &readSize, &kvaddr);
|
||||
if ((page == NULL) || (readSize == 0)) {
|
||||
break;
|
||||
}
|
||||
if (readSize < PAGE_SIZE) {
|
||||
readLeft = readSize;
|
||||
}
|
||||
|
||||
readSize = MIN2((PAGE_SIZE - offInPage), readLeft);
|
||||
|
||||
(VOID)memcpy_s((VOID *)buf, readLeft, (char *)(UINTPTR)kvaddr + offInPage, readSize);
|
||||
buf += readSize;
|
||||
readLeft -= readSize;
|
||||
readTotal += readSize;
|
||||
|
||||
offInPage = 0;
|
||||
|
||||
OsCleanPageLocked(page->vmPage);
|
||||
}
|
||||
|
||||
LOS_SpinUnlockRestore(&mapping->list_lock, intSave);
|
||||
file_seek(filp, pos + readTotal, SEEK_SET);
|
||||
|
||||
return readTotal;
|
||||
}
|
||||
#endif
|
||||
|
||||
ssize_t OsMappingWrite(struct file *filp, const char *buf, size_t size)
|
||||
{
|
||||
VADDR_T kvaddr;
|
||||
UINT32 intSave;
|
||||
INT32 writeSize = 0;
|
||||
size_t writeLeft = size;
|
||||
VM_OFFSET_T pos = file_seek(filp, 0, SEEK_CUR);
|
||||
VM_OFFSET_T pgOff = pos >> PAGE_SHIFT;
|
||||
INT32 offInPage = pos % PAGE_SIZE;
|
||||
LosFilePage *page = NULL;
|
||||
struct page_mapping *mapping = filp->f_mapping;
|
||||
INT32 nPages = (ROUNDUP(pos + size, PAGE_SIZE) - ROUNDDOWN(pos, PAGE_SIZE)) >> PAGE_SHIFT;
|
||||
|
||||
LOS_SpinLockSave(&mapping->list_lock, &intSave);
|
||||
|
||||
for (INT32 i = 0; i < nPages; i++, pgOff++) {
|
||||
page = OsFindGetEntry(mapping, pgOff);
|
||||
if (page) {
|
||||
kvaddr = (VADDR_T)(UINTPTR)OsVmPageToVaddr(page->vmPage);
|
||||
OsSetPageLocked(page->vmPage);
|
||||
OsPageRefIncLocked(page);
|
||||
} else {
|
||||
page = OsPageCacheAlloc(mapping, pgOff);
|
||||
if (page == NULL) {
|
||||
VM_ERR("Failed to alloc a page frame");
|
||||
break;
|
||||
}
|
||||
kvaddr = (VADDR_T)(UINTPTR)OsVmPageToVaddr(page->vmPage);
|
||||
OsAddToPageacheLru(page, mapping, pgOff);
|
||||
OsSetPageLocked(page->vmPage);
|
||||
}
|
||||
|
||||
writeSize = MIN2((PAGE_SIZE - offInPage), writeLeft);
|
||||
|
||||
(VOID)memcpy_s((char *)(UINTPTR)kvaddr + offInPage, writeLeft, buf, writeSize);
|
||||
buf += writeSize;
|
||||
writeLeft -= writeSize;
|
||||
|
||||
OsMarkPageDirty(page, NULL, offInPage, writeSize);
|
||||
|
||||
offInPage = 0;
|
||||
|
||||
OsCleanPageLocked(page->vmPage);
|
||||
}
|
||||
|
||||
LOS_SpinUnlockRestore(&mapping->list_lock, intSave);
|
||||
|
||||
file_seek(filp, pos + size - writeLeft, SEEK_SET);
|
||||
return (size - writeLeft);
|
||||
}
|
||||
|
||||
STATIC VOID OsPageCacheUnmap(LosFilePage *fpage, LosArchMmu *archMmu, VADDR_T vaddr)
|
||||
{
|
||||
UINT32 intSave;
|
||||
|
||||
@@ -132,7 +132,6 @@ STATIC BOOL OsVmSpaceInitCommon(LosVmSpace *vmSpace, VADDR_T *virtTtb)
|
||||
{
|
||||
LOS_RbInitTree(&vmSpace->regionRbTree, OsRegionRbCmpKeyFn, OsRegionRbFreeFn, OsRegionRbGetKeyFn);
|
||||
|
||||
LOS_ListInit(&vmSpace->regions);
|
||||
status_t retval = LOS_MuxInit(&vmSpace->regionMux, NULL);
|
||||
if (retval != LOS_OK) {
|
||||
VM_ERR("Create mutex for vm space failed, status: %d", retval);
|
||||
@@ -239,34 +238,6 @@ STATIC BOOL OsVmSpaceParamCheck(LosVmSpace *vmSpace)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
LosVmMapRegion *OsShareRegionClone(LosVmMapRegion *oldRegion)
|
||||
{
|
||||
/* no need to create vm object */
|
||||
LosVmMapRegion *newRegion = LOS_MemAlloc(m_aucSysMem0, sizeof(LosVmMapRegion));
|
||||
if (newRegion == NULL) {
|
||||
VM_ERR("malloc new region struct failed.");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* todo: */
|
||||
*newRegion = *oldRegion;
|
||||
return newRegion;
|
||||
}
|
||||
|
||||
LosVmMapRegion *OsPrivateRegionClone(LosVmMapRegion *oldRegion)
|
||||
{
|
||||
/* need to create vm object */
|
||||
LosVmMapRegion *newRegion = LOS_MemAlloc(m_aucSysMem0, sizeof(LosVmMapRegion));
|
||||
if (newRegion == NULL) {
|
||||
VM_ERR("malloc new region struct failed.");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* todo: */
|
||||
*newRegion = *oldRegion;
|
||||
return newRegion;
|
||||
}
|
||||
|
||||
STATUS_T LOS_VmSpaceClone(LosVmSpace *oldVmSpace, LosVmSpace *newVmSpace)
|
||||
{
|
||||
LosVmMapRegion *oldRegion = NULL;
|
||||
@@ -841,11 +812,6 @@ STATUS_T OsIsRegionCanExpand(LosVmSpace *space, LosVmMapRegion *region, size_t s
|
||||
return LOS_NOK;
|
||||
}
|
||||
|
||||
/* if next node is head, then we can expand */
|
||||
if (OsIsVmRegionEmpty(space) == TRUE) {
|
||||
return LOS_OK;
|
||||
}
|
||||
|
||||
nextRegion = (LosVmMapRegion *)LOS_RbSuccessorNode(&space->regionRbTree, ®ion->rbNode);
|
||||
/* if the gap is larger than size, then we can expand */
|
||||
if ((nextRegion != NULL) && ((nextRegion->range.base - region->range.base) >= size)) {
|
||||
|
||||
@@ -435,11 +435,6 @@ INT32 ShmGet(key_t key, size_t size, INT32 shmflg)
|
||||
INT32 shmid;
|
||||
|
||||
SYSV_SHM_LOCK();
|
||||
if (!((UINT32)shmflg & IPC_CREAT) &&
|
||||
((UINT32)shmflg & IPC_EXCL)) {
|
||||
ret = -EINVAL;
|
||||
goto ERROR;
|
||||
}
|
||||
|
||||
if (key == IPC_PRIVATE) {
|
||||
ret = ShmAllocSeg(key, size, shmflg);
|
||||
@@ -454,6 +449,11 @@ INT32 ShmGet(key_t key, size_t size, INT32 shmflg)
|
||||
}
|
||||
} else {
|
||||
shmid = ret;
|
||||
if (((UINT32)shmflg & IPC_CREAT) &&
|
||||
((UINT32)shmflg & IPC_EXCL)) {
|
||||
ret = -EEXIST;
|
||||
goto ERROR;
|
||||
}
|
||||
ret = ShmPermCheck(ShmFindSeg(shmid), (UINT32)shmflg & ACCESSPERMS);
|
||||
if (ret != 0) {
|
||||
ret = -ret;
|
||||
|
||||
Reference in New Issue
Block a user