kernel-ark/include/linux
Andy Whitcroft d41dee369b [PATCH] sparsemem memory model
Sparsemem abstracts the use of discontiguous mem_maps[].  This kind of
mem_map[] is needed by discontiguous memory machines (like in the old
CONFIG_DISCONTIGMEM case) as well as memory hotplug systems.  Sparsemem
replaces DISCONTIGMEM when enabled, and it is hoped that it can eventually
become a complete replacement.

A significant advantage over DISCONTIGMEM is that it's completely separated
from CONFIG_NUMA.  When producing this patch, it became apparent in that NUMA
and DISCONTIG are often confused.

Another advantage is that sparse doesn't require each NUMA node's ranges to be
contiguous.  It can handle overlapping ranges between nodes with no problems,
where DISCONTIGMEM currently throws away that memory.

Sparsemem uses an array to provide different pfn_to_page() translations for
each SECTION_SIZE area of physical memory.  This is what allows the mem_map[]
to be chopped up.

In order to do quick pfn_to_page() operations, the section number of the page
is encoded in page->flags.  Part of the sparsemem infrastructure enables
sharing of these bits more dynamically (at compile-time) between the
page_zone() and sparsemem operations.  However, on 32-bit architectures, the
number of bits is quite limited, and may require growing the size of the
page->flags type in certain conditions.  Several things might force this to
occur: a decrease in the SECTION_SIZE (if you want to hotplug smaller areas of
memory), an increase in the physical address space, or an increase in the
number of used page->flags.

One thing to note is that, once sparsemem is present, the NUMA node
information no longer needs to be stored in the page->flags.  It might provide
speed increases on certain platforms and will be stored there if there is
room.  But, if out of room, an alternate (theoretically slower) mechanism is
used.

This patch introduces CONFIG_FLATMEM.  It is used in almost all cases where
there used to be an #ifndef DISCONTIG, because SPARSEMEM and DISCONTIGMEM
often have to compile out the same areas of code.

Signed-off-by: Andy Whitcroft <apw@shadowen.org>
Signed-off-by: Dave Hansen <haveblue@us.ibm.com>
Signed-off-by: Martin Bligh <mbligh@aracnet.com>
Signed-off-by: Adrian Bunk <bunk@stusta.de>
Signed-off-by: Yasunori Goto <y-goto@jp.fujitsu.com>
Signed-off-by: Bob Picco <bob.picco@hp.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2005-06-23 09:45:04 -07:00
..
byteorder
dvb
hdlc
isdn
lockd [PATCH] NLM: fix a client-side race on blocking locks. 2005-06-22 16:07:42 -04:00
mmc
mtd
netfilter_arp
netfilter_bridge
netfilter_ipv4 [NETFILTER]: Fix "iptables -D" rule deletion with ipt_CLUSTERIP target. 2005-06-22 12:38:33 -07:00
netfilter_ipv6
nfsd [PATCH] NFSD: Add server support for NFSv3 ACLs. 2005-06-22 16:07:23 -04:00
raid [PATCH] Two small fixes for md verion-1 superblocks. 2005-06-21 19:07:47 -07:00
sunrpc [PATCH] NFSD: Add server support for NFSv3 ACLs. 2005-06-22 16:07:23 -04:00
tc_act
tc_ematch [PKT_SCHED]: Allow socket attributes to be matched on via meta ematch 2005-06-08 15:10:48 -07:00
8250_pci.h
a.out.h
ac97_codec.h
acct.h
acpi.h [PATCH] Include <linux/config.h> before testing CONFIG_ACPI 2005-06-06 17:02:03 -07:00
adb.h
adfs_fs_i.h
adfs_fs_sb.h
adfs_fs.h
affs_fs.h
affs_hardblocks.h
agp_backend.h
agpgart.h
aio_abi.h
aio.h
amifd.h
amifdreg.h
amigaffs.h
apm_bios.h
arcdevice.h
arcfb.h [PATCH] Framebuffer driver for Arc LCD board 2005-06-21 19:07:41 -07:00
ata.h
atalk.h [ATALK]: endian annotations 2005-06-20 13:32:05 -07:00
atm_eni.h
atm_he.h
atm_idt77105.h
atm_nicstar.h
atm_suni.h
atm_tcp.h
atm_zatm.h
atm.h
atmapi.h
atmarp.h
atmbr2684.h
atmclip.h
atmdev.h
atmioc.h
atmlec.h
atmmpc.h
atmppp.h
atmsap.h
atmsvc.h
attribute_container.h
audit.h
auto_fs4.h [PATCH] autofs4: subversion bump to identify these changes 2005-06-21 19:07:36 -07:00
auto_fs.h
awe_voice.h
ax25.h
b1lli.h
b1pcmcia.h
backing-dev.h
backlight.h
baycom.h
bcd.h
bfs_fs.h
binfmts.h
bio.h
bitmap.h
bitops.h
blkdev.h
blkpg.h
blockgroup_lock.h
bootmem.h [PATCH] sparsemem base: simple NUMA remap space allocator 2005-06-23 09:45:01 -07:00
bpqether.h
buffer_head.h
cache.h
capability.h
capi.h
cciss_ioctl.h
cd1400.h
cdev.h
cdk.h
cdrom.h
chio.h
circ_buf.h
cobalt-nvram.h
coda_cache.h
coda_fs_i.h
coda_linux.h
coda_proc.h
coda_psdev.h
coda.h
coff.h
com20020.h
compat_ioctl.h
compat.h
compiler-gcc2.h
compiler-gcc3.h
compiler-gcc4.h
compiler-gcc.h
compiler-intel.h
compiler.h
completion.h
comstats.h
concap.h
config.h
console_struct.h
console.h
consolemap.h
cpu.h
cpufreq.h
cpumask.h
cpuset.h
cramfs_fs_sb.h
cramfs_fs.h
crc32.h
crc32c.h
crc-ccitt.h
crypto.h
cryptohash.h
ctype.h
cuda.h
cyclades.h
cyclomx.h
cycx_cfm.h
cycx_drv.h
cycx_x25.h
dcache.h
dcookies.h
debugfs.h
delay.h
devfs_fs_kernel.h
devfs_fs.h
device-mapper.h
device.h [PATCH] Driver core: change device_attribute callbacks 2005-06-20 15:15:31 -07:00
devpts_fs.h
dio.h
dirent.h
divert.h
dm9000.h
dm-ioctl.h
dma-mapping.h [SCSI] Add DMA mask constants other than 32 and 64 bit 2005-06-17 20:37:11 -05:00
dmapool.h
dmi.h
dn.h
dnotify.h
dqblk_v1.h
dqblk_v2.h
dqblk_xfs.h
ds1286.h
dtlk.h
edd.h
eeprom.h
efi.h [PATCH] avoid signed vs unsigned comparison in efi_range_is_wc() 2005-06-16 16:27:14 -07:00
efs_dir.h
efs_fs_i.h
efs_fs_sb.h
efs_fs.h
efs_vh.h
eisa.h
elevator.h
elf-fdpic.h
elf.h
elfcore.h
err.h
errno.h
errqueue.h
etherdevice.h
ethtool.h
eventpoll.h
ext2_fs_sb.h
ext2_fs.h
ext3_fs_i.h
ext3_fs_sb.h
ext3_fs.h
ext3_jbd.h
fadvise.h
fb.h [PATCH] fbdev: stack reduction 2005-06-21 19:07:41 -07:00
fcdevice.h
fcntl.h
fd1772.h
fd.h
fddidevice.h
fdreg.h
file.h
filter.h
firmware.h
flat.h
font.h [PATCH] New framebuffer fonts + updated 12x22 font available 2005-06-21 19:07:41 -07:00
fs_struct.h
fs.h [PATCH] NFSv4: Clean up nfs4 lock state accounting 2005-06-22 16:07:42 -04:00
fsl_devices.h [PATCH] ppc32: Added support for new MPC8548 family of PowerQUICC III processors 2005-06-21 18:46:23 -07:00
ftape-header-segment.h
ftape-vendors.h
ftape.h
futex.h
gameport.h
gen_stats.h
genalloc.h [PATCH] ia64 uncached alloc 2005-06-21 18:46:18 -07:00
generic_serial.h
genhd.h
gfp.h [PATCH] Periodically drain non local pagesets 2005-06-21 18:46:18 -07:00
hardirq.h
harrier_defs.h
hash.h
hayesesp.h
hdlc.h
hdlcdrv.h
hdpu_features.h
hdreg.h
hdsmart.h
hiddev.h
highmem.h
highuid.h
hippidevice.h
hpet.h
hpfs_fs.h
hugetlb.h [PATCH] Hugepage consolidation 2005-06-21 18:46:15 -07:00
hwmon-sysfs.h [PATCH] I2C: rename i2c-sysfs.h to hwmon-sysfs.h 2005-06-21 21:52:05 -07:00
hysdn_if.h
i2c-algo-bit.h
i2c-algo-ite.h
i2c-algo-pca.h
i2c-algo-pcf.h
i2c-algo-sgi.h
i2c-algo-sibyte.h
i2c-dev.h
i2c-id.h [PATCH] I2C: Add support for Maxim/Dallas DS1374 Real-Time Clock Chip (1/2) 2005-06-21 21:52:06 -07:00
i2c-sensor.h
i2c-vid.h [PATCH] I2C: i2c-vid.h: Support for VID to reg conversion 2005-06-21 21:51:49 -07:00
i2c.h [PATCH] I2C: Kill address ranges in non-sensors i2c chip drivers 2005-06-21 21:51:48 -07:00
i2o-dev.h
i2o.h
i8k.h
ibmtr.h
icmp.h
icmpv6.h
ide.h
idr.h
if_arcnet.h
if_arp.h
if_bonding.h
if_bridge.h
if_cablemodem.h
if_ec.h
if_eql.h
if_ether.h
if_fc.h
if_fddi.h
if_frad.h
if_hippi.h
if_infiniband.h
if_ltalk.h
if_packet.h
if_plip.h
if_ppp.h
if_pppox.h
if_shaper.h
if_slip.h
if_strip.h
if_tr.h [NET]: linux/if_tr.h needs asm/byteorder.h 2005-06-13 13:57:10 -07:00
if_tun.h
if_tunnel.h
if_vlan.h
if_wanpipe_common.h
if_wanpipe.h
if.h
igmp.h
in6.h
in_route.h
in.h
inet.h
inetdevice.h
init_task.h
init.h
initrd.h
input.h [PATCH] INPUT: move to use the new class code, instead of class_simple 2005-06-20 15:15:04 -07:00
interrupt.h
ioc4.h [PATCH] ioc4: PCI bus speed detection 2005-06-21 18:46:32 -07:00
ioctl32.h
ioctl.h
ioport.h
ip6_tunnel.h
ip_mp_alg.h
ip.h [NET] Rename open_request to request_sock 2005-06-18 22:47:21 -07:00
ipc.h
ipmi_msgdefs.h
ipmi_smi.h
ipmi.h
ipsec.h
ipv6_route.h
ipv6.h [NET] Rename open_request to request_sock 2005-06-18 22:47:21 -07:00
ipx.h
irda.h
irq_cpustat.h
irq.h [PATCH] uml: make hw_controller_type->release exist only for archs needing it 2005-06-21 19:07:32 -07:00
isapnp.h
isdn_divertif.h
isdn_ppp.h
isdn.h
isdnif.h
isicom.h
iso_fs.h
istallion.h
ite_gpio.h
ixjuser.h
jbd.h
jffs2_fs_i.h
jffs2_fs_sb.h
jffs2.h
jffs.h
jhash.h
jiffies.h
journal-head.h
joystick.h
kallsyms.h
kbd_diacr.h
kbd_kern.h
kd.h
kdev_t.h
kernel_stat.h
kernel.h
kernelcapi.h
key-ui.h
key.h
keyboard.h
keyctl.h
kfifo.h
klist.h [PATCH] add klist_node_attached() to determine if a node is on a list or not. 2005-06-20 15:15:17 -07:00
kmalloc_sizes.h
kmod.h
kobj_map.h
kobject_uevent.h
kobject.h [PATCH] kset_hotplug_ops->name shoudl return const char * 2005-06-20 15:15:01 -07:00
kprobes.h
kref.h
kthread.h
lapb.h
lcd.h
libata.h Automatic merge of /spare/repo/linux-2.6/.git branch HEAD 2005-06-03 23:54:56 -04:00
libps2.h
limits.h
linkage.h
linux_logo.h
list.h
llc.h
loop.h
lp.h
major.h
matroxfb.h
mbcache.h
mc6821.h
mc146818rtc.h
mca-legacy.h
mca.h
mempolicy.h
mempool.h
meye.h
mii.h
minix_fs.h
miscdevice.h
mm_inline.h
mm.h [PATCH] sparsemem memory model 2005-06-23 09:45:04 -07:00
mman.h
mmtimer.h
mmzone.h [PATCH] sparsemem memory model 2005-06-23 09:45:04 -07:00
mod_devicetable.h
module.h
moduleloader.h
moduleparam.h
mount.h
mpage.h
mqueue.h
mroute.h
msdos_fs.h
msg.h
mtio.h
mv643xx.h
n_r3964.h
namei.h
namespace.h
nbd.h
ncp_fs_i.h
ncp_fs_sb.h
ncp_fs.h
ncp_mount.h
ncp_no.h
ncp.h
net.h
netdevice.h [NETPOLL]: Introduce a netpoll_info struct 2005-06-22 22:05:31 -07:00
netfilter_arp.h
netfilter_bridge.h
netfilter_decnet.h
netfilter_ipv4.h [NETFILTER]: Kill nf_debug 2005-06-21 14:01:57 -07:00
netfilter_ipv6.h
netfilter_logging.h
netfilter.h
netlink.h [NETLINK]: netlink_callback structure needs 5 args not 4 2005-06-21 12:38:48 -07:00
netpoll.h [NETPOLL]: allow multiple netpoll_clients to register against one interface 2005-06-22 22:05:59 -07:00
netrom.h
nfs2.h
nfs3.h
nfs4_acl.h
nfs4_mount.h
nfs4.h [PATCH] NFSv4: Client-side xdr for writing NFSv4 acls 2005-06-22 16:07:13 -04:00
nfs_fs_i.h [PATCH] NFSv4: Clean up nfs4 lock state accounting 2005-06-22 16:07:42 -04:00
nfs_fs_sb.h [PATCH] NFS: Add support for NFSv3 ACLs 2005-06-22 16:07:24 -04:00
nfs_fs.h [PATCH] NFS: Replace nfs_page insertion sort with a radix sort 2005-06-22 16:07:39 -04:00
nfs_idmap.h
nfs_mount.h [PATCH] NFS: Add support for NFSv3 ACLs 2005-06-22 16:07:24 -04:00
nfs_page.h [PATCH] NFS: Replace nfs_page insertion sort with a radix sort 2005-06-22 16:07:39 -04:00
nfs_xdr.h [PATCH] NFS: Add support for NFSv3 ACLs 2005-06-22 16:07:24 -04:00
nfs.h
nfsacl.h [PATCH] NFSD: Add server support for NFSv3 ACLs. 2005-06-22 16:07:23 -04:00
nfsd_idmap.h
nls.h
nmi.h
node.h [PATCH] Driver core: unregister_node() for hotplug use 2005-06-20 15:15:29 -07:00
nodemask.h
notifier.h
nubus.h
numa.h [PATCH] sparsemem memory model 2005-06-23 09:45:04 -07:00
nvram.h
openprom_fs.h
oprofile.h
page-flags.h [PATCH] __read_page_state(): pass unsigned long instead of unsigned 2005-06-21 18:46:17 -07:00
pagemap.h [PATCH] VM: add __GFP_NORECLAIM 2005-06-21 18:46:14 -07:00
pagevec.h
param.h
parport_pc.h
parport.h
parser.h
patchkey.h
pci_ids.h [PATCH] fbdev: new pci id for chipsfb 2005-06-21 19:07:41 -07:00
pci-acpi.h
pci-dynids.h
pci.h
pcieport_if.h
percpu_counter.h
percpu.h
personality.h
pfkeyv2.h [IPSEC]: Add XFRM_STATE_NOPMTUDISC flag 2005-06-20 13:21:43 -07:00
pg.h
phonedev.h
pid.h
pipe_fs_i.h
pkt_cls.h
pkt_sched.h
pktcdvd.h
platform.h
pm.h
pmu.h
pnp.h
pnpbios.h
poll.h
posix_acl_xattr.h
posix_acl.h
posix_types.h
posix-timers.h
ppdev.h
ppp_channel.h
ppp_defs.h
ppp-comp.h
prctl.h
preempt.h
prefetch.h
prio_tree.h
proc_fs.h
profile.h
ps2esdi.h
ptrace.h
qic117.h
qnx4_fs.h
qnxtypes.h
quota.h
quotaio_v1.h
quotaio_v2.h
quotaops.h
radeonfb.h
radix-tree.h
ramfs.h
random.h
raw.h
rbtree.h
rcupdate.h
reboot_fixups.h
reboot.h
reiserfs_acl.h
reiserfs_fs_i.h
reiserfs_fs_sb.h
reiserfs_fs.h
reiserfs_xattr.h
resource.h
rmap.h
romfs_fs.h
root_dev.h
rose.h
route.h
rslib.h
rtc.h
rtnetlink.h [RTNETLINK]: Add RTA_(PUT|GET) shortcuts for u8, u16, and flag 2005-06-18 22:52:36 -07:00
rwsem-spinlock.h
rwsem.h
sc26198.h
scatterlist.h
scc.h
sched.h [PATCH] Avoiding mmap fragmentation 2005-06-21 18:46:16 -07:00
sctp.h
scx200_gpio.h
scx200.h
sdla_asy.h
sdla_chdlc.h
sdla_fr.h
sdla_ppp.h
sdla_x25.h
sdla.h
sdladrv.h
sdlapci.h
sdlasfm.h
seccomp.h
securebits.h
security.h
selection.h
selinux_netlink.h
sem.h
seq_file.h
seqlock.h
serial167.h
serial_8250.h
serial_core.h
serial_reg.h
serial.h
serialP.h
serio.h
shm.h
shmem_fs.h
signal.h [PATCH] Remove obsolete HAVE_ARCH_GET_SIGNAL_TO_DELIVER? 2005-06-12 20:43:21 -07:00
skbuff.h [NETFILTER]: Kill nf_debug 2005-06-21 14:01:57 -07:00
slab.h [SLAB] Introduce kmem_cache_name 2005-06-18 22:46:19 -07:00
smb_fs_i.h
smb_fs_sb.h
smb_fs.h
smb_mount.h
smb.h
smbno.h
smp_lock.h
smp.h [PATCH] smp_processor_id() cleanup 2005-06-21 18:46:13 -07:00
snmp.h
socket.h
sockios.h
som.h
sonet.h
sonypi.h
sort.h
sound.h
soundcard.h
spinlock.h
stallion.h
stat.h
statfs.h
stddef.h
stop_machine.h
string.h
stringify.h
superhyway.h
suspend.h
swap.h [PATCH] vm: try_to_free_pages unused argument 2005-06-21 18:46:17 -07:00
swapops.h
synclink.h
sys.h
syscalls.h
sysctl.h [IPV4]: Sysctl configurable icmp error source address. 2005-06-13 15:19:03 -07:00
sysdev.h
sysfs.h [PATCH] sysfs-iattr: add sysfs_setattr 2005-06-20 15:15:37 -07:00
sysrq.h
sysv_fs.h
tcp_diag.h
tcp.h [NET] Generalise tcp_listen_opt 2005-06-18 22:47:59 -07:00
telephony.h
termios.h
thread_info.h
threads.h
ticable.h
time.h
timer.h
times.h
timex.h
tiocl.h
topology.h
toshiba.h
transport_class.h
trdevice.h
tty_driver.h
tty_flip.h
tty_ldisc.h
tty.h
types.h
udf_fs_i.h
udf_fs_sb.h
udf_fs.h
udp.h
ufs_fs_i.h
ufs_fs_sb.h
ufs_fs.h
uinput.h
uio.h
ultrasound.h
umem.h
un.h
unistd.h
usb_cdc.h
usb_ch9.h
usb_gadget.h
usb_gadgetfs.h
usb_otg.h
usb_sl811.h
usb.h [PATCH] USB: move the usb hcd code to use the new class code. 2005-06-20 15:15:07 -07:00
usbdevice_fs.h
user.h
utime.h
uts.h
utsname.h
vermagic.h
vfs.h
via.h
video_decoder.h
video_encoder.h
videodev2.h
videodev.h
videotext.h
vmalloc.h
vt_buffer.h
vt_kern.h
vt.h
wait.h
wanpipe.h
wanrouter.h
watchdog.h
wavefront.h
wireless.h
workqueue.h
writeback.h
x25.h [X25]: Fast select with no restriction on response 2005-06-22 22:16:17 -07:00
xattr_acl.h
xattr.h
xfrm.h [IPSEC]: Add XFRM_STATE_NOPMTUDISC flag 2005-06-20 13:21:43 -07:00
yam.h
zconf.h
zftape.h
zlib.h
zorro_ids.h
zorro.h
zutil.h