kernel-ark/include/asm-x86_64
Badari Pulavarty f6b3ec238d [PATCH] madvise(MADV_REMOVE): remove pages from tmpfs shm backing store
Here is the patch to implement madvise(MADV_REMOVE) - which frees up a
given range of pages & its associated backing store.  Current
implementation supports only shmfs/tmpfs and other filesystems return
-ENOSYS.

"Some app allocates large tmpfs files, then when some task quits and some
client disconnect, some memory can be released.  However the only way to
release tmpfs-swap is to MADV_REMOVE". - Andrea Arcangeli

Databases want to use this feature to drop a section of their bufferpool
(shared memory segments) - without writing back to disk/swap space.

This feature is also useful for supporting hot-plug memory on UML.

Concerns raised by Andrew Morton:

- "We have no plan for holepunching!  If we _do_ have such a plan (or
  might in the future) then what would the API look like?  I think
  sys_holepunch(fd, start, len), so we should start out with that."

- Using madvise is very weird, because people will ask "why do I need to
  mmap my file before I can stick a hole in it?"

- None of the other madvise operations call into the filesystem in this
  manner.  A broad question is: is this capability an MM operation or a
  filesytem operation?  truncate, for example, is a filesystem operation
  which sometimes has MM side-effects.  madvise is an mm operation and with
  this patch, it gains FS side-effects, only they're really, really
  significant ones."

Comments:

- Andrea suggested the fs operation too but then it's more efficient to
  have it as a mm operation with fs side effects, because they don't
  immediatly know fd and physical offset of the range.  It's possible to
  fixup in userland and to use the fs operation but it's more expensive,
  the vmas are already in the kernel and we can use them.

Short term plan &  Future Direction:

- We seem to need this interface only for shmfs/tmpfs files in the short
  term.  We have to add hooks into the filesystem for correctness and
  completeness.  This is what this patch does.

- In the future, plan is to support both fs and mmap apis also.  This
  also involves (other) filesystem specific functions to be implemented.

- Current patch doesn't support VM_NONLINEAR - which can be addressed in
  the future.

Signed-off-by: Badari Pulavarty <pbadari@us.ibm.com>
Cc: Hugh Dickins <hugh@veritas.com>
Cc: Andrea Arcangeli <andrea@suse.de>
Cc: Michael Kerrisk <mtk-manpages@gmx.net>
Cc: Ulrich Drepper <drepper@redhat.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-01-06 08:33:22 -08:00
..
8253pit.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
a.out.h [PATCH] x86_64: TASK_SIZE fixes for compatibility mode processes 2005-06-21 18:46:12 -07:00
acpi.h [ACPI] delete CONFIG_ACPI_PCI 2005-08-25 12:40:44 -04:00
agp.h [PATCH] AGP fix for Xen VMM 2005-06-07 12:35:43 -07:00
apic.h [PATCH] x86_64: Support for AMD specific MCE Threshold. 2005-11-14 19:55:13 -08:00
apicdef.h [PATCH] x86-64: Support dualcore and 8 socket systems in k8 fallback node parsing 2005-09-12 10:49:56 -07:00
atomic.h [PATCH] mm: fill arch atomic64 gaps 2005-11-23 16:08:39 -08:00
auxvec.h [PATCH] auxiliary vector cleanups 2005-09-07 16:57:21 -07:00
bitops.h [FLS64]: x86_64 version 2006-01-03 13:11:07 -08:00
boot.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
bootsetup.h [PATCH] Increase number of e820 entries hard limit from 32 to 128 2005-05-01 08:58:51 -07:00
bug.h [PATCH] x86-64: reduce x86-64 bug frame by 4 bytes 2005-09-12 10:50:58 -07:00
bugs.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
byteorder.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
cache.h [PATCH] x86_64: Set ____cacheline_maxaligned_in_smp alignment to 128 bytes 2005-11-14 19:55:17 -08:00
cacheflush.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
calling.h [PATCH] x86-64: Fix CFI information 2005-09-12 10:50:56 -07:00
checksum.h [NET]: Fix ipl=>ihl typo in ip_fast_csum 2005-08-29 16:02:48 -07:00
compat.h [PATCH] compat: be more consistent about [ug]id_t 2005-09-07 16:57:19 -07:00
cpu.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
cpufeature.h [PATCH] CPUID bug and inconsistency fix 2005-05-01 08:58:49 -07:00
cputime.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
current.h kbuild: alpha,x86_64 use generic asm-offsets.h support 2005-09-09 21:28:48 +02:00
debugreg.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
delay.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
desc.h Merge x86-64 update from Andi 2005-11-14 19:56:02 -08:00
div64.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
dma-mapping.h manual update from upstream: 2005-10-31 10:51:57 -08:00
dma.h [PATCH] x86_64: Add 4GB DMA32 zone 2005-11-14 19:55:13 -08:00
dwarf2.h [PATCH] x86-64: Fix CFI information 2005-09-12 10:50:56 -07:00
e820.h [PATCH] x86_64: Tell VM about holes in nodes 2005-08-26 19:37:12 -07:00
elf.h [PATCH] fix remaining missing includes 2005-11-07 07:53:41 -08:00
emergency-restart.h [PATCH] x86_64: Implemenent machine_emergency_restart 2005-07-26 14:35:42 -07:00
errno.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
fcntl.h [PATCH] Clean up struct flock definitions 2005-09-07 16:57:38 -07:00
fixmap.h [PATCH] Replace extern inline with static inline in asm-x86_64/* 2005-09-12 10:50:56 -07:00
floppy.h [PATCH] make some things static 2005-05-05 16:36:47 -07:00
fpu32.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
futex.h [PATCH] FUTEX_WAKE_OP: pthread_cond_signal() speedup 2005-09-07 16:57:17 -07:00
genapic.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
hardirq.h [PATCH] x86-64: Some cleanup and optimization to the processor data area. 2005-09-12 10:49:58 -07:00
hpet.h [PATCH] x86_64: Adjust, correct, and complete the HPET definitions for x86-64. 2005-11-14 19:55:13 -08:00
hw_irq.h [PATCH] x86_64: Support for AMD specific MCE Threshold. 2005-11-14 19:55:13 -08:00
i387.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ia32_unistd.h [PATCH] inotify: add x86-64 syscall entries 2005-07-26 13:37:22 -07:00
ia32.h [PATCH] x86_64: Allow modular build of ia32 aout loader 2005-11-14 19:55:16 -08:00
ide.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
io_apic.h [ACPI] delete CONFIG_ACPI_BOOT 2005-08-24 12:08:54 -04:00
io.h [PATCH] Replace extern inline with static inline in asm-x86_64/* 2005-09-12 10:50:56 -07:00
ioctl.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ioctls.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ipcbuf.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
ipi.h [PATCH] x86-64: Declare NMI_VECTOR and handle it in the IPI sending code. 2005-09-12 10:50:57 -07:00
irq.h [PATCH] remove unnecessary handle_IRQ_event() prototypes 2005-09-09 13:57:33 -07:00
kdebug.h [PATCH] x86-64: Safe interrupts in oops_begin/end 2005-09-12 10:50:57 -07:00
kexec.h [PATCH] Kdump: Export crash notes section address through sysfs 2005-06-25 16:24:51 -07:00
kmap_types.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
kprobes.h [PATCH] Kprobes: Track kprobe on a per_cpu basis - x86_64 changes 2005-11-07 07:53:46 -08:00
ldt.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
linkage.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
local.h [PATCH] x86-64: clean up local_add/sub arguments 2005-09-12 10:50:59 -07:00
mach_apic.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
mc146818rtc.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
mce.h [PATCH] x86_64: Support for AMD specific MCE Threshold. 2005-11-14 19:55:13 -08:00
mman.h [PATCH] madvise(MADV_REMOVE): remove pages from tmpfs shm backing store 2006-01-06 08:33:22 -08:00
mmsegment.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
mmu_context.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
mmu.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
mmx.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
mmzone.h [PATCH] x86_64: Fix NUMA node lookup debug code which had bitrotted 2005-11-14 19:55:16 -08:00
module.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
mpspec.h [PATCH] x86_64: Increase the maximum number of local APICs to the maximum 2005-11-14 19:55:17 -08:00
msgbuf.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
msi.h [PATCH] PCI: Change MSI to use physical delivery mode always 2005-11-10 16:09:18 -08:00
msr.h [PATCH] Fix x86_64/msr.h interface to agree with i386/msr.h 2005-11-20 11:52:59 -08:00
mtrr.h [PATCH] Clean up mtrr compat ioctl code 2005-10-30 17:37:13 -08:00
namei.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
nmi.h [PATCH] x86_64: Collected NMI watchdog fixes. 2005-05-17 07:59:16 -07:00
node.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
numa.h [PATCH] x86_64: Speed up numa_node_id by putting it directly into the PDA 2005-11-14 19:55:14 -08:00
numnodes.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
page.h [PATCH] x86_64: Don't apply __PHYSICAL_MASK to page frame numbers 2005-11-14 19:55:14 -08:00
param.h [PATCH] Avoid namespace pollution in <asm/param.h> 2006-01-02 08:38:38 -08:00
parport.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pci-direct.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
pci.h Revert "x86-64: Avoid unnecessary double bouncing for swiotlb" 2005-10-27 16:28:39 -07:00
pda.h [PATCH] x86_64: Speed up numa_node_id by putting it directly into the PDA 2005-11-14 19:55:14 -08:00
percpu.h [PATCH] adjust per_cpu definition in non-SMP case 2005-06-23 09:45:28 -07:00
pgalloc.h [PATCH] Replace extern inline with static inline in asm-x86_64/* 2005-09-12 10:50:56 -07:00
pgtable.h Merge x86-64 update from Andi 2005-11-14 19:56:02 -08:00
poll.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
posix_types.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
prctl.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
processor.h [PATCH] x86-64/i386: Intel HT, Multi core detection fixes 2005-11-14 19:55:16 -08:00
proto.h [PATCH] x86_64: Unmap NULL during early bootup 2005-11-14 19:55:14 -08:00
ptrace.h [PATCH] xen: x86: Rename usermode macro 2005-06-23 09:45:14 -07:00
resource.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
rtc.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
rwlock.h [PATCH] Fix typo in x86_64 __build_write_lock_const assembly 2005-12-24 12:30:22 -08:00
scatterlist.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
seccomp.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
sections.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
segment.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
semaphore.h [PATCH] semaphore: Remove __MUTEX_INITIALIZER() 2005-10-30 17:37:27 -08:00
sembuf.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
serial.h [PATCH] Serial: Split 8250 port table (part 2) 2005-06-29 18:45:19 +01:00
setup.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
shmbuf.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
shmparam.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
sigcontext32.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
sigcontext.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
siginfo.h [PATCH] consolidate SIGEV_PAD_SIZE 2005-05-01 08:59:08 -07:00
signal.h [PATCH] Replace extern inline with static inline in asm-x86_64/* 2005-09-12 10:50:56 -07:00
smp.h Merge x86-64 update from Andi 2005-11-14 19:56:02 -08:00
socket.h [NET]: Introduce SO_{SND,RCV}BUFFORCE socket options 2005-08-29 15:31:35 -07:00
sockios.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
sparsemem.h [PATCH] add x86-64 specific support for sparsemem 2005-06-23 09:45:07 -07:00
spinlock_types.h [PATCH] spinlock consolidation 2005-09-10 10:06:21 -07:00
spinlock.h [PATCH] x86_64: Use int operations in spinlocks to support more than 128 CPUs spinning. 2005-11-14 19:55:15 -08:00
stat.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
statfs.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
string.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
suspend.h [PATCH] swsusp: clean assembly parts 2005-06-25 16:24:33 -07:00
swiotlb.h manual update from upstream: 2005-10-31 10:51:57 -08:00
system.h [PATCH] x86-64: Lose constraints on cmpxchg 2005-09-12 10:50:57 -07:00
termbits.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
termios.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
thread_info.h [PATCH] streamline preempt_count type across archs 2005-06-23 09:45:19 -07:00
timex.h [PATCH] x86-64: Don't include config.h in asm/timex.h 2005-09-12 10:49:58 -07:00
tlb.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
tlbflush.h [PATCH] x86-64: Increase TLB flush array size 2005-09-12 10:49:58 -07:00
topology.h [PATCH] x86_64/ia64 : Fix compilation error for node_to_first_cpu 2005-12-24 12:30:22 -08:00
types.h [PATCH] sab: consolidate kmem_bufctl_t 2005-09-05 00:05:48 -07:00
uaccess.h [PATCH] remove verify_area(): remove verify_area() from various uaccess.h headers 2005-09-07 16:57:35 -07:00
ucontext.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
unaligned.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
unistd.h [PATCH] x86_64: Use common sys_time64 2005-11-14 19:55:17 -08:00
user32.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
user.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
vga.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
vsyscall32.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00
vsyscall.h [PATCH] x86-64: Remove unused vxtime.hz field 2005-09-12 10:50:57 -07:00
xor.h Linux-2.6.12-rc2 2005-04-16 15:20:36 -07:00