From: Michael H. <hoh...@us...> - 2001-12-18 21:46:11
|
I like this approach, but have a few questions/suggestions: * How would this be used? There needs to be some way to allow a CpuMemMap to make use of the exclusive resources. Do you assume that CpuMemMaps already exist that use these exclusive resources and this just stops any additional ones being created? Can't do a "bulk remap all" to pull users off of the CpuMemMap, as that would include the "master". * Maybe what is needed is a pointer to the CpuMemMap that is the "master" for this set of resources. * Also, need to have a query capability. Michael Hohnbaum hoh...@us... > > On further review, the MASTER interface is faaarr too baroque. > > Discarding any pretense of explaining how I ended up with such, > let's erase the white board and try again. > > How about: > > typedef struct cms_exclusive_set { > int nr_cpus; > cms_scpu_t *cpus; > int nr_mems; > cms_smem_t *mems; > } cms_exclusive_set_t; > > int cmsAddExclusive (cms_exclusive_set_t s); > > int cmsRemoveExclusive (cms_exclusive_set_t s); > > cms_exclusive_set_t *cmsQueryExclusive(); > > void cmsFreeExclSet (cms_exclusive_set_t s); > > These calls require root privileges (or a capability to be > defined ?). The kernel maintains a list of CPUs and a list of > memory blocks, by system number, that are marked exclusive. > > The cmsAddExclusive() method adds the specified CPUs and memory > blocks to these kernel lists. The cmsRemoveExclusive() method > removes the specified CPUs and memory blocks from these kernel > lists. The cmsQueryExclusive() method returns the current > contents of these kernel lists. The cmsFreeExclSet() method > frees the result of a cmsQueryExclusive() call. > > If a CPU or memory block is on these kernel lists, then other > calls to include either one in a cpumemmap, using cmsSetCMM or > cmsBulkRemap, will fail with errno == EBUSY, except for CPUs > and memory blocks that were already in the cpumemmap that was > attached to the affected process, vm area, or kernel prior to > the call. > > Along with the above, remove from the existing CpuMemSets > Design: > #define CMS_MASTER 0x01 > #define CMS_DROPMASTER 0x02 > typedef int cms_mappol_t; > and the cpumemmap_t element cms_mappol_t cms_policy; > > > > I won't rest till it's the best ... > Manager, Linux Scalability > Paul Jackson <pj...@sg...> 1.650.933.1373 > |