original_kernel/arch/sparc64/kernel
Andrea Righi 27ac792ca0 PAGE_ALIGN(): correctly handle 64-bit values on 32-bit architectures
On 32-bit architectures PAGE_ALIGN() truncates 64-bit values to the 32-bit
boundary. For example:

	u64 val = PAGE_ALIGN(size);

always returns a value < 4GB even if size is greater than 4GB.

The problem resides in PAGE_MASK definition (from include/asm-x86/page.h for
example):

#define PAGE_SHIFT      12
#define PAGE_SIZE       (_AC(1,UL) << PAGE_SHIFT)
#define PAGE_MASK       (~(PAGE_SIZE-1))
...
#define PAGE_ALIGN(addr)       (((addr)+PAGE_SIZE-1)&PAGE_MASK)

The "~" is performed on a 32-bit value, so everything in "and" with
PAGE_MASK greater than 4GB will be truncated to the 32-bit boundary.
Using the ALIGN() macro seems to be the right way, because it uses
typeof(addr) for the mask.

Also move the PAGE_ALIGN() definitions out of include/asm-*/page.h in
include/linux/mm.h.

See also lkml discussion: http://lkml.org/lkml/2008/6/11/237

[akpm@linux-foundation.org: fix drivers/media/video/uvc/uvc_queue.c]
[akpm@linux-foundation.org: fix v850]
[akpm@linux-foundation.org: fix powerpc]
[akpm@linux-foundation.org: fix arm]
[akpm@linux-foundation.org: fix mips]
[akpm@linux-foundation.org: fix drivers/media/video/pvrusb2/pvrusb2-dvb.c]
[akpm@linux-foundation.org: fix drivers/mtd/maps/uclinux.c]
[akpm@linux-foundation.org: fix powerpc]
Signed-off-by: Andrea Righi <righi.andrea@gmail.com>
Cc: <linux-arch@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
2008-07-24 10:47:21 -07:00
..
Makefile sparc64: add ftrace support. 2008-05-23 22:36:13 +02:00
asm-offsets.c
audit.c sparc64: Kill CONFIG_SPARC32_COMPAT 2008-04-26 21:41:19 -07:00
auxio.c
central.c sparc64/kernel/: make code static 2008-07-17 21:38:08 -07:00
cherrs.S sparc64: Split entry.S up into seperate files. 2008-04-28 00:47:20 -07:00
chmc.c
compat_audit.c
cpu.c
ds.c sparc64/kernel/: make code static 2008-07-17 21:38:08 -07:00
dtlb_miss.S
dtlb_prot.S sparc64: remove CVS keywords 2008-05-20 00:33:43 -07:00
ebus.c sparc64: fix up bus_id changes in sparc core code 2008-07-21 21:55:03 -07:00
entry.h [SPARC64]: %l6 trap return handling no longer necessary. 2008-04-24 03:15:22 -07:00
etrap.S sparc64: remove CVS keywords 2008-05-20 00:33:43 -07:00
fpu_traps.S sparc64: Split entry.S up into seperate files. 2008-04-28 00:47:20 -07:00
ftrace.c ftrace: store mcount address in rec->ip 2008-06-23 22:10:56 +02:00
getsetcc.S sparc64: Split entry.S up into seperate files. 2008-04-28 00:47:20 -07:00
head.S sparc64: Split entry.S up into seperate files. 2008-04-28 00:47:20 -07:00
helpers.S sparc64: Split entry.S up into seperate files. 2008-04-28 00:47:20 -07:00
hvapi.c sparc64: Add missing hypervisor service group numbers. 2008-07-18 00:43:52 -07:00
hvcalls.S sparc64: Split entry.S up into seperate files. 2008-04-28 00:47:20 -07:00
hvtramp.S
idprom.c sparc64: remove CVS keywords 2008-05-20 00:33:43 -07:00
init_task.c [PATCH] take init_files to fs/file.c 2008-05-16 17:22:20 -04:00
iommu.c [SPARC64]: NUMA device infrastructure. 2008-04-23 23:32:16 -07:00
iommu_common.h PAGE_ALIGN(): correctly handle 64-bit values on 32-bit architectures 2008-07-24 10:47:21 -07:00
irq.c sparc64: Fix wedged irq regression. 2008-04-26 21:41:15 -07:00
itlb_miss.S
ivec.S sparc64: Split entry.S up into seperate files. 2008-04-28 00:47:20 -07:00
kgdb.c sparc: Add kgdb support. 2008-04-29 02:38:50 -07:00
kprobes.c
ktlb.S
ldc.c
mdesc.c
misctrap.S sparc: Add kgdb support. 2008-04-29 02:38:50 -07:00
module.c
of_device.c sparc64: fix up bus_id changes in sparc core code 2008-07-21 21:55:03 -07:00
pci.c sparc64: fix up bus_id changes in sparc core code 2008-07-21 21:55:03 -07:00
pci_common.c sparc64: Stop creating dummy root PCI host controller devices. 2008-05-02 05:22:50 -07:00
pci_fire.c [SPARC64]: NUMA device infrastructure. 2008-04-23 23:32:16 -07:00
pci_impl.h sparc64: Stop creating dummy root PCI host controller devices. 2008-05-02 05:22:50 -07:00
pci_msi.c sparc64/kernel/: make code static 2008-07-17 21:38:08 -07:00
pci_psycho.c [SPARC64]: NUMA device infrastructure. 2008-04-23 23:32:16 -07:00
pci_sabre.c [SPARC64]: NUMA device infrastructure. 2008-04-23 23:32:16 -07:00
pci_schizo.c [SPARC64]: NUMA device infrastructure. 2008-04-23 23:32:16 -07:00
pci_sun4v.c sparc64/kernel/: make code static 2008-07-17 21:38:08 -07:00
pci_sun4v.h
pci_sun4v_asm.S
power.c
process.c remove CONFIG_KMOD from sparc64 2008-07-22 19:24:30 +10:00
prom.c
ptrace.c sparc: Fix debugger syscall restart interactions. 2008-05-11 02:07:19 -07:00
rtrap.S sparc64: Prevent stack backtrace false positives on trap frames. 2008-05-21 21:50:01 -07:00
sbus.c sparc64: remove CVS keywords 2008-05-20 00:33:43 -07:00
setup.c sparc64: remove CVS keywords 2008-05-20 00:33:43 -07:00
signal.c sparc64: remove CVS keywords 2008-05-20 00:33:43 -07:00
signal32.c sparc64: Use a TS_RESTORE_SIGMASK 2008-05-12 22:45:15 -07:00
smp.c sparc64: Convert to generic helpers for IPI function calls. 2008-07-17 23:44:50 -07:00
sparc64_ksyms.c sparc64: Convert to generic helpers for IPI function calls. 2008-07-17 23:44:50 -07:00
spiterrs.S sparc64: Split entry.S up into seperate files. 2008-04-28 00:47:20 -07:00
sstate.c
stacktrace.c stacktrace: fix build failure on sparc64 2008-07-08 14:24:58 +02:00
starfire.c sparc64: remove CVS keywords 2008-05-20 00:33:43 -07:00
sun4v_ivec.S
sun4v_tlb_miss.S [SPARC64]: %l6 trap return handling no longer necessary. 2008-04-24 03:15:22 -07:00
sys32.S sparc64: remove CVS keywords 2008-05-20 00:33:43 -07:00
sys_sparc.c sparc: Merge asm-sparc{,64}/mman.h 2008-07-17 21:41:51 -07:00
sys_sparc32.c sparc: Merge asm-sparc{,64}/mman.h 2008-07-17 21:41:51 -07:00
syscalls.S sparc64: Split entry.S up into seperate files. 2008-04-28 00:47:20 -07:00
sysfs.c sysdev: Pass the attribute to the low level sysdev show/store function 2008-07-21 21:55:02 -07:00
systbls.S sparc64: use compat_sys_utimes instead of home-grown local copy. 2008-05-05 12:32:39 -07:00
systbls.h
time.c sparc64-rtc: BKL pushdown 2008-07-02 15:06:25 -06:00
trampoline.S sparc64: remove CVS keywords 2008-05-20 00:33:43 -07:00
traps.c remove CONFIG_KMOD from sparc64 2008-07-22 19:24:30 +10:00
tsb.S [SPARC64]: %l6 trap return handling no longer necessary. 2008-04-24 03:15:22 -07:00
ttable.S sparc64: Convert to generic helpers for IPI function calls. 2008-07-17 23:44:50 -07:00
una_asm.S
unaligned.c sparc: Use new '%pS' infrastructure to print symbols. 2008-07-17 22:11:32 -07:00
us2e_cpufreq.c
us3_cpufreq.c
utrap.S sparc64: Split entry.S up into seperate files. 2008-04-28 00:47:20 -07:00
vio.c sparc64: fix up bus_id changes in sparc core code 2008-07-21 21:55:03 -07:00
viohs.c
visemul.c
vmlinux.lds.S
winfixup.S [SPARC64]: %l6 trap return handling no longer necessary. 2008-04-24 03:15:22 -07:00