From 98b1ae1ae60d7c0538d3b9b6448a7791100036f1 Mon Sep 17 00:00:00 2001 From: zhangfanfan2 Date: Wed, 13 Jan 2021 14:42:32 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4LOS=5FTaskDelete=E4=B8=AD?= =?UTF-8?q?=E7=94=A8=E4=BA=8E=E8=B0=83=E8=AF=95=E7=9A=84=E4=B8=BB=E5=8A=A8?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E4=BF=A1=E6=81=AF=E4=BB=A5=E5=8F=8A=E4=BF=AE?= =?UTF-8?q?=E5=A4=8DLOS=5FDoMremap=E4=B8=AD=E8=B0=83=E7=94=A8LOS=5FArchMmu?= =?UTF-8?q?Move=E5=8F=82=E6=95=B0=E9=94=99=E8=AF=AF=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- kernel/base/core/los_task.c | 4 +--- kernel/base/vm/los_vm_syscall.c | 8 +++++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/kernel/base/core/los_task.c b/kernel/base/core/los_task.c index 99226353..8c19b900 100644 --- a/kernel/base/core/los_task.c +++ b/kernel/base/core/los_task.c @@ -1204,11 +1204,9 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskDelete(UINT32 taskID) OS_GOTO_ERREND(); } - if ((taskCB->taskStatus & OS_TASK_FLAG_SYSTEM_TASK) || - (taskCB->taskStatus & OS_TASK_FLAG_NO_DELETE)) { + if (taskCB->taskStatus & (OS_TASK_FLAG_SYSTEM_TASK | OS_TASK_FLAG_NO_DELETE)) { SCHEDULER_UNLOCK(intSave); OsBackTrace(); - __asm__ __volatile__("swi 0"); return LOS_ERRNO_TSK_OPERATE_SYSTEM_TASK; } processCB = OS_PCB_FROM_PID(taskCB->processID); diff --git a/kernel/base/vm/los_vm_syscall.c b/kernel/base/vm/los_vm_syscall.c index 11e8c2fc..20e90539 100644 --- a/kernel/base/vm/los_vm_syscall.c +++ b/kernel/base/vm/los_vm_syscall.c @@ -360,7 +360,9 @@ VADDR_T LOS_DoMremap(VADDR_T oldAddress, size_t oldSize, size_t newSize, int fla ret = -ENOMEM; goto OUT_MREMAP; } - status = LOS_ArchMmuMove(&space->archMmu, oldAddress, newAddr, newSize >> PAGE_SHIFT, regionOld->regionFlags); + status = LOS_ArchMmuMove(&space->archMmu, oldAddress, newAddr, + ((newSize < regionOld->range.size) ? newSize : regionOld->range.size) >> PAGE_SHIFT, + regionOld->regionFlags); if (status) { LOS_RegionFree(space, regionNew); ret = -ENOMEM; @@ -390,8 +392,8 @@ VADDR_T LOS_DoMremap(VADDR_T oldAddress, size_t oldSize, size_t newSize, int fla ret = -ENOMEM; goto OUT_MREMAP; } - status = LOS_ArchMmuMove(&space->archMmu, oldAddress, regionNew->range.base, newSize >> PAGE_SHIFT, - regionOld->regionFlags); + status = LOS_ArchMmuMove(&space->archMmu, oldAddress, regionNew->range.base, + regionOld->range.size >> PAGE_SHIFT, regionOld->regionFlags); if (status) { LOS_RegionFree(space, regionNew); ret = -ENOMEM; -- GitLab