Merge branch 'master' into kernel-refactor-foundations
This commit is contained in:
commit
84ad570bb4
|
|
@ -565,6 +565,7 @@ void hook_ipc_clear(struct proc *p)
|
||||||
#if DEBUG_IPCSTATS
|
#if DEBUG_IPCSTATS
|
||||||
int slot, i;
|
int slot, i;
|
||||||
KASSERT(p);
|
KASSERT(p);
|
||||||
|
|
||||||
proc2slot(p, slot);
|
proc2slot(p, slot);
|
||||||
for(i = 0; i < IPCPROCS; i++)
|
for(i = 0; i < IPCPROCS; i++)
|
||||||
messages[slot][i] = messages[i][slot] = 0;
|
messages[slot][i] = messages[i][slot] = 0;
|
||||||
|
|
|
||||||
|
|
@ -47,5 +47,6 @@ void *kmemmove(void *dest, const void *src, k_size_t n) {
|
||||||
*pd++ = *ps++;
|
*pd++ = *ps++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return dest;
|
return dest;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -37,8 +37,7 @@
|
||||||
#include <minix/kernel_types.h>
|
#include <minix/kernel_types.h>
|
||||||
#include <sys/kassert.h>
|
#include <sys/kassert.h>
|
||||||
|
|
||||||
|
/* FIXME dummy for linking */
|
||||||
/* dummy for linking */
|
|
||||||
char *** _penviron;
|
char *** _penviron;
|
||||||
|
|
||||||
/* Prototype declarations for PRIVATE functions. */
|
/* Prototype declarations for PRIVATE functions. */
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,7 @@ klib_sources = files(
|
||||||
'klib/kmemory.c',
|
'klib/kmemory.c',
|
||||||
'klib/kprintf_stub.c',
|
'klib/kprintf_stub.c',
|
||||||
'klib/kpanic.c'
|
'klib/kpanic.c'
|
||||||
# Add other klib source files here if created (e.g. katom.c)
|
# TODO Add other klib source files here if created (e.g. katom.c)
|
||||||
)
|
)
|
||||||
|
|
||||||
klib = static_library('klib',
|
klib = static_library('klib',
|
||||||
|
|
|
||||||
|
|
@ -360,11 +360,13 @@ check_misc_flags:
|
||||||
|
|
||||||
KASSERT(p);
|
KASSERT(p);
|
||||||
KASSERT(proc_is_runnable(p));
|
KASSERT(proc_is_runnable(p));
|
||||||
|
|
||||||
while (p->p_misc_flags &
|
while (p->p_misc_flags &
|
||||||
(MF_KCALL_RESUME | MF_DELIVERMSG |
|
(MF_KCALL_RESUME | MF_DELIVERMSG |
|
||||||
MF_SC_DEFER | MF_SC_TRACE | MF_SC_ACTIVE)) {
|
MF_SC_DEFER | MF_SC_TRACE | MF_SC_ACTIVE)) {
|
||||||
|
|
||||||
KASSERT(proc_is_runnable(p));
|
KASSERT(proc_is_runnable(p));
|
||||||
|
|
||||||
if (p->p_misc_flags & MF_KCALL_RESUME) {
|
if (p->p_misc_flags & MF_KCALL_RESUME) {
|
||||||
kernel_call_resume(p);
|
kernel_call_resume(p);
|
||||||
}
|
}
|
||||||
|
|
@ -445,6 +447,7 @@ check_misc_flags:
|
||||||
p = arch_finish_switch_to_user();
|
p = arch_finish_switch_to_user();
|
||||||
KASSERT(p->p_cpu_time_left);
|
KASSERT(p->p_cpu_time_left);
|
||||||
|
|
||||||
|
|
||||||
context_stop(proc_addr(KERNEL));
|
context_stop(proc_addr(KERNEL));
|
||||||
|
|
||||||
/* If the process isn't the owner of FPU, enable the FPU exception */
|
/* If the process isn't the owner of FPU, enable the FPU exception */
|
||||||
|
|
@ -463,6 +466,7 @@ check_misc_flags:
|
||||||
#elif defined(__arm__)
|
#elif defined(__arm__)
|
||||||
KASSERT(p->p_seg.p_ttbr != 0);
|
KASSERT(p->p_seg.p_ttbr != 0);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
if (p->p_misc_flags & MF_FLUSH_TLB) {
|
if (p->p_misc_flags & MF_FLUSH_TLB) {
|
||||||
if (tlb_must_refresh)
|
if (tlb_must_refresh)
|
||||||
|
|
@ -624,7 +628,9 @@ int do_ipc(reg_t r1, reg_t r2, reg_t r3)
|
||||||
* input message. Postpone the entire system call.
|
* input message. Postpone the entire system call.
|
||||||
*/
|
*/
|
||||||
caller_ptr->p_misc_flags &= ~MF_SC_TRACE;
|
caller_ptr->p_misc_flags &= ~MF_SC_TRACE;
|
||||||
|
|
||||||
KASSERT(!(caller_ptr->p_misc_flags & MF_SC_DEFER));
|
KASSERT(!(caller_ptr->p_misc_flags & MF_SC_DEFER));
|
||||||
|
|
||||||
caller_ptr->p_misc_flags |= MF_SC_DEFER;
|
caller_ptr->p_misc_flags |= MF_SC_DEFER;
|
||||||
caller_ptr->p_defer.r1 = r1;
|
caller_ptr->p_defer.r1 = r1;
|
||||||
caller_ptr->p_defer.r2 = r2;
|
caller_ptr->p_defer.r2 = r2;
|
||||||
|
|
@ -642,6 +648,7 @@ int do_ipc(reg_t r1, reg_t r2, reg_t r3)
|
||||||
|
|
||||||
KASSERT (!(caller_ptr->p_misc_flags & MF_SC_ACTIVE));
|
KASSERT (!(caller_ptr->p_misc_flags & MF_SC_ACTIVE));
|
||||||
|
|
||||||
|
|
||||||
/* Set a flag to allow reliable tracing of leaving the system call. */
|
/* Set a flag to allow reliable tracing of leaving the system call. */
|
||||||
caller_ptr->p_misc_flags |= MF_SC_ACTIVE;
|
caller_ptr->p_misc_flags |= MF_SC_ACTIVE;
|
||||||
}
|
}
|
||||||
|
|
@ -733,6 +740,7 @@ static int deadlock(
|
||||||
xp = proc_addr(src_dst_slot); /* follow chain of processes */
|
xp = proc_addr(src_dst_slot); /* follow chain of processes */
|
||||||
KASSERT(proc_ptr_ok(xp));
|
KASSERT(proc_ptr_ok(xp));
|
||||||
KASSERT(!RTS_ISSET(xp, RTS_SLOT_FREE));
|
KASSERT(!RTS_ISSET(xp, RTS_SLOT_FREE));
|
||||||
|
|
||||||
#if DEBUG_ENABLE_IPC_WARNINGS
|
#if DEBUG_ENABLE_IPC_WARNINGS
|
||||||
processes[group_size] = xp;
|
processes[group_size] = xp;
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -958,6 +966,7 @@ int mini_send(
|
||||||
|
|
||||||
/* Process is now blocked. Put in on the destination's queue. */
|
/* Process is now blocked. Put in on the destination's queue. */
|
||||||
KASSERT(caller_ptr->p_q_link == NULL); /* NULL can be an issue if stddef.h is truly gone */
|
KASSERT(caller_ptr->p_q_link == NULL); /* NULL can be an issue if stddef.h is truly gone */
|
||||||
|
|
||||||
xpp = &dst_ptr->p_caller_q; /* find end of list */
|
xpp = &dst_ptr->p_caller_q; /* find end of list */
|
||||||
while (*xpp) xpp = &(*xpp)->p_q_link;
|
while (*xpp) xpp = &(*xpp)->p_q_link;
|
||||||
*xpp = caller_ptr; /* add caller to end */
|
*xpp = caller_ptr; /* add caller to end */
|
||||||
|
|
@ -1033,6 +1042,7 @@ static int mini_receive(struct proc * caller_ptr,
|
||||||
KASSERT(!(caller_ptr->p_misc_flags & MF_DELIVERMSG));
|
KASSERT(!(caller_ptr->p_misc_flags & MF_DELIVERMSG));
|
||||||
KASSERT(src_e == ANY || sender_e == src_e);
|
KASSERT(src_e == ANY || sender_e == src_e);
|
||||||
|
|
||||||
|
|
||||||
/* assemble message */
|
/* assemble message */
|
||||||
BuildNotifyMessage(&caller_ptr->p_delivermsg, src_proc_nr, caller_ptr);
|
BuildNotifyMessage(&caller_ptr->p_delivermsg, src_proc_nr, caller_ptr);
|
||||||
caller_ptr->p_delivermsg.m_source = sender_e;
|
caller_ptr->p_delivermsg.m_source = sender_e;
|
||||||
|
|
@ -1070,6 +1080,7 @@ static int mini_receive(struct proc * caller_ptr,
|
||||||
|
|
||||||
/* Found acceptable message. Copy it and update status. */
|
/* Found acceptable message. Copy it and update status. */
|
||||||
KASSERT(!(caller_ptr->p_misc_flags & MF_DELIVERMSG));
|
KASSERT(!(caller_ptr->p_misc_flags & MF_DELIVERMSG));
|
||||||
|
|
||||||
caller_ptr->p_delivermsg = sender->p_sendmsg;
|
caller_ptr->p_delivermsg = sender->p_sendmsg;
|
||||||
caller_ptr->p_delivermsg.m_source = sender->p_endpoint;
|
caller_ptr->p_delivermsg.m_source = sender->p_endpoint;
|
||||||
caller_ptr->p_misc_flags |= MF_DELIVERMSG;
|
caller_ptr->p_misc_flags |= MF_DELIVERMSG;
|
||||||
|
|
@ -1384,6 +1395,7 @@ static int try_async(struct proc * caller_ptr)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
KASSERT(!(caller_ptr->p_misc_flags & MF_DELIVERMSG));
|
KASSERT(!(caller_ptr->p_misc_flags & MF_DELIVERMSG));
|
||||||
|
|
||||||
if ((r = try_one(ANY, src_ptr, caller_ptr)) == OK)
|
if ((r = try_one(ANY, src_ptr, caller_ptr)) == OK)
|
||||||
return(r);
|
return(r);
|
||||||
}
|
}
|
||||||
|
|
@ -1464,6 +1476,7 @@ static int try_one(endpoint_t receive_e, struct proc *src_ptr,
|
||||||
|
|
||||||
if (!CANRECEIVE(receive_e, src_e, dst_ptr,
|
if (!CANRECEIVE(receive_e, src_e, dst_ptr,
|
||||||
table_v + i*sizeof(asynmsg_t) + K_OFFSETOF(struct asynmsg,msg),
|
table_v + i*sizeof(asynmsg_t) + K_OFFSETOF(struct asynmsg,msg),
|
||||||
|
|
||||||
NULL)) { // MODIFIED (NULL)
|
NULL)) { // MODIFIED (NULL)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
@ -1641,7 +1654,9 @@ void enqueue(
|
||||||
*/
|
*/
|
||||||
struct proc * p;
|
struct proc * p;
|
||||||
p = get_cpulocal_var(proc_ptr);
|
p = get_cpulocal_var(proc_ptr);
|
||||||
|
|
||||||
KASSERT(p);
|
KASSERT(p);
|
||||||
|
|
||||||
if((p->p_priority > rp->p_priority) &&
|
if((p->p_priority > rp->p_priority) &&
|
||||||
(priv(p)->s_flags & PREEMPTIBLE))
|
(priv(p)->s_flags & PREEMPTIBLE))
|
||||||
RTS_SET(p, RTS_PREEMPTED); /* calls dequeue() */
|
RTS_SET(p, RTS_PREEMPTED); /* calls dequeue() */
|
||||||
|
|
@ -1692,7 +1707,6 @@ static void enqueue_head(struct proc *rp)
|
||||||
|
|
||||||
KASSERT(q >= 0);
|
KASSERT(q >= 0);
|
||||||
|
|
||||||
|
|
||||||
rdy_head = get_cpu_var(rp->p_cpu, run_q_head);
|
rdy_head = get_cpu_var(rp->p_cpu, run_q_head);
|
||||||
rdy_tail = get_cpu_var(rp->p_cpu, run_q_tail);
|
rdy_tail = get_cpu_var(rp->p_cpu, run_q_tail);
|
||||||
|
|
||||||
|
|
@ -1715,6 +1729,7 @@ static void enqueue_head(struct proc *rp)
|
||||||
|
|
||||||
#if DEBUG_SANITYCHECKS
|
#if DEBUG_SANITYCHECKS
|
||||||
KASSERT(runqueues_ok_local());
|
KASSERT(runqueues_ok_local());
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1784,6 +1799,7 @@ void dequeue(struct proc *rp)
|
||||||
|
|
||||||
#if DEBUG_SANITYCHECKS
|
#if DEBUG_SANITYCHECKS
|
||||||
KASSERT(runqueues_ok_local());
|
KASSERT(runqueues_ok_local());
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1813,6 +1829,7 @@ static struct proc * pick_proc(void)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
KASSERT(proc_is_runnable(rp));
|
KASSERT(proc_is_runnable(rp));
|
||||||
|
|
||||||
if (priv(rp)->s_flags & BILLABLE)
|
if (priv(rp)->s_flags & BILLABLE)
|
||||||
get_cpulocal_var(bill_ptr) = rp; /* bill for system time */
|
get_cpulocal_var(bill_ptr) = rp; /* bill for system time */
|
||||||
return rp;
|
return rp;
|
||||||
|
|
@ -1944,6 +1961,7 @@ void copr_not_available_handler(void)
|
||||||
local_fpu_owner = get_cpulocal_var_ptr(fpu_owner);
|
local_fpu_owner = get_cpulocal_var_ptr(fpu_owner);
|
||||||
if (*local_fpu_owner != NULL) { // MODIFIED (NULL)
|
if (*local_fpu_owner != NULL) { // MODIFIED (NULL)
|
||||||
KASSERT(*local_fpu_owner != p);
|
KASSERT(*local_fpu_owner != p);
|
||||||
|
|
||||||
save_local_fpu(*local_fpu_owner, FALSE /*retain*/);
|
save_local_fpu(*local_fpu_owner, FALSE /*retain*/);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -85,6 +85,7 @@ static void smp_schedule_sync(struct proc * p, unsigned task)
|
||||||
unsigned mycpu = cpuid;
|
unsigned mycpu = cpuid;
|
||||||
|
|
||||||
KASSERT(cpu != mycpu);
|
KASSERT(cpu != mycpu);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* if some other cpu made a request to the same cpu, wait until it is
|
* if some other cpu made a request to the same cpu, wait until it is
|
||||||
* done before proceeding
|
* done before proceeding
|
||||||
|
|
@ -144,6 +145,7 @@ void smp_schedule_stop_proc_save_ctx(struct proc * p)
|
||||||
*/
|
*/
|
||||||
smp_schedule_sync(p, SCHED_IPI_STOP_PROC | SCHED_IPI_SAVE_CTX);
|
smp_schedule_sync(p, SCHED_IPI_STOP_PROC | SCHED_IPI_SAVE_CTX);
|
||||||
KASSERT(RTS_ISSET(p, RTS_PROC_STOP));
|
KASSERT(RTS_ISSET(p, RTS_PROC_STOP));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void smp_schedule_migrate_proc(struct proc * p, unsigned dest_cpu)
|
void smp_schedule_migrate_proc(struct proc * p, unsigned dest_cpu)
|
||||||
|
|
|
||||||
|
|
@ -623,7 +623,6 @@ void kernel_call_resume(struct proc *caller)
|
||||||
|
|
||||||
KASSERT(!RTS_ISSET(caller, RTS_SLOT_FREE));
|
KASSERT(!RTS_ISSET(caller, RTS_SLOT_FREE));
|
||||||
KASSERT(!RTS_ISSET(caller, RTS_VMREQUEST));
|
KASSERT(!RTS_ISSET(caller, RTS_VMREQUEST));
|
||||||
|
|
||||||
KASSERT(caller->p_vmrequest.saved.reqmsg.m_source == caller->p_endpoint);
|
KASSERT(caller->p_vmrequest.saved.reqmsg.m_source == caller->p_endpoint);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -840,6 +839,7 @@ int allow_ipc_filtered_msg(struct proc *rp, endpoint_t src_e,
|
||||||
|
|
||||||
/* If so, copy it in from the process. */
|
/* If so, copy it in from the process. */
|
||||||
if (get_mtype) {
|
if (get_mtype) {
|
||||||
|
/* FIXME: offsetof may be undefined */
|
||||||
r = data_copy(src_e,
|
r = data_copy(src_e,
|
||||||
m_src_v + K_OFFSETOF(message, m_type), KERNEL,
|
m_src_v + K_OFFSETOF(message, m_type), KERNEL,
|
||||||
(vir_bytes)&m_buff.m_type, sizeof(m_buff.m_type));
|
(vir_bytes)&m_buff.m_type, sizeof(m_buff.m_type));
|
||||||
|
|
|
||||||
|
|
@ -88,6 +88,7 @@ int do_copy(struct proc * caller, message * m_ptr)
|
||||||
if(m_ptr->m_lsys_krn_sys_copy.flags & CP_FLAG_TRY) {
|
if(m_ptr->m_lsys_krn_sys_copy.flags & CP_FLAG_TRY) {
|
||||||
int r;
|
int r;
|
||||||
KASSERT(caller->p_endpoint == VFS_PROC_NR);
|
KASSERT(caller->p_endpoint == VFS_PROC_NR);
|
||||||
|
|
||||||
r = virtual_copy(&vir_addr[_SRC_], &vir_addr[_DST_], bytes);
|
r = virtual_copy(&vir_addr[_SRC_], &vir_addr[_DST_], bytes);
|
||||||
if(r == EFAULT_SRC || r == EFAULT_DST) return r = EFAULT; // EFAULT* might be undefined
|
if(r == EFAULT_SRC || r == EFAULT_DST) return r = EFAULT; // EFAULT* might be undefined
|
||||||
return r;
|
return r;
|
||||||
|
|
|
||||||
|
|
@ -60,6 +60,7 @@ int do_getmcontext(struct proc * caller, message * m_ptr)
|
||||||
save_fpu(rp);
|
save_fpu(rp);
|
||||||
mc.mc_flags = (rp->p_misc_flags & MF_FPU_INITIALIZED) ? _MC_FPU_SAVED : 0;
|
mc.mc_flags = (rp->p_misc_flags & MF_FPU_INITIALIZED) ? _MC_FPU_SAVED : 0;
|
||||||
KASSERT(sizeof(mc.__fpregs.__fp_reg_set) == FPU_XFP_SIZE);
|
KASSERT(sizeof(mc.__fpregs.__fp_reg_set) == FPU_XFP_SIZE);
|
||||||
|
|
||||||
kmemcpy(&(mc.__fpregs.__fp_reg_set), rp->p_seg.fpu_state, FPU_XFP_SIZE); // MODIFIED
|
kmemcpy(&(mc.__fpregs.__fp_reg_set), rp->p_seg.fpu_state, FPU_XFP_SIZE); // MODIFIED
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
@ -101,6 +102,7 @@ int do_setmcontext(struct proc * caller, message * m_ptr)
|
||||||
if (mc.mc_flags & _MC_FPU_SAVED) {
|
if (mc.mc_flags & _MC_FPU_SAVED) {
|
||||||
rp->p_misc_flags |= MF_FPU_INITIALIZED;
|
rp->p_misc_flags |= MF_FPU_INITIALIZED;
|
||||||
KASSERT(sizeof(mc.__fpregs.__fp_reg_set) == FPU_XFP_SIZE);
|
KASSERT(sizeof(mc.__fpregs.__fp_reg_set) == FPU_XFP_SIZE);
|
||||||
|
|
||||||
kmemcpy(rp->p_seg.fpu_state, &(mc.__fpregs.__fp_reg_set), FPU_XFP_SIZE); // MODIFIED
|
kmemcpy(rp->p_seg.fpu_state, &(mc.__fpregs.__fp_reg_set), FPU_XFP_SIZE); // MODIFIED
|
||||||
} else
|
} else
|
||||||
rp->p_misc_flags &= ~MF_FPU_INITIALIZED;
|
rp->p_misc_flags &= ~MF_FPU_INITIALIZED;
|
||||||
|
|
|
||||||
|
|
@ -71,6 +71,7 @@ int do_runctl(struct proc * caller, message * m_ptr)
|
||||||
break;
|
break;
|
||||||
case RC_RESUME:
|
case RC_RESUME:
|
||||||
KASSERT(RTS_ISSET(rp, RTS_PROC_STOP));
|
KASSERT(RTS_ISSET(rp, RTS_PROC_STOP));
|
||||||
|
|
||||||
RTS_UNSET(rp, RTS_PROC_STOP);
|
RTS_UNSET(rp, RTS_PROC_STOP);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
||||||
|
|
@ -265,6 +265,7 @@ int verify_grant(
|
||||||
/* If requested, store information regarding soft faults. */
|
/* If requested, store information regarding soft faults. */
|
||||||
if (sfinfo != NULL && (sfinfo->try = !!(g.cp_flags & CPF_TRY))) { // MODIFIED (NULL)
|
if (sfinfo != NULL && (sfinfo->try = !!(g.cp_flags & CPF_TRY))) { // MODIFIED (NULL)
|
||||||
sfinfo->endpt = granter;
|
sfinfo->endpt = granter;
|
||||||
|
/* FIXME: offsetof may be undefined */
|
||||||
sfinfo->addr = priv(granter_proc)->s_grant_table +
|
sfinfo->addr = priv(granter_proc)->s_grant_table +
|
||||||
sizeof(g) * grant_idx + K_OFFSETOF(cp_grant_t, cp_faulted);
|
sizeof(g) * grant_idx + K_OFFSETOF(cp_grant_t, cp_faulted);
|
||||||
sfinfo->value = grant;
|
sfinfo->value = grant;
|
||||||
|
|
@ -414,6 +415,7 @@ int do_vsafecopy(struct proc * caller, message * m_ptr)
|
||||||
/* Set vector copy parameters. */
|
/* Set vector copy parameters. */
|
||||||
src.proc_nr_e = caller->p_endpoint;
|
src.proc_nr_e = caller->p_endpoint;
|
||||||
KASSERT(src.proc_nr_e != NONE);
|
KASSERT(src.proc_nr_e != NONE);
|
||||||
|
|
||||||
src.offset = (vir_bytes) m_ptr->m_lsys_krn_vsafecopy.vec_addr;
|
src.offset = (vir_bytes) m_ptr->m_lsys_krn_vsafecopy.vec_addr;
|
||||||
dst.proc_nr_e = KERNEL;
|
dst.proc_nr_e = KERNEL;
|
||||||
dst.offset = (vir_bytes) vec;
|
dst.offset = (vir_bytes) vec;
|
||||||
|
|
|
||||||
|
|
@ -160,6 +160,7 @@ int do_trace(struct proc * caller, message * m_ptr)
|
||||||
return(EFAULT); // EFAULT might be undefined
|
return(EFAULT); // EFAULT might be undefined
|
||||||
|
|
||||||
if (i == K_OFFSETOF(struct proc, p_reg.psw))
|
if (i == K_OFFSETOF(struct proc, p_reg.psw))
|
||||||
|
|
||||||
/* only selected bits are changeable */
|
/* only selected bits are changeable */
|
||||||
SETPSW(rp, tr_data);
|
SETPSW(rp, tr_data);
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,6 @@
|
||||||
#include <klib/include/kstring.h>
|
#include <klib/include/kstring.h>
|
||||||
#include <klib/include/kmemory.h>
|
#include <klib/include/kmemory.h>
|
||||||
|
|
||||||
|
|
||||||
#if USE_UPDATE
|
#if USE_UPDATE
|
||||||
|
|
||||||
#define DEBUG 0
|
#define DEBUG 0
|
||||||
|
|
|
||||||
|
|
@ -40,6 +40,7 @@ int do_vmctl(struct proc * caller, message * m_ptr)
|
||||||
switch(m_ptr->SVMCTL_PARAM) {
|
switch(m_ptr->SVMCTL_PARAM) {
|
||||||
case VMCTL_CLEAR_PAGEFAULT:
|
case VMCTL_CLEAR_PAGEFAULT:
|
||||||
KASSERT(RTS_ISSET(p,RTS_PAGEFAULT));
|
KASSERT(RTS_ISSET(p,RTS_PAGEFAULT));
|
||||||
|
LDER(RTS_ISSET(p,RTS_PAGEFAULT)); // MODIFIED
|
||||||
RTS_UNSET(p, RTS_PAGEFAULT);
|
RTS_UNSET(p, RTS_PAGEFAULT);
|
||||||
return OK;
|
return OK;
|
||||||
case VMCTL_MEMREQ_GET:
|
case VMCTL_MEMREQ_GET:
|
||||||
|
|
@ -144,6 +145,7 @@ int do_vmctl(struct proc * caller, message * m_ptr)
|
||||||
return OK;
|
return OK;
|
||||||
case VMCTL_VMINHIBIT_CLEAR:
|
case VMCTL_VMINHIBIT_CLEAR:
|
||||||
KASSERT(RTS_ISSET(p, RTS_VMINHIBIT));
|
KASSERT(RTS_ISSET(p, RTS_VMINHIBIT));
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* the processes is certainly not runnable, no need to tell its
|
* the processes is certainly not runnable, no need to tell its
|
||||||
* cpu
|
* cpu
|
||||||
|
|
|
||||||
|
|
@ -129,6 +129,7 @@ int do_vumap(struct proc *caller, message *m_ptr)
|
||||||
/* Copy out the resulting vector of physical addresses. */
|
/* Copy out the resulting vector of physical addresses. */
|
||||||
KASSERT(pcount > 0);
|
KASSERT(pcount > 0);
|
||||||
|
|
||||||
|
|
||||||
size = pcount * sizeof(pvec[0]);
|
size = pcount * sizeof(pvec[0]);
|
||||||
|
|
||||||
r = data_copy_vmcheck(caller, KERNEL, (vir_bytes) pvec, endpt, paddr, size);
|
r = data_copy_vmcheck(caller, KERNEL, (vir_bytes) pvec, endpt, paddr, size);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user