int main() { NativeProcess(); SysStatus rc; ObjectHandle oh; UsrTstRef ref = UsrTst::Create(); rc = DREF(ref)->giveAccessByServer(oh, _KERNEL_PID); tassert(_SUCCESS(rc), err_printf("woops\n")); printf("testDisabledIPC: calling kernel with oh %lx %lx\n", oh.commID(), oh.xhandle()); Scheduler::Disable(); ALLOW_PRIMITIVE_PPC(); DREFGOBJ(TheProcessRef)->testUserIPC(oh); UN_ALLOW_PRIMITIVE_PPC(); Scheduler::Enable(); printf("testDisabledIPC: done calling kernel\n"); for (uval i = 0; i < 20; i++) { printf("testDisabledIPC: sleeping (%ld)\n", i); Scheduler::DelayMicrosecs(5000); } printf("testDisabledIPC: terminating\n"); return 0; }
/* static */ SysStatus RegionReplicated::_CreateFixedLenExtDyn(uval& regionVaddr, uval regionSize, uval alignmentreq, ObjectHandle frOH, uval fileOffset, uval accessreq, XHandle target, ObjectHandle tsOH, RegionType::Type regionType, __CALLER_PID callerPID) { RegionRef ref; ProcessRef pref=0; SysStatus rc; FCMRef fcmRef; TypeID type; ObjRef objRef; FRRef frRef; rc = RegionDefault::PrefFromTarget(target, callerPID, pref); _IF_FAILURE_RET(rc); rc = XHandleTrans::XHToInternal(frOH.xhandle(), callerPID, MetaObj::attach, objRef, type); tassertWrn(_SUCCESS(rc), "RegionReplicated failed XHToInternal\n"); _IF_FAILURE_RET(rc); // verify that type is of FRComp - we'd really like just FR // FIXMEXX talk to Orran, the brilliant, charming, .. if (!MetaFR::isBaseOf(type)) { tassertWrn(0, "object handle <%lx,%lx> not of correct type\n", frOH.commID(), frOH.xhandle()); return _SERROR(1542, 0, EINVAL); } //FIXME check xobj to make sure it matches our processID frRef = (FRRef)objRef; rc = RegionReplicated::CreateFixedLen( ref, pref, regionVaddr, regionSize, alignmentreq, frRef, fileOffset, (AccessMode::mode)accessreq); // FIXME: Kludge for enabling dyn-switch #if 0 CObjRoot *partitionedFCMRoot = 0; rc = FCMPartitionedTrivial::Create(partitionedFCMRoot, fcmRef, regionSize, /* number of cache lines per rep */ 256, /* associativity of each line */ 4); tassert(_SUCCESS(rc), err_printf("Replicated Trivial fcm create\n")); PMRef pmRef; rc = DREF(pref)->getPM(pmRef); tassert(_SUCCESS(rc), ;);