bttd->InterruptControlWord = (bttd->InterruptControlWord & ~kInterruptStateMask) |
(kInPseudoKernel << kInterruptStateShift);
- bttd->exceptionInfo.srr0 = (unsigned int)sv->save_srr0; /* Save the current PC */
- sv->save_srr0 = (uint64_t)bttd->InterruptVector; /* Set the new PC */
- bttd->exceptionInfo.sprg1 = (unsigned int)sv->save_r1; /* Save the original R1 */
- sv->save_r1 = (uint64_t)bttd->exceptionInfo.sprg0; /* Set the new R1 */
- bttd->exceptionInfo.srr1 = (unsigned int)sv->save_srr1; /* Save the original MSR */
+ bttd->exceptionInfo.srr0 = sv->save_srr0; /* Save the current PC */
+ sv->save_srr0 = bttd->InterruptVector; /* Set the new PC */
+ bttd->exceptionInfo.sprg1 = sv->save_r1; /* Save the original R1 */
+ sv->save_r1 = bttd->exceptionInfo.sprg0; /* Set the new R1 */
+ bttd->exceptionInfo.srr1 = sv->save_srr1; /* Save the original MSR */
sv->save_srr1 &= ~(MASK(MSR_BE)|MASK(MSR_SE)); /* Clear SE|BE bits in MSR */
act->mact.specFlags &= ~bbNoMachSC; /* reactivate Mach SCs */
disable_preemption(); /* Don't move us around */
) {
thread_t th;
- vm_offset_t kerndescaddr, origdescoffset;
+ vm_offset_t kerndescaddr, physdescaddr, origdescoffset;
kern_return_t ret;
- ppnum_t physdescpage;
th = current_thread(); /* Get our thread */
return KERN_FAILURE;
}
- physdescpage = /* Get the physical page number of the page */
- pmap_find_phys(th->top_act->map->pmap, (addr64_t)Desc_TableStart);
+ physdescaddr = /* Get the physical address of the page */
+ pmap_extract(th->top_act->map->pmap, (vm_offset_t) Desc_TableStart);
ret = kmem_alloc_pageable(kernel_map, &kerndescaddr, PAGE_SIZE); /* Find a virtual address to use */
if(ret != KERN_SUCCESS) { /* Could we get an address? */
}
(void) pmap_enter(kernel_pmap, /* Map this into the kernel */
- kerndescaddr, physdescpage, VM_PROT_READ|VM_PROT_WRITE,
+ kerndescaddr, physdescaddr, VM_PROT_READ|VM_PROT_WRITE,
VM_WIMG_USE_DEFAULT, TRUE);
th->top_act->mact.bbDescAddr = (unsigned int)kerndescaddr+origdescoffset; /* Set kernel address of the table */
act->mact.bbTaskEnv = save->save_r4;
if(act == current_act()) { /* Are we setting our own? */
disable_preemption(); /* Don't move us around */
- per_proc_info[cpu_number()].ppbbTaskEnv = act->mact.bbTaskEnv; /* Remember the environment */
+ per_proc_info[cpu_number()].spcFlags = act->mact.specFlags; /* Copy the flags */
enable_preemption(); /* Ok to move us around */
}