NAME | SYNOPSIS | FEATURES | DESCRIPTION | RESTRICTIONS | RETURN VALUE | ERRORS | ATTRIBUTES | SEE ALSO
#include <mem/chMem.h>void PxmPushOutAsyn(KnPxmPushOutArgs *pushArg, void *cookie);
PXM_EXT
This system call is strictly reserved for internal use only. It MUST NOT be used by any application.
The PxmPushOutAsyn routine is provided by the Proxy-Mapper and is invoked as an up-call by the CHORUS VM. It is invoked as a lap; its second argument is the lap cookie as defined at svLapCreate time. The PxmPushOutAsyn up-call is invoked by the VM in order to write data to a data segment from the data cache. The KnPxmPushOutArgs structure has the following members:
KnDtPxMapper* pxm ; KnSgId sgId ; KnPage* page ; VmFlags flags ; void* pdDesc ; |
The sgId field specifies the corresponding data segment. The page field specifies the list of pages to be written. It points to a KnPage structure (see PxmGetAcc(2SEG) ) which specifies the first page of the list.
If at least one page of the list has been modified, The VM sets the K_DIRTY bit in the flags field. The flags field also contains the K_POUT_TYPE bit field which specifies the reason for the PxmPushOutAsyn up-call:
This up-call is the result of a call to dcFlush.
This up-call is the result of a call to dcSync.
This up-call is invoked by the swapper.
If PxmPushOutAsyn is invoked by dcFlush, the pdDesc field is the pout argument of the dcFlush nucleus call, otherwise it is set to NULL.
The Proxy-Mapper must return from the PxmPushOutAsyn up-call and must perform the pageIoDone nucleus call after the write operation is completed. This may be done either before or after returning from the PxmPushOutAsyn up-call. There is no need for the Proxy-Mapper to invoke the pageIoDone call with the same page list. Multiple calls to pageIoDone may be performed one with disjointed sub-lists of pages.
The pages of the page list are fully attached to the data cache and locked. In the case of dcFlush or swap, the pages are write locked (exclusively). In the case of dcSync, the pages are read locked (share). Note that in order to avoid a concurrent PxmPushOutAsyn of the same page, dcSync first acquires the write lock, and then downgrades it to the read one. This implies that all Nucleus calls (including dcFlush, dcFillZero and dcTrunc) which acquire a lock on this type of page are blocked until pageIoDone is finished.
The current implementation is only applicable to trusted supervisor actors.
No error messages are returned.
none
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
---|---|
Interface Stability | Evolving |
dcPxmDeclare(2SEG), dcAlloc(2SEG), dcFree(2SEG), svLapCreate(2K), lapInvoke(2K), PxmGetAcc(2SEG), PxmRelAccLock(2SEG), pageMap(2SEG), pageIoDone(2SEG)
NAME | SYNOPSIS | FEATURES | DESCRIPTION | RESTRICTIONS | RETURN VALUE | ERRORS | ATTRIBUTES | SEE ALSO