NAME | SYNOPSIS | FEATURES | DESCRIPTION | RESTRICTIONS | RETURN VALUE | ERRORS | ATTRIBUTES | SEE ALSO
#include <mem/chMem.h>int dcSync(KnLcId lcid, int pagenb, VmOffset * offset);
PXM_EXT
This system call is strictly reserved for internal use only. It MUST NOT be used by any application.
The dcSync function scans the physical pages attached to the data cache object specified by the lcid argument. The scanning is performed incrementally by offset, the start page is defined by the offset argument. The pagenb defines the maximum number of pages to be scanned. Each modified page will be passed to the pushOutAsyn up-call. The way the pages are passed to this upcall depends on the out cluster size as defined by dcCluster. The function returns either a non-negative value, which means that all pages have been scanned. The return value is the difference between pagenb and the number of scanned pages. A value of -1 means that all pages specified have been scanned but that there are still unscanned pages. In such a case, dcSync sets the offset output argument to the first unscanned page offset.
The dcFlush nucleus call flushes physical pages associated to the data cache object defined by the lcId argument, according to the structure pointed to by fldesc. This structure is composed of the following members:
VmFlags flags ; VmOffset desStart ; VmOffset desEnd ; VmOffset reqStart ; VmOffset reqEnd ; |
The dcFlush call enables the flushing of all pages in the range defined by the reqStart and reqEnd offsets to be requested. It also permits the specification of a desired range of pages to be flushed, by setting the desStart and desEnd fields to the appropriate values. If no desired range is needed, the desStart field should be set to the value of the reqStart field. Similarly, the desEnd field should be set the value of the reqEnd field. The desStart argument should be less than or equal to reqStart , and the desEnd argument should be greater than or equal to reqEnd. The system will flush all pages in the required range, and will try to flush pages in the desired range. In particular, it will avoid being blocked for pages which are in the desired range but not in the required range.
The dcFlush call may perform the flush in different ways according to the value of the flags field. This field specifies the required flush mode and consists of several parts:
Access rights are left unchanged. This is useful for flushing dirty pages without modifiyng access rights previously granted to the data cache object.
Write access rights are recalled.
Read and write access rights are recalled.
Read and write access rights are recalled and pages in the desired range are destroyed.
The pushOutAsyn up-call is never invoked. This is useful for modifying access rights without performing any push out operations.
The pushOutAsyn up-call is performed for dirty pages only.
The pushOutAsyn up-call is invoked for all pages even if they are not dirty.
If this flag is set, dcFlush sets the K_PAGEFAULT flag in the flags argument of the pushOutAsyn up-call.
If this flag is set, dcFlush will invoke the pushOutAsyn up-call with lists of contiguous pages not aligned on the cluster size defined for the data cache object. If possible, the entire desired range will be passed as a single list to the pushOutAsyn up-call. Several lists will be built in the case of discontigous lists of pages (in such a case, several up-calls will be invoked).
The pout argument is an opaque for the VM and will be passed back as an argument of the pushOutAsyn up-call, if any.
If successful, dcFlush returns K_OK, otherwise an error code is returned.
The dcFlush call acquires an exclusive lock on pages being flushed. For pages belonging to the desired range but not to the required range, dcFlush does not block in order to acquire this lock;, if the lock cannot be acquired the page will not be flushed. Pages specified in the getAcc up-call are not visible to the dcFlush system call. Thus, VM insures that the dcFlush operation will never be blocked by a getAcc up-call. In other words, there is no risk of deadlock (from a VM point of view) when an Extrenal Proxy-Mapper performs a dcFlush while a getAcc up-call is blocked in this PXM.
The current implementation is only applicable to trusted supervisor actors.
If successful dcSync returns -1 when all pages specified have been scanned, but there are still unscanned pages. Otherwise, it returns the difference between the number of scanned pages and the pageNb argument.
The dcFlush call returns K_OK in case of success, otherwise an error code is returned.
See attributes(5) for descriptions of the following attributes:
ATTRIBUTE TYPE | ATTRIBUTE VALUE |
---|---|
Interface Stability | Evolving |
dcAlloc(2SEG) , dcFree(2SEG) , dcFlush(2SEG) , dcFillZero(2SEG) , dcRead(2SEG) , dcWrite(2SEG) , dcPgNumber(2SEG) , dcSync(2SEG) , dcPxmDeclare(2SEG) , rgnMapFromDtCache(2SEG) , rgnInitFromDtCache(2SEG) , rgnFlush(2SEG)
NAME | SYNOPSIS | FEATURES | DESCRIPTION | RESTRICTIONS | RETURN VALUE | ERRORS | ATTRIBUTES | SEE ALSO