dect
/
linux-2.6
Archived
13
0
Fork 0
This repository has been archived on 2022-02-17. You can view files and clone it, but cannot push or open issues or pull requests.
linux-2.6/drivers/media/video/pvrusb2
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
..
Kconfig V4L/DVB (7900): pvrusb: Fix Kconfig if DVB=m V4L_core=y 2008-05-14 02:56:47 -03:00
Makefile V4L/DVB(7767): Move tuners to common/tuners 2008-04-29 18:41:37 -03:00
pvrusb2-audio.c V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-audio.h V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-context.c V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-context.h V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-ctrl.c V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-ctrl.h V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-cx2584x-v4l.c V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-cx2584x-v4l.h V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-debug.h V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-debugifc.c V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-debugifc.h V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-devattr.c V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-devattr.h V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-dvb.c PAGE_ALIGN(): correctly handle 64-bit values on 32-bit architectures 2008-07-24 10:47:21 -07:00
pvrusb2-dvb.h V4L/DVB (7713): pvrusb2: Implement cleaner DVB kernel thread shutdown 2008-04-24 14:09:49 -03:00
pvrusb2-eeprom.c V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-eeprom.h V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-encoder.c V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-encoder.h V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-fx2-cmd.h V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-hdw-internal.h V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-hdw.c V4L/DVB (8176): pvrusb2: Update video_gop_size 2008-07-20 07:15:52 -03:00
pvrusb2-hdw.h V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-i2c-chips-v4l2.c V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-i2c-cmd-v4l2.c V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-i2c-cmd-v4l2.h V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-i2c-core.c V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-i2c-core.h V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-io.c V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-io.h V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-ioread.c PAGE_ALIGN(): correctly handle 64-bit values on 32-bit architectures 2008-07-24 10:47:21 -07:00
pvrusb2-ioread.h V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-main.c V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-std.c V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-std.h V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-sysfs.c V4L/DVB (7939): pvrusb2: Remove sysfs interface hackery 2008-07-20 07:07:07 -03:00
pvrusb2-sysfs.h V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-tuner.c V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-tuner.h V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-util.h V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-v4l2.c V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-v4l2.h V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-video-v4l.c V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-video-v4l.h V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-wm8775.c V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2-wm8775.h V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00
pvrusb2.h V4L/DVB (7936): pvrusb2: Remove svn Id keyword from all sources 2008-07-20 07:06:52 -03:00