
Hi!
I could use a clue as to the cause of this problem.
The program has its free slots start index set correctly.
It is trying to allocate a dma buffer. (4k with a known physical address).
The vspace has been properly set up and knows the phys addresses of its free memory.
This used to work fine in a different process, but I can't find anything I've done
different/wrong in this one...
I've added some extra printfs, and some debug code (in kernel/src/object/untyped.c).
/* Ensure that the destination slots are all empty. */
slots.cnode = CTE_PTR(cap_cnode_cap_get_capCNodePtr(nodeCap));
slots.offset = nodeOffset;
slots.length = nodeWindow;
for (i = nodeOffset; i < nodeOffset + nodeWindow; i++) {
status = ensureEmptySlot(slots.cnode + i);
if (status != EXCEPTION_NONE) {
userError("Untyped Retype: Slot #%d from %p in destination window non-empty.", (int)i, (void *)slots.cnode);
userError("Untyped Retype: At offset #%d length %d.", (int)nodeOffset, (int)nodeWindow);
int j = 0;
for(j=0;j<2048;j++){
status = ensureEmptySlot(slots.cnode + (i + j));
if (status == EXCEPTION_NONE) {
userError("Next Free Slot at #%d from %p.", (int)(i+j), (void *)slots.cnode);
status = EXCEPTION_SYSCALL_ERROR;
break;
}
}
return status;
}
}
And finally, here is the output from the console:
<