NAME | SYNOPSIS | FEATURES | DESCRIPTION | RETURN VALUE | ERRORS | RESTRICTIONS | ATTRIBUTES | SEE ALSO
#include <mem/chMem.h>int lcFlush(KnObjDesc * lcdesc, VmFlags flags, unsigned long ordernb);
MEM_VM
This system call is strictly reserved for internal use only. It MUST NOT be used by any application.
The lcFlush call performs a flush operation on a range of a local cache. The lcdesc argument points to a KnObjDesc structure whose members are the following:
KnCap dataObject ; VmOffset startOffset ; VmSize size ; |
where the dataObject field is the local cache capability, the startOffset field is the range start offset in the local cache, and the size field is the range size. Both startOffset and size must be fragment-aligned. The size of the fragment is implementation-dependent and is usually equal to the virtual page size divided by 8 (number of bits in one byte).
For lcFlush, the target local cache is directly specified by its capability; the flush operation is applied even if the cache is managed by a remote site.
The sgFlush call takes the same arguments, except the dataObject field specifies the capability of the cached segment. For sgFlush, the target local cache is indirectly specified by the capability of the corresponding segment; the flush operation implicitly applies to the segment's cache(s) located on the caller's site.
The vmFlush call performs a flush operation on the ranges of the local caches mapped to an address range of an actor address space. The address range must be page-aligned.
The target actor is specified by actorcap - a pointer to the actor capability. If actorcap is K_MYACTOR, the address space of the current actor is used. If actorcap is K_SVACTOR, the supervisor address space is used.
The flags argument specifies the mode of the flush and the upper access rights for the target parts after the flush operation.
If the K_COPYBACK flag is set, xxFlush writes back any (even clean) cached data of the target parts and keeps the parts access rights unchanged.
If the K_WRITABLE flag is set, xxFlush writes back all modified data of the target parts and keeps the parts access rights unchanged.
If the K_READABLE flag is set, xxFlush writes back all modified data of the target parts and then sets the parts to read access only.
If the K_FREEZE flag is set, xxFlush writes back all modified data of the target parts and then sets the parts as non-accessible.
If the K_NOACCESS flag is set, xxFlush writes back all modified data of the target parts and invalidates them.
If the K_DESTROY flag is set, xxFlush invalidates the target parts without writing back.
If the K_ASYNC flag is set, the vm performs the write operations required by the xxFlush asynchronously.
If K_PAGEFAULT flag is set, xxFlush is a result of a page fault. This type of lcFlush operation could break the atomicity of a sgRead/sgWrite operation running concurrently on the same local cache parts.
The K_ORDERED flag can only be used with an lcFlush or an lcSetRights request. If the flags is set, the orderNb argument specifies the lcFlush message order number. It allows the kernel to detect the situation when two mesages sent by a mapper in one order are received by the kernel in another. For instance, if the mapper grants certain access rights in a MpGetAccess reply first, then, processing another request, calls an lcFlush to recall the access rights, considering the order numbers, the kernel is aware that the access returned by the MpGetAccess reply was already recalled by the mapper, and performs another MpGetAccess request.
The lcSetRights operation is similar to the lcFlush operation, except that it only changes data protections without invalidation and/or writing back: the K_WRITABLE flag is ignored, the K_READABLE flag sets the target parts read--only, whereas the K_FREEZE and K_NOACCESS flags set the target parts to non-accessible. The K_COPYBACK, K_ASYNC and K_DESTROY flags are prohibited.
The sgSyncAll operation writes back asynchronously all dirty parts of all local caches on the site, except the local caches mapped at least once to a region with the K_NOSYNC attribute (see rgnMap(2SEG)).
If successful K_OK is returned, otherwise a negative error code is returned.
Some of the arguments provided are outside the caller's address space.
An inconsistent actor capability was provided.
actorcap does not specify a reachable actor.
address or size isn't page-aligned.
lcdesc->startOffset or lcdesc->size isn't fragment-aligned.
segdesc->startOffset or segdesc->size isn't fragment-aligned.
Some or all the addresses from the target address range are invalid.
Tried to flush a segment outside the valid offset range in a segment, as returned by vmStat.
The flags argument contains invalid flag values.
Tried to invalidate or destroy a no-demand (mapped to a region with K_NODEMAND attribute) physical memory.
An ipcCall transaction failed during the remote lcFlush or lcSetRights.
The mapper doesn't respect the vm/mapper protocol.
The target actor and the current actor must be located on the same site ( vmFlush only).
The sgFlush and sgSyncAll calls remain in the interface for backward compatibility. They will be removed in a future release.
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
---|---|
Interface Stability | Evolving |
MpGetAccess(2SEG) , MpPullIn(2SEG) , MpPushOut(2SEG) , rgnMap(2SEG) , lcOpen(2SEG) , lcFillZero(2SEG) , lcTrunc(2SEG)
NAME | SYNOPSIS | FEATURES | DESCRIPTION | RETURN VALUE | ERRORS | RESTRICTIONS | ATTRIBUTES | SEE ALSO