1
linux/drivers/media/video
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
..
au0828
bt8xx
cpia2
cx18 V4L/DVB (8414): videodev/cx18: fix get_index bug and error-handling lock-ups 2008-07-20 07:29:27 -03:00
cx88
cx23885 V4L/DVB (8393): media/video: Fix depencencies for VIDEOBUF 2008-07-20 07:28:54 -03:00
cx25840 V4L/DVB (8377): ivtv/cx18: ensure the default control values are correct 2008-07-20 07:28:07 -03:00
em28xx
et61x251
gspca V4L/DVB (8415): gspca: Infinite loop in i2c_w() of etoms. 2008-07-20 07:29:33 -03:00
ivtv V4L/DVB (8379): saa7127: Make device detection optional 2008-07-20 07:28:17 -03:00
ovcamchip
pvrusb2 PAGE_ALIGN(): correctly handle 64-bit values on 32-bit architectures 2008-07-24 10:47:21 -07:00
pwc
saa7134 V4L/DVB (8395): saa7134: Fix Kbuild dependency of ir-kbd-i2c 2008-07-20 07:29:03 -03:00
sn9c102 V4L/DVB (8374): gspca: No conflict of 0c45:6011 with the sn9c102 driver. 2008-07-20 07:27:52 -03:00
usbvideo
usbvision
uvc PAGE_ALIGN(): correctly handle 64-bit values on 32-bit architectures 2008-07-24 10:47:21 -07:00
zc0301
adv7170.c
adv7175.c
arv.c
bt819.c
bt856.c
bt866.c
btcx-risc.c
btcx-risc.h
bw-qcam.c
bw-qcam.h
c-qcam.c
cafe_ccic-regs.h
cafe_ccic.c
compat_ioctl32.c
cpia_pp.c
cpia_usb.c
cpia.c
cpia.h
cs53l32a.c
cs5345.c
cs8420.h
cx2341x.c V4L/DVB (8377): ivtv/cx18: ensure the default control values are correct 2008-07-20 07:28:07 -03:00
dabusb.c
dabusb.h
dpc7146.c
font.h
hexium_gemini.c
hexium_orion.c
ibmmpeg2.h
indycam.c
indycam.h
ir-kbd-i2c.c V4L/DVB (8395): saa7134: Fix Kbuild dependency of ir-kbd-i2c 2008-07-20 07:29:03 -03:00
Kconfig V4L/DVB (8397): video: convert select VIDEO_ZORAN_ZR36060 into depends on 2008-07-20 07:29:12 -03:00
ks0127.c
ks0127.h
m52790.c
Makefile V4L/DVB (8343): soc_camera_platform: Add SoC Camera Platform driver 2008-07-20 07:25:49 -03:00
meye.c
meye.h
msp3400-driver.c
msp3400-driver.h
msp3400-kthreads.c
mt9m001.c
mt9v022.c
mxb.c
mxb.h
ov511.c
ov511.h
ov7670.c V4L/DVB (8381): ov7670: fix compile warnings 2008-07-20 07:28:27 -03:00
planb.c
planb.h
pms.c
pxa_camera.c
s2255drv.c
saa711x_regs.h
saa717x.c
saa5246a.c
saa5246a.h
saa5249.c
saa6588.c
saa7110.c
saa7111.c
saa7114.c
saa7115.c V4L/DVB (8380): saa7115: use saa7115_auto instead of saa711x as the autodetect driver name. 2008-07-20 07:28:23 -03:00
saa7121.h
saa7127.c V4L/DVB (8379): saa7127: Make device detection optional 2008-07-20 07:28:17 -03:00
saa7146.h
saa7146reg.h
saa7185.c
saa7191.c
saa7191.h
saa7196.h
se401.c
se401.h
sh_mobile_ceu_camera.c V4L/DVB (8410): sh_mobile_ceu_camera: fix 64-bit compiler warnings 2008-07-20 07:29:17 -03:00
soc_camera_platform.c V4L/DVB (8343): soc_camera_platform: Add SoC Camera Platform driver 2008-07-20 07:25:49 -03:00
soc_camera.c
stk-sensor.c
stk-webcam.c
stk-webcam.h
stradis.c
stv680.c
stv680.h
tcm825x.c
tcm825x.h
tda7432.c
tda9840.c
tda9840.h
tda9875.c
tea6415c.c
tea6415c.h
tea6420.c
tea6420.h
tlv320aic23b.c
tuner-3036.c
tuner-core.c
tvaudio.c
tveeprom.c
tvp5150_reg.h
tvp5150.c
upd64031a.c
upd64083.c
v4l1-compat.c
v4l2-common.c
v4l2-int-device.c
videobuf-core.c PAGE_ALIGN(): correctly handle 64-bit values on 32-bit architectures 2008-07-24 10:47:21 -07:00
videobuf-dma-contig.c V4L/DVB (8411): videobuf-dma-contig.c: fix 64-bit build for pre-2.6.24 kernels 2008-07-20 07:29:22 -03:00
videobuf-dma-sg.c
videobuf-dvb.c
videobuf-vmalloc.c
videocodec.c
videocodec.h
videodev.c V4L/DVB (8414): videodev/cx18: fix get_index bug and error-handling lock-ups 2008-07-20 07:29:27 -03:00
vino.c
vino.h
vivi.c
vp27smpx.c
vpx3220.c
w9966.c
w9968cf_decoder.h
w9968cf_vpp.h
w9968cf.c
w9968cf.h
wm8739.c
wm8775.c
zoran_card.c
zoran_card.h
zoran_device.c
zoran_device.h
zoran_driver.c
zoran_procfs.c
zoran_procfs.h
zoran.h
zr364xx.c
zr36016.c
zr36016.h
zr36050.c
zr36050.h
zr36057.h
zr36060.c
zr36060.h