linux/include
David Rientjes 028fec414d mempolicy: support optional mode flags
With the evolution of mempolicies, it is necessary to support mempolicy mode
flags that specify how the policy shall behave in certain circumstances.  The
most immediate need for mode flag support is to suppress remapping the
nodemask of a policy at the time of rebind.

Both the mempolicy mode and flags are passed by the user in the 'int policy'
formal of either the set_mempolicy() or mbind() syscall.  A new constant,
MPOL_MODE_FLAGS, represents the union of legal optional flags that may be
passed as part of this int.  Mempolicies that include illegal flags as part of
their policy are rejected as invalid.

An additional member to struct mempolicy is added to support the mode flags:

	struct mempolicy {
		...
		unsigned short policy;
		unsigned short flags;
	}

The splitting of the 'int' actual passed by the user is done in
sys_set_mempolicy() and sys_mbind() for their respective syscalls.  This is
done by intersecting the actual with MPOL_MODE_FLAGS, rejecting the syscall of
there are additional flags, and storing it in the new 'flags' member of struct
mempolicy.  The intersection of the actual with ~MPOL_MODE_FLAGS is stored in
the 'policy' member of the struct and all current users of pol->policy remain
unchanged.

The union of the policy mode and optional mode flags is passed back to the
user in get_mempolicy().

This combination of mode and flags within the same actual does not break
userspace code that relies on get_mempolicy(&policy, ...) and either

	switch (policy) {
	case MPOL_BIND:
		...
	case MPOL_INTERLEAVE:
		...
	};

statements or

	if (policy == MPOL_INTERLEAVE) {
		...
	}

statements.  Such applications would need to use optional mode flags when
calling set_mempolicy() or mbind() for these previously implemented statements
to stop working.  If an application does start using optional mode flags, it
will need to mask the optional flags off the policy in switch and conditional
statements that only test mode.

An additional member is also added to struct shmem_sb_info to store the
optional mode flags.

[hugh@veritas.com: shmem mpol: fix build warning]
Cc: Paul Jackson <pj@sgi.com>
Cc: Christoph Lameter <clameter@sgi.com>
Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>
Cc: Andi Kleen <ak@suse.de>
Signed-off-by: David Rientjes <rientjes@google.com>
Signed-off-by: Hugh Dickins <hugh@veritas.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-04-28 08:58:19 -07:00
..
acpi
asm-alpha generic: implement __fls on all 64-bit archs 2008-04-26 19:21:16 +02:00
asm-arm ide: add struct ide_io_ports (take 3) 2008-04-27 15:38:32 +02:00
asm-avr32 avr32: add include/asm-avr32/serial.h 2008-04-19 20:40:10 -04:00
asm-blackfin [Blackfin] arch: add include/boot .gitignore files 2008-04-25 08:29:11 +08:00
asm-cris ide: add struct ide_io_ports (take 3) 2008-04-27 15:38:32 +02:00
asm-frv frv: remove HARD_RESET_NOW() 2008-04-21 16:03:13 -07:00
asm-generic bitops: use __fls for fls64 on 64-bit archs 2008-04-26 19:21:16 +02:00
asm-h8300 Generic semaphore implementation 2008-04-17 10:42:34 -04:00
asm-ia64 KVM: Rename VCPU_MP_STATE_* to KVM_MP_STATE_* 2008-04-27 12:04:13 +03:00
asm-m32r Merge git://git.kernel.org/pub/scm/linux/kernel/git/bart/ide-2.6 2008-04-18 08:39:24 -07:00
asm-m68k Generic semaphore implementation 2008-04-17 10:42:34 -04:00
asm-m68knommu Generic semaphore implementation 2008-04-17 10:42:34 -04:00
asm-mips Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/x86/linux-2.6-generic-bitops-v3 2008-04-26 13:46:11 -07:00
asm-mn10300 Generic semaphore implementation 2008-04-17 10:42:34 -04:00
asm-parisc generic: implement __fls on all 64-bit archs 2008-04-26 19:21:16 +02:00
asm-powerpc KVM: ppc: PowerPC 440 KVM implementation 2008-04-27 18:21:39 +03:00
asm-ppc [POWERPC] 4xx: Fix duplicate phys_addr_t definition 2008-04-24 20:57:34 +10:00
asm-s390 KVM: s390: Improve pgste accesses 2008-04-27 12:01:00 +03:00
asm-sh generic: implement __fls on all 64-bit archs 2008-04-26 19:21:16 +02:00
asm-sparc [SPARC64]: NUMA device infrastructure. 2008-04-23 23:32:16 -07:00
asm-sparc64 generic: implement __fls on all 64-bit archs 2008-04-26 19:21:16 +02:00
asm-um Generic semaphore implementation 2008-04-17 10:42:34 -04:00
asm-v850 Generic semaphore implementation 2008-04-17 10:42:34 -04:00
asm-x86 Merge branch 'kvm-updates-2.6.26' of git://git.kernel.org/pub/scm/linux/kernel/git/avi/kvm 2008-04-27 10:13:52 -07:00
asm-xtensa Generic semaphore implementation 2008-04-17 10:42:34 -04:00
crypto [CRYPTO] aes: Export generic setkey 2008-04-21 10:19:34 +08:00
keys KEYS: Fix the comment to match the file name in rxrpc-type.h. 2008-04-21 22:43:55 +00:00
linux mempolicy: support optional mode flags 2008-04-28 08:58:19 -07:00
math-emu
media V4L/DVB (7677): saa7134: Add/fix Beholder entries 2008-04-24 14:09:46 -03:00
mtd UBI: make ubi-header.h local 2008-04-17 11:31:58 +03:00
net IPv6 support for NFS server export caches 2008-04-23 16:13:36 -04:00
pcmcia
rdma IB: convert struct class_device to struct device 2008-04-19 19:10:30 -07:00
rxrpc
scsi [SCSI] rework scsi_target allocation 2008-04-22 15:16:31 -05:00
sound [ALSA] Define MPU401 registers in sound/mpu401_uart.h 2008-04-24 12:38:22 +02:00
video
xen xen: add balloon driver 2008-04-24 23:57:33 +02:00
Kbuild