linux/arch/mips/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
..
8250-platform.c [MIPS] Put an end to <asm/serial.h>'s long and annyoing existence 2007-07-10 17:33:01 +01:00
asm-offsets.c mips: use kbuild.h instead of macros in asm-offsets.c 2008-04-29 08:06:29 -07:00
binfmt_elfn32.c remove div_long_long_rem 2008-05-01 08:03:58 -07:00
binfmt_elfo32.c remove div_long_long_rem 2008-05-01 08:03:58 -07:00
branch.c [MIPS] Add some __user tags 2007-07-13 17:40:01 +01:00
cevt-bcm1480.c [MIPS] Sibyte: Stop timers before programming next even. 2007-11-15 23:21:50 +00:00
cevt-ds1287.c [MIPS] DS1287: Add clockevent driver 2008-04-28 17:14:32 +01:00
cevt-gt641xx.c [MIPS] cevt-gt641xx: Kill unnecessary include 2008-04-28 17:14:32 +01:00
cevt-r4k.c [MIPS] Handle R4000/R4400 mfc0 from count register. 2007-11-26 17:26:14 +00:00
cevt-sb1250.c [MIPS] Sibyte: Stop timers before programming next even. 2007-11-15 23:21:50 +00:00
cevt-txx9.c [MIPS] cevt-txx9: Reset timer counter on initialization 2008-07-03 19:14:27 +01:00
cpu-bugs64.c [MIPS] Add empty argument parenthesis to GCC_IMM_ASM 2008-05-12 16:46:52 +01:00
cpu-probe.c [MIPS] Move arch/mips/philips to arch/mips/nxp 2008-04-28 17:14:26 +01:00
csrc-bcm1480.c [MIPS] Sibyte: Split and move clock code. 2007-11-02 16:13:47 +00:00
csrc-ioasic.c [MIPS] add DECstation I/O ASIC clocksource 2008-04-28 17:14:32 +01:00
csrc-r4k.c [MIPS] Clocksource: Only install r4k counter as clocksource if present. 2008-03-12 14:14:42 +00:00
csrc-sb1250.c [MIPS] Sibyte: Fix name of clocksource. 2007-11-15 23:21:51 +00:00
early_printk.c [MIPS] fix sparse warning about setup_early_printk() 2008-07-15 18:44:29 +01:00
entry.S [MIPS] SMTC: Interrupt mask backstop hack 2007-07-12 17:41:17 +01:00
gdb-low.S [MIPS] TRACE_IRQFLAGS_SUPPORT support. 2006-07-13 21:26:09 +01:00
gdb-stub.c [MIPS] Make KGDB compile on UP 2008-04-04 22:43:47 +01:00
genex.S [MIPS] R4000/R4400 daddiu erratum workaround 2008-01-29 10:14:55 +00:00
gpio_txx9.c [MIPS] txx9: Make gpio_txx9 entirely spinlock-safe 2008-07-15 18:44:34 +01:00
head.S [MIPS] Fix loads of section missmatches 2008-03-12 14:14:41 +00:00
i8253.c [MIPS] i8253: make the pit_clockevent variable static 2008-07-15 18:44:31 +01:00
i8259.c MIPS: Mark all but i8259 interrupts as no-probe. 2008-02-08 09:22:42 -08:00
init_task.c [PATCH] take init_files to fs/file.c 2008-05-16 17:22:20 -04:00
irq_cpu.c [MIPS] irq_cpu: use handle_percpu_irq handler to avoid dropping interrupts. 2007-11-15 23:21:52 +00:00
irq_txx9.c [MIPS] Remove dead code from irq_txx9.c 2007-08-27 02:16:54 +01:00
irq-gic.c [MIPS] Add support for MIPS CMP platform. 2008-04-28 17:14:26 +01:00
irq-gt641xx.c [MIPS] Add GT641xx IRQ routines. 2007-10-11 23:46:04 +01:00
irq-msc01.c [MIPS] Fix some sparse warnings on traps.c and irq-msc01.c 2008-04-28 17:14:32 +01:00
irq-rm7000.c [MIPS] Fix broken rm7000/rm9000 interrupt handling 2008-02-19 17:01:31 +00:00
irq-rm9000.c on_each_cpu(): kill unused 'retry' parameter 2008-06-26 11:24:38 +02:00
irq.c [MIPS] unexport {allocate,free}_irqno 2008-07-15 18:44:29 +01:00
kspd.c [MIPS] MT: Functional fixes and a little reformatting of APRP support 2008-05-12 16:46:51 +01:00
linux32.c [MIPS] 32-bit compat: Delete unused sys_truncate64 and sys_ftruncate64. 2008-07-20 14:38:21 +01:00
machine_kexec.c [MIPS] Unconditionally writeback and invalidate caches on kexec. 2007-08-27 02:16:59 +01:00
Makefile [MIPS] MSC01: Cleanup configuration. 2008-07-15 18:44:34 +01:00
mips_ksyms.c [MIPS] Export __copy_user_inatomic. 2007-03-07 00:07:17 +00:00
mips-mt-fpaff.c [MIPS] Use find_task_by_vpid in system calls 2008-02-19 17:01:30 +00:00
mips-mt.c [MIPS] Replace use of print_symbol with new %sP pointer format. 2008-07-15 18:44:33 +01:00
module.c PAGE_ALIGN(): correctly handle 64-bit values on 32-bit architectures 2008-07-24 10:47:21 -07:00
proc.c [MIPS]: constify function pointer tables 2008-01-29 10:15:03 +00:00
process.c [MIPS] IRIX: Goodbye and thanks for all the fish 2008-07-15 18:44:30 +01:00
ptrace32.c [MIPS] Store sign-extend register values for PTRACE_GETREGS 2007-10-29 19:35:36 +00:00
ptrace.c [MIPS] Store sign-extend register values for PTRACE_GETREGS 2007-10-29 19:35:36 +00:00
r4k_fpu.S [MIPS] Check FCSR for pending interrupts, alternative version 2007-03-17 01:03:25 +00:00
r4k_switch.S [MIPS] Fix resume for 64K page size on R4000 class processors. 2007-07-12 17:41:05 +01:00
r2300_fpu.S
r2300_switch.S [MIPS] Disallow CpU exception in kernel again. 2007-04-20 14:58:37 +01:00
r6000_fpu.S
relocate_kernel.S [MIPS] Kexec: Fix several 64-bit bugs. 2007-07-31 21:35:36 +01:00
reset.c [MIPS] Export pm_power_off 2006-12-10 21:52:11 +00:00
rtlx.c device create: mips: convert device_create to device_create_drvdata 2008-07-21 21:54:43 -07:00
scall32-o32.S [MIPS] Rename MIPS sys_pipe syscall entry point to something MIPS-specific. 2008-07-20 14:38:21 +01:00
scall64-64.S [MIPS] Rename MIPS sys_pipe syscall entry point to something MIPS-specific. 2008-07-20 14:38:21 +01:00
scall64-n32.S [MIPS] Rename MIPS sys_pipe syscall entry point to something MIPS-specific. 2008-07-20 14:38:21 +01:00
scall64-o32.S [MIPS] Rename MIPS sys_pipe syscall entry point to something MIPS-specific. 2008-07-20 14:38:21 +01:00
setup.c [MIPS] fix sparse warning about setup_early_printk() 2008-07-15 18:44:29 +01:00
signal32.c [MIPS] Fix "no space between function name and open parenthesis" warnings. 2007-10-11 23:46:15 +01:00
signal_n32.c [MIPS] Fix "no space between function name and open parenthesis" warnings. 2007-10-11 23:46:15 +01:00
signal-common.h [MIPS] replace remaining __FUNCTION__ occurrences 2008-04-28 17:14:27 +01:00
signal.c [MIPS] checkfiles: Fix "need space after that ','" errors. 2007-10-11 23:46:15 +01:00
smp-cmp.c [MIPS] Add support for MIPS CMP platform. 2008-04-28 17:14:26 +01:00
smp-mt.c [MIPS] Add support for MIPS CMP platform. 2008-04-28 17:14:26 +01:00
smp-up.c [MIPS] Only build r4k clocksource for systems that work ok with it. 2007-11-26 17:26:14 +00:00
smp.c on_each_cpu(): kill unused 'retry' parameter 2008-06-26 11:24:38 +02:00
smtc-asm.S [MIPS] SMTC: Don't set and restore irqregs ptr from self_ipi. 2007-06-11 18:20:53 +01:00
smtc-proc.c [MIPS] SMP: Call platform methods via ops structure. 2008-01-29 10:14:57 +00:00
smtc.c mips: convert to generic helpers for IPI function calls 2008-06-26 11:22:57 +02:00
spram.c [MIPS] Basic SPRAM support 2008-04-28 17:14:23 +01:00
stacktrace.c stacktrace: export save_stack_trace[_tsk] 2008-07-03 09:17:55 +02:00
sync-r4k.c [MIPS] Add support for MIPS CMP platform. 2008-04-28 17:14:26 +01:00
syscall.c [MIPS] Rename MIPS sys_pipe syscall entry point to something MIPS-specific. 2008-07-20 14:38:21 +01:00
time.c [MIPS] unexport null_perf_irq() and make it static 2008-04-28 17:14:31 +01:00
topology.c [MIPS] Do topology_init even on uniprocessor kernels. 2006-11-29 16:21:34 +00:00
traps.c [MIPS] Replace use of print_symbol with new %sP pointer format. 2008-07-15 18:44:33 +01:00
unaligned.c [MIPS] Fix "no space between function name and open parenthesis" warnings. 2007-10-11 23:46:15 +01:00
vmlinux.lds.S all archs: consolidate init and exit sections in vmlinux.lds.h 2008-01-28 23:21:17 +01:00
vpe.c mips: cdev lock_kernel() pushdown 2008-05-18 15:43:40 -06:00