提交 423ab71a 编写于 作者: L Linus Torvalds
...@@ -69,6 +69,9 @@ config GENERIC_ISA_DMA ...@@ -69,6 +69,9 @@ config GENERIC_ISA_DMA
config FIQ config FIQ
bool bool
config ARCH_MTD_XIP
bool
source "init/Kconfig" source "init/Kconfig"
menu "System Type" menu "System Type"
...@@ -136,6 +139,7 @@ config ARCH_L7200 ...@@ -136,6 +139,7 @@ config ARCH_L7200
config ARCH_PXA config ARCH_PXA
bool "PXA2xx-based" bool "PXA2xx-based"
select ARCH_MTD_XIP
config ARCH_RPC config ARCH_RPC
bool "RiscPC" bool "RiscPC"
...@@ -152,6 +156,7 @@ config ARCH_SA1100 ...@@ -152,6 +156,7 @@ config ARCH_SA1100
bool "SA1100-based" bool "SA1100-based"
select ISA select ISA
select ARCH_DISCONTIGMEM_ENABLE select ARCH_DISCONTIGMEM_ENABLE
select ARCH_MTD_XIP
config ARCH_S3C2410 config ARCH_S3C2410
bool "Samsung S3C2410" bool "Samsung S3C2410"
......
...@@ -142,11 +142,7 @@ static inline int get_old_sigaction(struct k_sigaction *new_ka, ...@@ -142,11 +142,7 @@ static inline int get_old_sigaction(struct k_sigaction *new_ka,
return 0; return 0;
} }
static inline compat_uptr_t to_user_ptr(void *kp) #define to_user_ptr(p) ptr_to_compat(p)
{
return (compat_uptr_t)(u64)kp;
}
#define from_user_ptr(p) compat_ptr(p) #define from_user_ptr(p) compat_ptr(p)
static inline int save_general_regs(struct pt_regs *regs, static inline int save_general_regs(struct pt_regs *regs,
...@@ -213,8 +209,8 @@ static inline int get_old_sigaction(struct k_sigaction *new_ka, ...@@ -213,8 +209,8 @@ static inline int get_old_sigaction(struct k_sigaction *new_ka,
return 0; return 0;
} }
#define to_user_ptr(p) (p) #define to_user_ptr(p) ((unsigned long)(p))
#define from_user_ptr(p) (p) #define from_user_ptr(p) ((void __user *)(p))
static inline int save_general_regs(struct pt_regs *regs, static inline int save_general_regs(struct pt_regs *regs,
struct mcontext __user *frame) struct mcontext __user *frame)
...@@ -526,7 +522,7 @@ long compat_sys_rt_sigaction(int sig, const struct sigaction32 __user *act, ...@@ -526,7 +522,7 @@ long compat_sys_rt_sigaction(int sig, const struct sigaction32 __user *act,
ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL); ret = do_sigaction(sig, act ? &new_ka : NULL, oact ? &old_ka : NULL);
if (!ret && oact) { if (!ret && oact) {
ret = put_user((long)old_ka.sa.sa_handler, &oact->sa_handler); ret = put_user(to_user_ptr(old_ka.sa.sa_handler), &oact->sa_handler);
ret |= put_sigset_t(&oact->sa_mask, &old_ka.sa.sa_mask); ret |= put_sigset_t(&oact->sa_mask, &old_ka.sa.sa_mask);
ret |= __put_user(old_ka.sa.sa_flags, &oact->sa_flags); ret |= __put_user(old_ka.sa.sa_flags, &oact->sa_flags);
} }
...@@ -675,8 +671,8 @@ long compat_sys_rt_sigqueueinfo(u32 pid, u32 sig, compat_siginfo_t __user *uinfo ...@@ -675,8 +671,8 @@ long compat_sys_rt_sigqueueinfo(u32 pid, u32 sig, compat_siginfo_t __user *uinfo
int compat_sys_sigaltstack(u32 __new, u32 __old, int r5, int compat_sys_sigaltstack(u32 __new, u32 __old, int r5,
int r6, int r7, int r8, struct pt_regs *regs) int r6, int r7, int r8, struct pt_regs *regs)
{ {
stack_32_t __user * newstack = (stack_32_t __user *)(long) __new; stack_32_t __user * newstack = compat_ptr(__new);
stack_32_t __user * oldstack = (stack_32_t __user *)(long) __old; stack_32_t __user * oldstack = compat_ptr(__old);
stack_t uss, uoss; stack_t uss, uoss;
int ret; int ret;
mm_segment_t old_fs; mm_segment_t old_fs;
...@@ -708,7 +704,7 @@ int compat_sys_sigaltstack(u32 __new, u32 __old, int r5, ...@@ -708,7 +704,7 @@ int compat_sys_sigaltstack(u32 __new, u32 __old, int r5,
set_fs(old_fs); set_fs(old_fs);
/* Copy the stack information to the user output buffer */ /* Copy the stack information to the user output buffer */
if (!ret && oldstack && if (!ret && oldstack &&
(put_user((long)uoss.ss_sp, &oldstack->ss_sp) || (put_user(ptr_to_compat(uoss.ss_sp), &oldstack->ss_sp) ||
__put_user(uoss.ss_flags, &oldstack->ss_flags) || __put_user(uoss.ss_flags, &oldstack->ss_flags) ||
__put_user(uoss.ss_size, &oldstack->ss_size))) __put_user(uoss.ss_size, &oldstack->ss_size)))
return -EFAULT; return -EFAULT;
......
...@@ -60,8 +60,8 @@ struct rt_sigframe { ...@@ -60,8 +60,8 @@ struct rt_sigframe {
struct ucontext uc; struct ucontext uc;
unsigned long _unused[2]; unsigned long _unused[2];
unsigned int tramp[TRAMP_SIZE]; unsigned int tramp[TRAMP_SIZE];
struct siginfo *pinfo; struct siginfo __user *pinfo;
void *puc; void __user *puc;
struct siginfo info; struct siginfo info;
/* 64 bit ABI allows for 288 bytes below sp before decrementing it. */ /* 64 bit ABI allows for 288 bytes below sp before decrementing it. */
char abigap[288]; char abigap[288];
......
...@@ -136,14 +136,14 @@ static void __init fixup_bus_range(struct device_node *bridge) ...@@ -136,14 +136,14 @@ static void __init fixup_bus_range(struct device_node *bridge)
|(((unsigned int)(off)) & 0xFCUL) \ |(((unsigned int)(off)) & 0xFCUL) \
|1UL) |1UL)
static unsigned long macrisc_cfg_access(struct pci_controller* hose, static volatile void __iomem *macrisc_cfg_access(struct pci_controller* hose,
u8 bus, u8 dev_fn, u8 offset) u8 bus, u8 dev_fn, u8 offset)
{ {
unsigned int caddr; unsigned int caddr;
if (bus == hose->first_busno) { if (bus == hose->first_busno) {
if (dev_fn < (11 << 3)) if (dev_fn < (11 << 3))
return 0; return NULL;
caddr = MACRISC_CFA0(dev_fn, offset); caddr = MACRISC_CFA0(dev_fn, offset);
} else } else
caddr = MACRISC_CFA1(bus, dev_fn, offset); caddr = MACRISC_CFA1(bus, dev_fn, offset);
...@@ -154,14 +154,14 @@ static unsigned long macrisc_cfg_access(struct pci_controller* hose, ...@@ -154,14 +154,14 @@ static unsigned long macrisc_cfg_access(struct pci_controller* hose,
} while (in_le32(hose->cfg_addr) != caddr); } while (in_le32(hose->cfg_addr) != caddr);
offset &= has_uninorth ? 0x07 : 0x03; offset &= has_uninorth ? 0x07 : 0x03;
return ((unsigned long)hose->cfg_data) + offset; return hose->cfg_data + offset;
} }
static int macrisc_read_config(struct pci_bus *bus, unsigned int devfn, static int macrisc_read_config(struct pci_bus *bus, unsigned int devfn,
int offset, int len, u32 *val) int offset, int len, u32 *val)
{ {
struct pci_controller *hose; struct pci_controller *hose;
unsigned long addr; volatile void __iomem *addr;
hose = pci_bus_to_host(bus); hose = pci_bus_to_host(bus);
if (hose == NULL) if (hose == NULL)
...@@ -177,13 +177,13 @@ static int macrisc_read_config(struct pci_bus *bus, unsigned int devfn, ...@@ -177,13 +177,13 @@ static int macrisc_read_config(struct pci_bus *bus, unsigned int devfn,
*/ */
switch (len) { switch (len) {
case 1: case 1:
*val = in_8((u8 *)addr); *val = in_8(addr);
break; break;
case 2: case 2:
*val = in_le16((u16 *)addr); *val = in_le16(addr);
break; break;
default: default:
*val = in_le32((u32 *)addr); *val = in_le32(addr);
break; break;
} }
return PCIBIOS_SUCCESSFUL; return PCIBIOS_SUCCESSFUL;
...@@ -193,7 +193,7 @@ static int macrisc_write_config(struct pci_bus *bus, unsigned int devfn, ...@@ -193,7 +193,7 @@ static int macrisc_write_config(struct pci_bus *bus, unsigned int devfn,
int offset, int len, u32 val) int offset, int len, u32 val)
{ {
struct pci_controller *hose; struct pci_controller *hose;
unsigned long addr; volatile void __iomem *addr;
hose = pci_bus_to_host(bus); hose = pci_bus_to_host(bus);
if (hose == NULL) if (hose == NULL)
...@@ -209,16 +209,16 @@ static int macrisc_write_config(struct pci_bus *bus, unsigned int devfn, ...@@ -209,16 +209,16 @@ static int macrisc_write_config(struct pci_bus *bus, unsigned int devfn,
*/ */
switch (len) { switch (len) {
case 1: case 1:
out_8((u8 *)addr, val); out_8(addr, val);
(void) in_8((u8 *)addr); (void) in_8(addr);
break; break;
case 2: case 2:
out_le16((u16 *)addr, val); out_le16(addr, val);
(void) in_le16((u16 *)addr); (void) in_le16(addr);
break; break;
default: default:
out_le32((u32 *)addr, val); out_le32(addr, val);
(void) in_le32((u32 *)addr); (void) in_le32(addr);
break; break;
} }
return PCIBIOS_SUCCESSFUL; return PCIBIOS_SUCCESSFUL;
...@@ -348,25 +348,23 @@ static int u3_ht_skip_device(struct pci_controller *hose, ...@@ -348,25 +348,23 @@ static int u3_ht_skip_device(struct pci_controller *hose,
+ (((unsigned int)bus) << 16) \ + (((unsigned int)bus) << 16) \
+ 0x01000000UL) + 0x01000000UL)
static unsigned long u3_ht_cfg_access(struct pci_controller* hose, static volatile void __iomem *u3_ht_cfg_access(struct pci_controller* hose,
u8 bus, u8 devfn, u8 offset) u8 bus, u8 devfn, u8 offset)
{ {
if (bus == hose->first_busno) { if (bus == hose->first_busno) {
/* For now, we don't self probe U3 HT bridge */ /* For now, we don't self probe U3 HT bridge */
if (PCI_SLOT(devfn) == 0) if (PCI_SLOT(devfn) == 0)
return 0; return NULL;
return ((unsigned long)hose->cfg_data) + return hose->cfg_data + U3_HT_CFA0(devfn, offset);
U3_HT_CFA0(devfn, offset);
} else } else
return ((unsigned long)hose->cfg_data) + return hose->cfg_data + U3_HT_CFA1(bus, devfn, offset);
U3_HT_CFA1(bus, devfn, offset);
} }
static int u3_ht_read_config(struct pci_bus *bus, unsigned int devfn, static int u3_ht_read_config(struct pci_bus *bus, unsigned int devfn,
int offset, int len, u32 *val) int offset, int len, u32 *val)
{ {
struct pci_controller *hose; struct pci_controller *hose;
unsigned long addr; volatile void __iomem *addr;
hose = pci_bus_to_host(bus); hose = pci_bus_to_host(bus);
if (hose == NULL) if (hose == NULL)
...@@ -400,13 +398,13 @@ static int u3_ht_read_config(struct pci_bus *bus, unsigned int devfn, ...@@ -400,13 +398,13 @@ static int u3_ht_read_config(struct pci_bus *bus, unsigned int devfn,
*/ */
switch (len) { switch (len) {
case 1: case 1:
*val = in_8((u8 *)addr); *val = in_8(addr);
break; break;
case 2: case 2:
*val = in_le16((u16 *)addr); *val = in_le16(addr);
break; break;
default: default:
*val = in_le32((u32 *)addr); *val = in_le32(addr);
break; break;
} }
return PCIBIOS_SUCCESSFUL; return PCIBIOS_SUCCESSFUL;
...@@ -416,7 +414,7 @@ static int u3_ht_write_config(struct pci_bus *bus, unsigned int devfn, ...@@ -416,7 +414,7 @@ static int u3_ht_write_config(struct pci_bus *bus, unsigned int devfn,
int offset, int len, u32 val) int offset, int len, u32 val)
{ {
struct pci_controller *hose; struct pci_controller *hose;
unsigned long addr; volatile void __iomem *addr;
hose = pci_bus_to_host(bus); hose = pci_bus_to_host(bus);
if (hose == NULL) if (hose == NULL)
...@@ -442,16 +440,16 @@ static int u3_ht_write_config(struct pci_bus *bus, unsigned int devfn, ...@@ -442,16 +440,16 @@ static int u3_ht_write_config(struct pci_bus *bus, unsigned int devfn,
*/ */
switch (len) { switch (len) {
case 1: case 1:
out_8((u8 *)addr, val); out_8(addr, val);
(void) in_8((u8 *)addr); (void) in_8(addr);
break; break;
case 2: case 2:
out_le16((u16 *)addr, val); out_le16(addr, val);
(void) in_le16((u16 *)addr); (void) in_le16(addr);
break; break;
default: default:
out_le32((u32 *)addr, val); out_le32((u32 __iomem *)addr, val);
(void) in_le32((u32 *)addr); (void) in_le32(addr);
break; break;
} }
return PCIBIOS_SUCCESSFUL; return PCIBIOS_SUCCESSFUL;
...@@ -476,7 +474,7 @@ static struct pci_ops u3_ht_pci_ops = ...@@ -476,7 +474,7 @@ static struct pci_ops u3_ht_pci_ops =
|(((unsigned int)(off)) & 0xfcU) \ |(((unsigned int)(off)) & 0xfcU) \
|1UL) |1UL)
static unsigned long u4_pcie_cfg_access(struct pci_controller* hose, static volatile void __iomem *u4_pcie_cfg_access(struct pci_controller* hose,
u8 bus, u8 dev_fn, int offset) u8 bus, u8 dev_fn, int offset)
{ {
unsigned int caddr; unsigned int caddr;
...@@ -492,14 +490,14 @@ static unsigned long u4_pcie_cfg_access(struct pci_controller* hose, ...@@ -492,14 +490,14 @@ static unsigned long u4_pcie_cfg_access(struct pci_controller* hose,
} while (in_le32(hose->cfg_addr) != caddr); } while (in_le32(hose->cfg_addr) != caddr);
offset &= 0x03; offset &= 0x03;
return ((unsigned long)hose->cfg_data) + offset; return hose->cfg_data + offset;
} }
static int u4_pcie_read_config(struct pci_bus *bus, unsigned int devfn, static int u4_pcie_read_config(struct pci_bus *bus, unsigned int devfn,
int offset, int len, u32 *val) int offset, int len, u32 *val)
{ {
struct pci_controller *hose; struct pci_controller *hose;
unsigned long addr; volatile void __iomem *addr;
hose = pci_bus_to_host(bus); hose = pci_bus_to_host(bus);
if (hose == NULL) if (hose == NULL)
...@@ -515,13 +513,13 @@ static int u4_pcie_read_config(struct pci_bus *bus, unsigned int devfn, ...@@ -515,13 +513,13 @@ static int u4_pcie_read_config(struct pci_bus *bus, unsigned int devfn,
*/ */
switch (len) { switch (len) {
case 1: case 1:
*val = in_8((u8 *)addr); *val = in_8(addr);
break; break;
case 2: case 2:
*val = in_le16((u16 *)addr); *val = in_le16(addr);
break; break;
default: default:
*val = in_le32((u32 *)addr); *val = in_le32(addr);
break; break;
} }
return PCIBIOS_SUCCESSFUL; return PCIBIOS_SUCCESSFUL;
...@@ -531,7 +529,7 @@ static int u4_pcie_write_config(struct pci_bus *bus, unsigned int devfn, ...@@ -531,7 +529,7 @@ static int u4_pcie_write_config(struct pci_bus *bus, unsigned int devfn,
int offset, int len, u32 val) int offset, int len, u32 val)
{ {
struct pci_controller *hose; struct pci_controller *hose;
unsigned long addr; volatile void __iomem *addr;
hose = pci_bus_to_host(bus); hose = pci_bus_to_host(bus);
if (hose == NULL) if (hose == NULL)
...@@ -547,16 +545,16 @@ static int u4_pcie_write_config(struct pci_bus *bus, unsigned int devfn, ...@@ -547,16 +545,16 @@ static int u4_pcie_write_config(struct pci_bus *bus, unsigned int devfn,
*/ */
switch (len) { switch (len) {
case 1: case 1:
out_8((u8 *)addr, val); out_8(addr, val);
(void) in_8((u8 *)addr); (void) in_8(addr);
break; break;
case 2: case 2:
out_le16((u16 *)addr, val); out_le16(addr, val);
(void) in_le16((u16 *)addr); (void) in_le16(addr);
break; break;
default: default:
out_le32((u32 *)addr, val); out_le32(addr, val);
(void) in_le32((u32 *)addr); (void) in_le32(addr);
break; break;
} }
return PCIBIOS_SUCCESSFUL; return PCIBIOS_SUCCESSFUL;
...@@ -773,8 +771,7 @@ static void __init setup_u3_ht(struct pci_controller* hose) ...@@ -773,8 +771,7 @@ static void __init setup_u3_ht(struct pci_controller* hose)
* the reg address cell, we shall fix that by killing struct * the reg address cell, we shall fix that by killing struct
* reg_property and using some accessor functions instead * reg_property and using some accessor functions instead
*/ */
hose->cfg_data = (volatile unsigned char *)ioremap(0xf2000000, hose->cfg_data = ioremap(0xf2000000, 0x02000000);
0x02000000);
/* /*
* /ht node doesn't expose a "ranges" property, so we "remove" * /ht node doesn't expose a "ranges" property, so we "remove"
......
...@@ -59,7 +59,7 @@ static unsigned long dart_tablesize; ...@@ -59,7 +59,7 @@ static unsigned long dart_tablesize;
static u32 *dart_vbase; static u32 *dart_vbase;
/* Mapped base address for the dart */ /* Mapped base address for the dart */
static unsigned int *__iomem dart; static unsigned int __iomem *dart;
/* Dummy val that entries are set to when unused */ /* Dummy val that entries are set to when unused */
static unsigned int dart_emptyval; static unsigned int dart_emptyval;
......
...@@ -100,12 +100,12 @@ ...@@ -100,12 +100,12 @@
#define SET_STAT_UID(stat, uid) (stat).st_uid = high2lowuid(uid) #define SET_STAT_UID(stat, uid) (stat).st_uid = high2lowuid(uid)
#define SET_STAT_GID(stat, gid) (stat).st_gid = high2lowgid(gid) #define SET_STAT_GID(stat, gid) (stat).st_gid = high2lowgid(gid)
asmlinkage long sys32_chown16(const char * filename, u16 user, u16 group) asmlinkage long sys32_chown16(const char __user * filename, u16 user, u16 group)
{ {
return sys_chown(filename, low2highuid(user), low2highgid(group)); return sys_chown(filename, low2highuid(user), low2highgid(group));
} }
asmlinkage long sys32_lchown16(const char * filename, u16 user, u16 group) asmlinkage long sys32_lchown16(const char __user * filename, u16 user, u16 group)
{ {
return sys_lchown(filename, low2highuid(user), low2highgid(group)); return sys_lchown(filename, low2highuid(user), low2highgid(group));
} }
...@@ -141,7 +141,7 @@ asmlinkage long sys32_setresuid16(u16 ruid, u16 euid, u16 suid) ...@@ -141,7 +141,7 @@ asmlinkage long sys32_setresuid16(u16 ruid, u16 euid, u16 suid)
low2highuid(suid)); low2highuid(suid));
} }
asmlinkage long sys32_getresuid16(u16 *ruid, u16 *euid, u16 *suid) asmlinkage long sys32_getresuid16(u16 __user *ruid, u16 __user *euid, u16 __user *suid)
{ {
int retval; int retval;
...@@ -158,7 +158,7 @@ asmlinkage long sys32_setresgid16(u16 rgid, u16 egid, u16 sgid) ...@@ -158,7 +158,7 @@ asmlinkage long sys32_setresgid16(u16 rgid, u16 egid, u16 sgid)
low2highgid(sgid)); low2highgid(sgid));
} }
asmlinkage long sys32_getresgid16(u16 *rgid, u16 *egid, u16 *sgid) asmlinkage long sys32_getresgid16(u16 __user *rgid, u16 __user *egid, u16 __user *sgid)
{ {
int retval; int retval;
...@@ -179,7 +179,7 @@ asmlinkage long sys32_setfsgid16(u16 gid) ...@@ -179,7 +179,7 @@ asmlinkage long sys32_setfsgid16(u16 gid)
return sys_setfsgid((gid_t)gid); return sys_setfsgid((gid_t)gid);
} }
static int groups16_to_user(u16 *grouplist, struct group_info *group_info) static int groups16_to_user(u16 __user *grouplist, struct group_info *group_info)
{ {
int i; int i;
u16 group; u16 group;
...@@ -193,7 +193,7 @@ static int groups16_to_user(u16 *grouplist, struct group_info *group_info) ...@@ -193,7 +193,7 @@ static int groups16_to_user(u16 *grouplist, struct group_info *group_info)
return 0; return 0;
} }
static int groups16_from_user(struct group_info *group_info, u16 *grouplist) static int groups16_from_user(struct group_info *group_info, u16 __user *grouplist)
{ {
int i; int i;
u16 group; u16 group;
...@@ -207,7 +207,7 @@ static int groups16_from_user(struct group_info *group_info, u16 *grouplist) ...@@ -207,7 +207,7 @@ static int groups16_from_user(struct group_info *group_info, u16 *grouplist)
return 0; return 0;
} }
asmlinkage long sys32_getgroups16(int gidsetsize, u16 *grouplist) asmlinkage long sys32_getgroups16(int gidsetsize, u16 __user *grouplist)
{ {
int i; int i;
...@@ -231,7 +231,7 @@ asmlinkage long sys32_getgroups16(int gidsetsize, u16 *grouplist) ...@@ -231,7 +231,7 @@ asmlinkage long sys32_getgroups16(int gidsetsize, u16 *grouplist)
return i; return i;
} }
asmlinkage long sys32_setgroups16(int gidsetsize, u16 *grouplist) asmlinkage long sys32_setgroups16(int gidsetsize, u16 __user *grouplist)
{ {
struct group_info *group_info; struct group_info *group_info;
int retval; int retval;
...@@ -278,14 +278,14 @@ asmlinkage long sys32_getegid16(void) ...@@ -278,14 +278,14 @@ asmlinkage long sys32_getegid16(void)
/* 32-bit timeval and related flotsam. */ /* 32-bit timeval and related flotsam. */
static inline long get_tv32(struct timeval *o, struct compat_timeval *i) static inline long get_tv32(struct timeval *o, struct compat_timeval __user *i)
{ {
return (!access_ok(VERIFY_READ, o, sizeof(*o)) || return (!access_ok(VERIFY_READ, o, sizeof(*o)) ||
(__get_user(o->tv_sec, &i->tv_sec) || (__get_user(o->tv_sec, &i->tv_sec) ||
__get_user(o->tv_usec, &i->tv_usec))); __get_user(o->tv_usec, &i->tv_usec)));
} }
static inline long put_tv32(struct compat_timeval *o, struct timeval *i) static inline long put_tv32(struct compat_timeval __user *o, struct timeval *i)
{ {
return (!access_ok(VERIFY_WRITE, o, sizeof(*o)) || return (!access_ok(VERIFY_WRITE, o, sizeof(*o)) ||
(__put_user(i->tv_sec, &o->tv_sec) || (__put_user(i->tv_sec, &o->tv_sec) ||
...@@ -341,7 +341,7 @@ asmlinkage long sys32_ipc(u32 call, int first, int second, int third, u32 ptr) ...@@ -341,7 +341,7 @@ asmlinkage long sys32_ipc(u32 call, int first, int second, int third, u32 ptr)
return -ENOSYS; return -ENOSYS;
} }
asmlinkage long sys32_truncate64(const char * path, unsigned long high, unsigned long low) asmlinkage long sys32_truncate64(const char __user * path, unsigned long high, unsigned long low)
{ {
if ((int)high < 0) if ((int)high < 0)
return -EINVAL; return -EINVAL;
...@@ -357,7 +357,7 @@ asmlinkage long sys32_ftruncate64(unsigned int fd, unsigned long high, unsigned ...@@ -357,7 +357,7 @@ asmlinkage long sys32_ftruncate64(unsigned int fd, unsigned long high, unsigned
return sys_ftruncate(fd, (high << 32) | low); return sys_ftruncate(fd, (high << 32) | low);
} }
int cp_compat_stat(struct kstat *stat, struct compat_stat *statbuf) int cp_compat_stat(struct kstat *stat, struct compat_stat __user *statbuf)
{ {
int err; int err;
...@@ -591,7 +591,7 @@ sys32_delete_module(const char __user *name_user, unsigned int flags) ...@@ -591,7 +591,7 @@ sys32_delete_module(const char __user *name_user, unsigned int flags)
extern struct timezone sys_tz; extern struct timezone sys_tz;
asmlinkage long sys32_gettimeofday(struct compat_timeval *tv, struct timezone *tz) asmlinkage long sys32_gettimeofday(struct compat_timeval __user *tv, struct timezone __user *tz)
{ {
if (tv) { if (tv) {
struct timeval ktv; struct timeval ktv;
...@@ -606,7 +606,7 @@ asmlinkage long sys32_gettimeofday(struct compat_timeval *tv, struct timezone *t ...@@ -606,7 +606,7 @@ asmlinkage long sys32_gettimeofday(struct compat_timeval *tv, struct timezone *t
return 0; return 0;
} }
static inline long get_ts32(struct timespec *o, struct compat_timeval *i) static inline long get_ts32(struct timespec *o, struct compat_timeval __user *i)
{ {
long usec; long usec;
...@@ -620,7 +620,7 @@ static inline long get_ts32(struct timespec *o, struct compat_timeval *i) ...@@ -620,7 +620,7 @@ static inline long get_ts32(struct timespec *o, struct compat_timeval *i)
return 0; return 0;
} }
asmlinkage long sys32_settimeofday(struct compat_timeval *tv, struct timezone *tz) asmlinkage long sys32_settimeofday(struct compat_timeval __user *tv, struct timezone __user *tz)
{ {
struct timespec kts; struct timespec kts;
struct timezone ktz; struct timezone ktz;
...@@ -645,7 +645,7 @@ asmlinkage long sys32_pause(void) ...@@ -645,7 +645,7 @@ asmlinkage long sys32_pause(void)
return -ERESTARTNOHAND; return -ERESTARTNOHAND;
} }
asmlinkage long sys32_pread64(unsigned int fd, char *ubuf, asmlinkage long sys32_pread64(unsigned int fd, char __user *ubuf,
size_t count, u32 poshi, u32 poslo) size_t count, u32 poshi, u32 poslo)
{ {
if ((compat_ssize_t) count < 0) if ((compat_ssize_t) count < 0)
...@@ -653,7 +653,7 @@ asmlinkage long sys32_pread64(unsigned int fd, char *ubuf, ...@@ -653,7 +653,7 @@ asmlinkage long sys32_pread64(unsigned int fd, char *ubuf,
return sys_pread64(fd, ubuf, count, ((loff_t)AA(poshi) << 32) | AA(poslo)); return sys_pread64(fd, ubuf, count, ((loff_t)AA(poshi) << 32) | AA(poslo));
} }
asmlinkage long sys32_pwrite64(unsigned int fd, const char *ubuf, asmlinkage long sys32_pwrite64(unsigned int fd, const char __user *ubuf,
size_t count, u32 poshi, u32 poslo) size_t count, u32 poshi, u32 poslo)
{ {
if ((compat_ssize_t) count < 0) if ((compat_ssize_t) count < 0)
...@@ -666,7 +666,7 @@ asmlinkage compat_ssize_t sys32_readahead(int fd, u32 offhi, u32 offlo, s32 coun ...@@ -666,7 +666,7 @@ asmlinkage compat_ssize_t sys32_readahead(int fd, u32 offhi, u32 offlo, s32 coun
return sys_readahead(fd, ((loff_t)AA(offhi) << 32) | AA(offlo), count); return sys_readahead(fd, ((loff_t)AA(offhi) << 32) | AA(offlo), count);
} }
asmlinkage long sys32_sendfile(int out_fd, int in_fd, compat_off_t *offset, size_t count) asmlinkage long sys32_sendfile(int out_fd, int in_fd, compat_off_t __user *offset, size_t count)
{ {
mm_segment_t old_fs = get_fs(); mm_segment_t old_fs = get_fs();
int ret; int ret;
...@@ -686,7 +686,7 @@ asmlinkage long sys32_sendfile(int out_fd, int in_fd, compat_off_t *offset, size ...@@ -686,7 +686,7 @@ asmlinkage long sys32_sendfile(int out_fd, int in_fd, compat_off_t *offset, size
} }
asmlinkage long sys32_sendfile64(int out_fd, int in_fd, asmlinkage long sys32_sendfile64(int out_fd, int in_fd,
compat_loff_t *offset, s32 count) compat_loff_t __user *offset, s32 count)
{ {
mm_segment_t old_fs = get_fs(); mm_segment_t old_fs = get_fs();
int ret; int ret;
...@@ -722,7 +722,7 @@ struct timex32 { ...@@ -722,7 +722,7 @@ struct timex32 {
extern int do_adjtimex(struct timex *); extern int do_adjtimex(struct timex *);
asmlinkage long sys32_adjtimex(struct timex32 *utp) asmlinkage long sys32_adjtimex(struct timex32 __user *utp)
{ {
struct timex txc; struct timex txc;
int ret; int ret;
...@@ -789,12 +789,13 @@ struct __sysctl_args32 { ...@@ -789,12 +789,13 @@ struct __sysctl_args32 {
u32 __unused[4]; u32 __unused[4];
}; };
asmlinkage long sys32_sysctl(struct __sysctl_args32 *args) asmlinkage long sys32_sysctl(struct __sysctl_args32 __user *args)
{ {
struct __sysctl_args32 tmp; struct __sysctl_args32 tmp;
int error; int error;
size_t oldlen, *oldlenp = NULL; size_t oldlen;
unsigned long addr = (((long)&args->__unused[0]) + 7) & ~7; size_t __user *oldlenp = NULL;
unsigned long addr = (((unsigned long)&args->__unused[0]) + 7) & ~7;
if (copy_from_user(&tmp, args, sizeof(tmp))) if (copy_from_user(&tmp, args, sizeof(tmp)))
return -EFAULT; return -EFAULT;
...@@ -806,20 +807,20 @@ asmlinkage long sys32_sysctl(struct __sysctl_args32 *args) ...@@ -806,20 +807,20 @@ asmlinkage long sys32_sysctl(struct __sysctl_args32 *args)
basically copy the whole sysctl.c here, and basically copy the whole sysctl.c here, and
glibc's __sysctl uses rw memory for the structure glibc's __sysctl uses rw memory for the structure
anyway. */ anyway. */
if (get_user(oldlen, (u32 *)A(tmp.oldlenp)) || if (get_user(oldlen, (u32 __user *)compat_ptr(tmp.oldlenp)) ||
put_user(oldlen, (size_t *)addr)) put_user(oldlen, (size_t __user *)addr))
return -EFAULT; return -EFAULT;
oldlenp = (size_t *)addr; oldlenp = (size_t __user *)addr;
} }
lock_kernel(); lock_kernel();
error = do_sysctl((int *)A(tmp.name), tmp.nlen, (void *)A(tmp.oldval), error = do_sysctl(compat_ptr(tmp.name), tmp.nlen, compat_ptr(tmp.oldval),
oldlenp, (void *)A(tmp.newval), tmp.newlen); oldlenp, compat_ptr(tmp.newval), tmp.newlen);
unlock_kernel(); unlock_kernel();
if (oldlenp) { if (oldlenp) {
if (!error) { if (!error) {
if (get_user(oldlen, (size_t *)addr) || if (get_user(oldlen, (size_t __user *)addr) ||
put_user(oldlen, (u32 *)A(tmp.oldlenp))) put_user(oldlen, (u32 __user *)compat_ptr(tmp.oldlenp)))
error = -EFAULT; error = -EFAULT;
} }
copy_to_user(args->__unused, tmp.__unused, sizeof(tmp.__unused)); copy_to_user(args->__unused, tmp.__unused, sizeof(tmp.__unused));
...@@ -853,7 +854,7 @@ struct stat64_emu31 { ...@@ -853,7 +854,7 @@ struct stat64_emu31 {
unsigned long st_ino; unsigned long st_ino;
}; };
static int cp_stat64(struct stat64_emu31 *ubuf, struct kstat *stat) static int cp_stat64(struct stat64_emu31 __user *ubuf, struct kstat *stat)
{ {
struct stat64_emu31 tmp; struct stat64_emu31 tmp;
...@@ -877,7 +878,7 @@ static int cp_stat64(struct stat64_emu31 *ubuf, struct kstat *stat) ...@@ -877,7 +878,7 @@ static int cp_stat64(struct stat64_emu31 *ubuf, struct kstat *stat)
return copy_to_user(ubuf,&tmp,sizeof(tmp)) ? -EFAULT : 0; return copy_to_user(ubuf,&tmp,sizeof(tmp)) ? -EFAULT : 0;
} }
asmlinkage long sys32_stat64(char * filename, struct stat64_emu31 * statbuf) asmlinkage long sys32_stat64(char __user * filename, struct stat64_emu31 __user * statbuf)
{ {
struct kstat stat; struct kstat stat;
int ret = vfs_stat(filename, &stat); int ret = vfs_stat(filename, &stat);
...@@ -886,7 +887,7 @@ asmlinkage long sys32_stat64(char * filename, struct stat64_emu31 * statbuf) ...@@ -886,7 +887,7 @@ asmlinkage long sys32_stat64(char * filename, struct stat64_emu31 * statbuf)
return ret; return ret;
} }
asmlinkage long sys32_lstat64(char * filename, struct stat64_emu31 * statbuf) asmlinkage long sys32_lstat64(char __user * filename, struct stat64_emu31 __user * statbuf)
{ {
struct kstat stat; struct kstat stat;
int ret = vfs_lstat(filename, &stat); int ret = vfs_lstat(filename, &stat);
...@@ -895,7 +896,7 @@ asmlinkage long sys32_lstat64(char * filename, struct stat64_emu31 * statbuf) ...@@ -895,7 +896,7 @@ asmlinkage long sys32_lstat64(char * filename, struct stat64_emu31 * statbuf)
return ret; return ret;
} }
asmlinkage long sys32_fstat64(unsigned long fd, struct stat64_emu31 * statbuf) asmlinkage long sys32_fstat64(unsigned long fd, struct stat64_emu31 __user * statbuf)
{ {
struct kstat stat; struct kstat stat;
int ret = vfs_fstat(fd, &stat); int ret = vfs_fstat(fd, &stat);
...@@ -952,7 +953,7 @@ static inline long do_mmap2( ...@@ -952,7 +953,7 @@ static inline long do_mmap2(
asmlinkage unsigned long asmlinkage unsigned long
old32_mmap(struct mmap_arg_struct_emu31 *arg) old32_mmap(struct mmap_arg_struct_emu31 __user *arg)
{ {
struct mmap_arg_struct_emu31 a; struct mmap_arg_struct_emu31 a;
int error = -EFAULT; int error = -EFAULT;
...@@ -970,7 +971,7 @@ old32_mmap(struct mmap_arg_struct_emu31 *arg) ...@@ -970,7 +971,7 @@ old32_mmap(struct mmap_arg_struct_emu31 *arg)
} }
asmlinkage long asmlinkage long
sys32_mmap2(struct mmap_arg_struct_emu31 *arg) sys32_mmap2(struct mmap_arg_struct_emu31 __user *arg)
{ {
struct mmap_arg_struct_emu31 a; struct mmap_arg_struct_emu31 a;
int error = -EFAULT; int error = -EFAULT;
...@@ -982,7 +983,7 @@ sys32_mmap2(struct mmap_arg_struct_emu31 *arg) ...@@ -982,7 +983,7 @@ sys32_mmap2(struct mmap_arg_struct_emu31 *arg)
return error; return error;
} }
asmlinkage long sys32_read(unsigned int fd, char * buf, size_t count) asmlinkage long sys32_read(unsigned int fd, char __user * buf, size_t count)
{ {
if ((compat_ssize_t) count < 0) if ((compat_ssize_t) count < 0)
return -EINVAL; return -EINVAL;
...@@ -990,7 +991,7 @@ asmlinkage long sys32_read(unsigned int fd, char * buf, size_t count) ...@@ -990,7 +991,7 @@ asmlinkage long sys32_read(unsigned int fd, char * buf, size_t count)
return sys_read(fd, buf, count); return sys_read(fd, buf, count);
} }
asmlinkage long sys32_write(unsigned int fd, char * buf, size_t count) asmlinkage long sys32_write(unsigned int fd, char __user * buf, size_t count)
{ {
if ((compat_ssize_t) count < 0) if ((compat_ssize_t) count < 0)
return -EINVAL; return -EINVAL;
...@@ -1002,12 +1003,12 @@ asmlinkage long sys32_clone(struct pt_regs regs) ...@@ -1002,12 +1003,12 @@ asmlinkage long sys32_clone(struct pt_regs regs)
{ {
unsigned long clone_flags; unsigned long clone_flags;
unsigned long newsp; unsigned long newsp;
int *parent_tidptr, *child_tidptr; int __user *parent_tidptr, *child_tidptr;
clone_flags = regs.gprs[3] & 0xffffffffUL; clone_flags = regs.gprs[3] & 0xffffffffUL;
newsp = regs.orig_gpr2 & 0x7fffffffUL; newsp = regs.orig_gpr2 & 0x7fffffffUL;
parent_tidptr = (int *) (regs.gprs[4] & 0x7fffffffUL); parent_tidptr = compat_ptr(regs.gprs[4]);
child_tidptr = (int *) (regs.gprs[5] & 0x7fffffffUL); child_tidptr = compat_ptr(regs.gprs[5]);
if (!newsp) if (!newsp)
newsp = regs.gprs[15]; newsp = regs.gprs[15];
return do_fork(clone_flags, newsp, &regs, 0, return do_fork(clone_flags, newsp, &regs, 0,
......
...@@ -122,8 +122,8 @@ asmlinkage long old_mmap(struct mmap_arg_struct __user *arg) ...@@ -122,8 +122,8 @@ asmlinkage long old_mmap(struct mmap_arg_struct __user *arg)
#ifndef CONFIG_64BIT #ifndef CONFIG_64BIT
struct sel_arg_struct { struct sel_arg_struct {
unsigned long n; unsigned long n;
fd_set *inp, *outp, *exp; fd_set __user *inp, *outp, *exp;
struct timeval *tvp; struct timeval __user *tvp;
}; };
asmlinkage long old_select(struct sel_arg_struct __user *arg) asmlinkage long old_select(struct sel_arg_struct __user *arg)
......
...@@ -486,7 +486,7 @@ asmlinkage void illegal_op(struct pt_regs * regs, long interruption_code) ...@@ -486,7 +486,7 @@ asmlinkage void illegal_op(struct pt_regs * regs, long interruption_code)
info.si_signo = signal; info.si_signo = signal;
info.si_errno = 0; info.si_errno = 0;
info.si_code = ILL_ILLOPC; info.si_code = ILL_ILLOPC;
info.si_addr = (void *) location; info.si_addr = (void __user *) location;
do_trap(interruption_code, signal, do_trap(interruption_code, signal,
"illegal operation", regs, &info); "illegal operation", regs, &info);
} }
......
...@@ -216,24 +216,26 @@ void rts7751r2d_insb(unsigned long port, void *addr, unsigned long count) ...@@ -216,24 +216,26 @@ void rts7751r2d_insb(unsigned long port, void *addr, unsigned long count)
{ {
volatile __u8 *bp; volatile __u8 *bp;
volatile __u16 *p; volatile __u16 *p;
unsigned char *s = addr;
if (CHECK_AX88796L_PORT(port)) { if (CHECK_AX88796L_PORT(port)) {
p = (volatile unsigned short *)port88796l(port, 0); p = (volatile unsigned short *)port88796l(port, 0);
while (count--) *((unsigned char *) addr)++ = *p & 0xff; while (count--) *s++ = *p & 0xff;
} else if (PXSEG(port)) } else if (PXSEG(port))
while (count--) *((unsigned char *) addr)++ = *(volatile unsigned char *)port; while (count--) *s++ = *(volatile unsigned char *)port;
else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) { else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) {
bp = (__u8 *)PCI_IOMAP(port); bp = (__u8 *)PCI_IOMAP(port);
while (count--) *((volatile unsigned char *) addr)++ = *bp; while (count--) *s++ = *bp;
} else { } else {
p = (volatile unsigned short *)port2adr(port); p = (volatile unsigned short *)port2adr(port);
while (count--) *((unsigned char *) addr)++ = *p & 0xff; while (count--) *s++ = *p & 0xff;
} }
} }
void rts7751r2d_insw(unsigned long port, void *addr, unsigned long count) void rts7751r2d_insw(unsigned long port, void *addr, unsigned long count)
{ {
volatile __u16 *p; volatile __u16 *p;
__u16 *s = addr;
if (CHECK_AX88796L_PORT(port)) if (CHECK_AX88796L_PORT(port))
p = (volatile unsigned short *)port88796l(port, 1); p = (volatile unsigned short *)port88796l(port, 1);
...@@ -243,7 +245,7 @@ void rts7751r2d_insw(unsigned long port, void *addr, unsigned long count) ...@@ -243,7 +245,7 @@ void rts7751r2d_insw(unsigned long port, void *addr, unsigned long count)
p = (volatile unsigned short *)PCI_IOMAP(port); p = (volatile unsigned short *)PCI_IOMAP(port);
else else
p = (volatile unsigned short *)port2adr(port); p = (volatile unsigned short *)port2adr(port);
while (count--) *((__u16 *) addr)++ = *p; while (count--) *s++ = *p;
} }
void rts7751r2d_insl(unsigned long port, void *addr, unsigned long count) void rts7751r2d_insl(unsigned long port, void *addr, unsigned long count)
...@@ -252,8 +254,9 @@ void rts7751r2d_insl(unsigned long port, void *addr, unsigned long count) ...@@ -252,8 +254,9 @@ void rts7751r2d_insl(unsigned long port, void *addr, unsigned long count)
maybebadio(insl, port); maybebadio(insl, port);
else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) { else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) {
volatile __u32 *p = (__u32 *)PCI_IOMAP(port); volatile __u32 *p = (__u32 *)PCI_IOMAP(port);
__u32 *s = addr;
while (count--) *((__u32 *) addr)++ = *p; while (count--) *s++ = *p;
} else } else
maybebadio(insl, port); maybebadio(insl, port);
} }
...@@ -262,24 +265,26 @@ void rts7751r2d_outsb(unsigned long port, const void *addr, unsigned long count) ...@@ -262,24 +265,26 @@ void rts7751r2d_outsb(unsigned long port, const void *addr, unsigned long count)
{ {
volatile __u8 *bp; volatile __u8 *bp;
volatile __u16 *p; volatile __u16 *p;
const __u8 *s = addr;
if (CHECK_AX88796L_PORT(port)) { if (CHECK_AX88796L_PORT(port)) {
p = (volatile unsigned short *)port88796l(port, 0); p = (volatile unsigned short *)port88796l(port, 0);
while (count--) *p = *((unsigned char *) addr)++; while (count--) *p = *s++;
} else if (PXSEG(port)) } else if (PXSEG(port))
while (count--) *(volatile unsigned char *)port = *((unsigned char *) addr)++; while (count--) *(volatile unsigned char *)port = *s++;
else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) { else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) {
bp = (__u8 *)PCI_IOMAP(port); bp = (__u8 *)PCI_IOMAP(port);
while (count--) *bp = *((volatile unsigned char *) addr)++; while (count--) *bp = *s++;
} else { } else {
p = (volatile unsigned short *)port2adr(port); p = (volatile unsigned short *)port2adr(port);
while (count--) *p = *((unsigned char *) addr)++; while (count--) *p = *s++;
} }
} }
void rts7751r2d_outsw(unsigned long port, const void *addr, unsigned long count) void rts7751r2d_outsw(unsigned long port, const void *addr, unsigned long count)
{ {
volatile __u16 *p; volatile __u16 *p;
const __u16 *s = addr;
if (CHECK_AX88796L_PORT(port)) if (CHECK_AX88796L_PORT(port))
p = (volatile unsigned short *)port88796l(port, 1); p = (volatile unsigned short *)port88796l(port, 1);
...@@ -289,7 +294,7 @@ void rts7751r2d_outsw(unsigned long port, const void *addr, unsigned long count) ...@@ -289,7 +294,7 @@ void rts7751r2d_outsw(unsigned long port, const void *addr, unsigned long count)
p = (volatile unsigned short *)PCI_IOMAP(port); p = (volatile unsigned short *)PCI_IOMAP(port);
else else
p = (volatile unsigned short *)port2adr(port); p = (volatile unsigned short *)port2adr(port);
while (count--) *p = *((__u16 *) addr)++; while (count--) *p = *s++;
} }
void rts7751r2d_outsl(unsigned long port, const void *addr, unsigned long count) void rts7751r2d_outsl(unsigned long port, const void *addr, unsigned long count)
...@@ -298,8 +303,9 @@ void rts7751r2d_outsl(unsigned long port, const void *addr, unsigned long count) ...@@ -298,8 +303,9 @@ void rts7751r2d_outsl(unsigned long port, const void *addr, unsigned long count)
maybebadio(outsl, port); maybebadio(outsl, port);
else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) { else if (CHECK_SH7751_PCIIO(port) || shifted_port(port)) {
volatile __u32 *p = (__u32 *)PCI_IOMAP(port); volatile __u32 *p = (__u32 *)PCI_IOMAP(port);
const __u32 *s = addr;
while (count--) *p = *((__u32 *) addr)++; while (count--) *p = *s++;
} else } else
maybebadio(outsl, port); maybebadio(outsl, port);
} }
......
...@@ -222,7 +222,7 @@ config SYNCLINKMP ...@@ -222,7 +222,7 @@ config SYNCLINKMP
config SYNCLINK_GT config SYNCLINK_GT
tristate "SyncLink GT/AC support" tristate "SyncLink GT/AC support"
depends on SERIAL_NONSTANDARD depends on SERIAL_NONSTANDARD && PCI
help help
Support for SyncLink GT and SyncLink AC families of Support for SyncLink GT and SyncLink AC families of
synchronous and asynchronous serial adapters synchronous and asynchronous serial adapters
......
...@@ -351,7 +351,7 @@ config HISAX_ENTERNOW_PCI ...@@ -351,7 +351,7 @@ config HISAX_ENTERNOW_PCI
config HISAX_AMD7930 config HISAX_AMD7930
bool "Am7930 (EXPERIMENTAL)" bool "Am7930 (EXPERIMENTAL)"
depends on EXPERIMENTAL && SPARC depends on EXPERIMENTAL && SPARC && BROKEN
help help
This enables HiSax support for the AMD7930 chips on some SPARCs. This enables HiSax support for the AMD7930 chips on some SPARCs.
This code is not finished yet. This code is not finished yet.
......
...@@ -167,29 +167,32 @@ static int get_v4l2_window32(struct v4l2_window *kp, struct v4l2_window32 __user ...@@ -167,29 +167,32 @@ static int get_v4l2_window32(struct v4l2_window *kp, struct v4l2_window32 __user
if (kp->clipcount > 2048) if (kp->clipcount > 2048)
return -EINVAL; return -EINVAL;
if (kp->clipcount) { if (kp->clipcount) {
struct v4l2_clip32 *uclips = compat_ptr(up->clips); struct v4l2_clip32 __user *uclips;
struct v4l2_clip *kclips; struct v4l2_clip __user *kclips;
int n = kp->clipcount; int n = kp->clipcount;
compat_caddr_t p;
if (get_user(p, &up->clips))
return -EFAULT;
uclips = compat_ptr(p);
kclips = compat_alloc_user_space(n * sizeof(struct v4l2_clip)); kclips = compat_alloc_user_space(n * sizeof(struct v4l2_clip));
kp->clips = kclips; kp->clips = kclips;
while (--n >= 0) { while (--n >= 0) {
if (!access_ok(VERIFY_READ, &uclips->c, sizeof(uclips->c)) || if (copy_in_user(&kclips->c, &uclips->c, sizeof(uclips->c)))
copy_from_user(&kclips->c, &uclips->c, sizeof(uclips->c))) return -EFAULT;
if (put_user(n ? kclips + 1 : NULL, &kclips->next))
return -EFAULT; return -EFAULT;
kclips->next = n ? kclips + 1 : 0;
uclips += 1; uclips += 1;
kclips += 1; kclips += 1;
} }
} else } else
kp->clips = 0; kp->clips = NULL;
return 0; return 0;
} }
static int put_v4l2_window32(struct v4l2_window *kp, struct v4l2_window32 __user *up) static int put_v4l2_window32(struct v4l2_window *kp, struct v4l2_window32 __user *up)
{ {
if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_window32)) || if (copy_to_user(&up->w, &kp->w, sizeof(up->w)) ||
copy_to_user(&up->w, &kp->w, sizeof(up->w)) ||
put_user(kp->field, &up->field) || put_user(kp->field, &up->field) ||
put_user(kp->chromakey, &up->chromakey) || put_user(kp->chromakey, &up->chromakey) ||
put_user(kp->clipcount, &up->clipcount)) put_user(kp->clipcount, &up->clipcount))
...@@ -199,32 +202,28 @@ static int put_v4l2_window32(struct v4l2_window *kp, struct v4l2_window32 __user ...@@ -199,32 +202,28 @@ static int put_v4l2_window32(struct v4l2_window *kp, struct v4l2_window32 __user
static inline int get_v4l2_pix_format(struct v4l2_pix_format *kp, struct v4l2_pix_format __user *up) static inline int get_v4l2_pix_format(struct v4l2_pix_format *kp, struct v4l2_pix_format __user *up)
{ {
if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_pix_format)) || if (copy_from_user(kp, up, sizeof(struct v4l2_pix_format)))
copy_from_user(kp, up, sizeof(struct v4l2_pix_format)))
return -EFAULT; return -EFAULT;
return 0; return 0;
} }
static inline int put_v4l2_pix_format(struct v4l2_pix_format *kp, struct v4l2_pix_format __user *up) static inline int put_v4l2_pix_format(struct v4l2_pix_format *kp, struct v4l2_pix_format __user *up)
{ {
if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_pix_format)) || if (copy_to_user(up, kp, sizeof(struct v4l2_pix_format)))
copy_to_user(up, kp, sizeof(struct v4l2_pix_format)))
return -EFAULT; return -EFAULT;
return 0; return 0;
} }
static inline int get_v4l2_vbi_format(struct v4l2_vbi_format *kp, struct v4l2_vbi_format __user *up) static inline int get_v4l2_vbi_format(struct v4l2_vbi_format *kp, struct v4l2_vbi_format __user *up)
{ {
if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_vbi_format)) || if (copy_from_user(kp, up, sizeof(struct v4l2_vbi_format)))
copy_from_user(kp, up, sizeof(struct v4l2_vbi_format)))
return -EFAULT; return -EFAULT;
return 0; return 0;
} }
static inline int put_v4l2_vbi_format(struct v4l2_vbi_format *kp, struct v4l2_vbi_format __user *up) static inline int put_v4l2_vbi_format(struct v4l2_vbi_format *kp, struct v4l2_vbi_format __user *up)
{ {
if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_vbi_format)) || if (copy_to_user(up, kp, sizeof(struct v4l2_vbi_format)))
copy_to_user(up, kp, sizeof(struct v4l2_vbi_format)))
return -EFAULT; return -EFAULT;
return 0; return 0;
} }
...@@ -279,8 +278,7 @@ static int put_v4l2_format32(struct v4l2_format *kp, struct v4l2_format32 __user ...@@ -279,8 +278,7 @@ static int put_v4l2_format32(struct v4l2_format *kp, struct v4l2_format32 __user
static inline int get_v4l2_standard(struct v4l2_standard *kp, struct v4l2_standard __user *up) static inline int get_v4l2_standard(struct v4l2_standard *kp, struct v4l2_standard __user *up)
{ {
if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_standard)) || if (copy_from_user(kp, up, sizeof(struct v4l2_standard)))
copy_from_user(kp, up, sizeof(struct v4l2_standard)))
return -EFAULT; return -EFAULT;
return 0; return 0;
...@@ -288,8 +286,7 @@ static inline int get_v4l2_standard(struct v4l2_standard *kp, struct v4l2_standa ...@@ -288,8 +286,7 @@ static inline int get_v4l2_standard(struct v4l2_standard *kp, struct v4l2_standa
static inline int put_v4l2_standard(struct v4l2_standard *kp, struct v4l2_standard __user *up) static inline int put_v4l2_standard(struct v4l2_standard *kp, struct v4l2_standard __user *up)
{ {
if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_standard)) || if (copy_to_user(up, kp, sizeof(struct v4l2_standard)))
copy_to_user(up, kp, sizeof(struct v4l2_standard)))
return -EFAULT; return -EFAULT;
return 0; return 0;
} }
...@@ -328,8 +325,7 @@ static int put_v4l2_standard32(struct v4l2_standard *kp, struct v4l2_standard32 ...@@ -328,8 +325,7 @@ static int put_v4l2_standard32(struct v4l2_standard *kp, struct v4l2_standard32
static inline int get_v4l2_tuner(struct v4l2_tuner *kp, struct v4l2_tuner __user *up) static inline int get_v4l2_tuner(struct v4l2_tuner *kp, struct v4l2_tuner __user *up)
{ {
if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_tuner)) || if (copy_from_user(kp, up, sizeof(struct v4l2_tuner)))
copy_from_user(kp, up, sizeof(struct v4l2_tuner)))
return -EFAULT; return -EFAULT;
return 0; return 0;
...@@ -337,8 +333,7 @@ static inline int get_v4l2_tuner(struct v4l2_tuner *kp, struct v4l2_tuner __user ...@@ -337,8 +333,7 @@ static inline int get_v4l2_tuner(struct v4l2_tuner *kp, struct v4l2_tuner __user
static inline int put_v4l2_tuner(struct v4l2_tuner *kp, struct v4l2_tuner __user *up) static inline int put_v4l2_tuner(struct v4l2_tuner *kp, struct v4l2_tuner __user *up)
{ {
if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_tuner)) || if (copy_to_user(up, kp, sizeof(struct v4l2_tuner)))
copy_to_user(up, kp, sizeof(struct v4l2_tuner)))
return -EFAULT; return -EFAULT;
return 0; return 0;
} }
...@@ -380,11 +375,13 @@ static int get_v4l2_buffer32(struct v4l2_buffer *kp, struct v4l2_buffer32 __user ...@@ -380,11 +375,13 @@ static int get_v4l2_buffer32(struct v4l2_buffer *kp, struct v4l2_buffer32 __user
break; break;
case V4L2_MEMORY_USERPTR: case V4L2_MEMORY_USERPTR:
{ {
unsigned long tmp = (unsigned long)compat_ptr(up->m.userptr); compat_long_t tmp;
if(get_user(kp->length, &up->length) || if (get_user(kp->length, &up->length) ||
get_user(kp->m.userptr, &tmp)) get_user(tmp, &up->m.userptr))
return -EFAULT; return -EFAULT;
kp->m.userptr = (unsigned long)compat_ptr(tmp);
} }
break; break;
case V4L2_MEMORY_OVERLAY: case V4L2_MEMORY_OVERLAY:
...@@ -468,32 +465,28 @@ static int put_v4l2_framebuffer32(struct v4l2_framebuffer *kp, struct v4l2_frame ...@@ -468,32 +465,28 @@ static int put_v4l2_framebuffer32(struct v4l2_framebuffer *kp, struct v4l2_frame
static inline int get_v4l2_input32(struct v4l2_input *kp, struct v4l2_input __user *up) static inline int get_v4l2_input32(struct v4l2_input *kp, struct v4l2_input __user *up)
{ {
if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_input) - 4) || if (copy_from_user(kp, up, sizeof(struct v4l2_input) - 4))
copy_from_user(kp, up, sizeof(struct v4l2_input) - 4))
return -EFAULT; return -EFAULT;
return 0; return 0;
} }
static inline int put_v4l2_input32(struct v4l2_input *kp, struct v4l2_input __user *up) static inline int put_v4l2_input32(struct v4l2_input *kp, struct v4l2_input __user *up)
{ {
if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_input) - 4) || if (copy_to_user(up, kp, sizeof(struct v4l2_input) - 4))
copy_to_user(up, kp, sizeof(struct v4l2_input) - 4))
return -EFAULT; return -EFAULT;
return 0; return 0;
} }
static inline int get_v4l2_input(struct v4l2_input *kp, struct v4l2_input __user *up) static inline int get_v4l2_input(struct v4l2_input *kp, struct v4l2_input __user *up)
{ {
if (!access_ok(VERIFY_READ, up, sizeof(struct v4l2_input)) || if (copy_from_user(kp, up, sizeof(struct v4l2_input)))
copy_from_user(kp, up, sizeof(struct v4l2_input)))
return -EFAULT; return -EFAULT;
return 0; return 0;
} }
static inline int put_v4l2_input(struct v4l2_input *kp, struct v4l2_input __user *up) static inline int put_v4l2_input(struct v4l2_input *kp, struct v4l2_input __user *up)
{ {
if (!access_ok(VERIFY_WRITE, up, sizeof(struct v4l2_input)) || if (copy_to_user(up, kp, sizeof(struct v4l2_input)))
copy_to_user(up, kp, sizeof(struct v4l2_input)))
return -EFAULT; return -EFAULT;
return 0; return 0;
} }
......
...@@ -301,7 +301,7 @@ config MTD_JEDEC ...@@ -301,7 +301,7 @@ config MTD_JEDEC
config MTD_XIP config MTD_XIP
bool "XIP aware MTD support" bool "XIP aware MTD support"
depends on !SMP && (MTD_CFI_INTELEXT || MTD_CFI_AMDSTD) && EXPERIMENTAL && ARM depends on !SMP && (MTD_CFI_INTELEXT || MTD_CFI_AMDSTD) && EXPERIMENTAL && ARCH_MTD_XIP
default y if XIP_KERNEL default y if XIP_KERNEL
help help
This allows MTD support to work with flash memory which is also This allows MTD support to work with flash memory which is also
......
...@@ -748,7 +748,7 @@ prism54_get_essid(struct net_device *ndev, struct iw_request_info *info, ...@@ -748,7 +748,7 @@ prism54_get_essid(struct net_device *ndev, struct iw_request_info *info,
if (essid->length) { if (essid->length) {
dwrq->flags = 1; /* set ESSID to ON for Wireless Extensions */ dwrq->flags = 1; /* set ESSID to ON for Wireless Extensions */
/* if it is to big, trunk it */ /* if it is to big, trunk it */
dwrq->length = min(IW_ESSID_MAX_SIZE, essid->length); dwrq->length = min((u8)IW_ESSID_MAX_SIZE, essid->length);
} else { } else {
dwrq->flags = 0; dwrq->flags = 0;
dwrq->length = 0; dwrq->length = 0;
......
...@@ -37,7 +37,7 @@ struct old_serial_port { ...@@ -37,7 +37,7 @@ struct old_serial_port {
unsigned int irq; unsigned int irq;
unsigned int flags; unsigned int flags;
unsigned char io_type; unsigned char io_type;
unsigned char *iomem_base; unsigned char __iomem *iomem_base;
unsigned short iomem_reg_shift; unsigned short iomem_reg_shift;
}; };
......
...@@ -38,10 +38,10 @@ static inline unsigned mcr_pack(unsigned pulse, unsigned sample) ...@@ -38,10 +38,10 @@ static inline unsigned mcr_pack(unsigned pulse, unsigned sample)
static int nic_wait(struct ioc3_driver_data *idd) static int nic_wait(struct ioc3_driver_data *idd)
{ {
volatile unsigned mcr; unsigned mcr;
do { do {
mcr = (volatile unsigned)idd->vma->mcr; mcr = readl(&idd->vma->mcr);
} while (!(mcr & 2)); } while (!(mcr & 2));
return mcr & 1; return mcr & 1;
...@@ -53,7 +53,7 @@ static int nic_reset(struct ioc3_driver_data *idd) ...@@ -53,7 +53,7 @@ static int nic_reset(struct ioc3_driver_data *idd)
unsigned long flags; unsigned long flags;
local_irq_save(flags); local_irq_save(flags);
idd->vma->mcr = mcr_pack(500, 65); writel(mcr_pack(500, 65), &idd->vma->mcr);
presence = nic_wait(idd); presence = nic_wait(idd);
local_irq_restore(flags); local_irq_restore(flags);
...@@ -68,7 +68,7 @@ static inline int nic_read_bit(struct ioc3_driver_data *idd) ...@@ -68,7 +68,7 @@ static inline int nic_read_bit(struct ioc3_driver_data *idd)
unsigned long flags; unsigned long flags;
local_irq_save(flags); local_irq_save(flags);
idd->vma->mcr = mcr_pack(6, 13); writel(mcr_pack(6, 13), &idd->vma->mcr);
result = nic_wait(idd); result = nic_wait(idd);
local_irq_restore(flags); local_irq_restore(flags);
...@@ -80,9 +80,9 @@ static inline int nic_read_bit(struct ioc3_driver_data *idd) ...@@ -80,9 +80,9 @@ static inline int nic_read_bit(struct ioc3_driver_data *idd)
static inline void nic_write_bit(struct ioc3_driver_data *idd, int bit) static inline void nic_write_bit(struct ioc3_driver_data *idd, int bit)
{ {
if (bit) if (bit)
idd->vma->mcr = mcr_pack(6, 110); writel(mcr_pack(6, 110), &idd->vma->mcr);
else else
idd->vma->mcr = mcr_pack(80, 30); writel(mcr_pack(80, 30), &idd->vma->mcr);
nic_wait(idd); nic_wait(idd);
} }
...@@ -337,7 +337,7 @@ static void probe_nic(struct ioc3_driver_data *idd) ...@@ -337,7 +337,7 @@ static void probe_nic(struct ioc3_driver_data *idd)
int save = 0, loops = 3; int save = 0, loops = 3;
unsigned long first, addr; unsigned long first, addr;
idd->vma->gpcr_s = GPCR_MLAN_EN; writel(GPCR_MLAN_EN, &idd->vma->gpcr_s);
while(loops>0) { while(loops>0) {
idd->nic_part[0] = 0; idd->nic_part[0] = 0;
...@@ -408,7 +408,7 @@ static irqreturn_t ioc3_intr_io(int irq, void *arg, struct pt_regs *regs) ...@@ -408,7 +408,7 @@ static irqreturn_t ioc3_intr_io(int irq, void *arg, struct pt_regs *regs)
read_lock_irqsave(&ioc3_submodules_lock, flags); read_lock_irqsave(&ioc3_submodules_lock, flags);
if(idd->dual_irq && idd->vma->eisr) { if(idd->dual_irq && readb(&idd->vma->eisr)) {
/* send Ethernet IRQ to the driver */ /* send Ethernet IRQ to the driver */
if(ioc3_ethernet && idd->active[ioc3_ethernet->id] && if(ioc3_ethernet && idd->active[ioc3_ethernet->id] &&
ioc3_ethernet->intr) { ioc3_ethernet->intr) {
...@@ -682,7 +682,7 @@ static int ioc3_probe(struct pci_dev *pdev, const struct pci_device_id *pci_id) ...@@ -682,7 +682,7 @@ static int ioc3_probe(struct pci_dev *pdev, const struct pci_device_id *pci_id)
idd->id = ioc3_counter++; idd->id = ioc3_counter++;
up_write(&ioc3_devices_rwsem); up_write(&ioc3_devices_rwsem);
idd->gpdr_shadow = idd->vma->gpdr; idd->gpdr_shadow = readl(&idd->vma->gpdr);
/* Read IOC3 NIC contents */ /* Read IOC3 NIC contents */
probe_nic(idd); probe_nic(idd);
......
...@@ -931,8 +931,8 @@ struct compat_sg_req_info { /* used by SG_GET_REQUEST_TABLE ioctl() */ ...@@ -931,8 +931,8 @@ struct compat_sg_req_info { /* used by SG_GET_REQUEST_TABLE ioctl() */
static int sg_grt_trans(unsigned int fd, unsigned int cmd, unsigned long arg) static int sg_grt_trans(unsigned int fd, unsigned int cmd, unsigned long arg)
{ {
int err, i; int err, i;
sg_req_info_t *r; sg_req_info_t __user *r;
struct compat_sg_req_info *o = (struct compat_sg_req_info *)arg; struct compat_sg_req_info __user *o = (void __user *)arg;
r = compat_alloc_user_space(sizeof(sg_req_info_t)*SG_MAX_QUEUE); r = compat_alloc_user_space(sizeof(sg_req_info_t)*SG_MAX_QUEUE);
err = sys_ioctl(fd,cmd,(unsigned long)r); err = sys_ioctl(fd,cmd,(unsigned long)r);
if (err < 0) if (err < 0)
...@@ -2739,8 +2739,8 @@ static int do_ncp_setprivatedata(unsigned int fd, unsigned int cmd, unsigned lon ...@@ -2739,8 +2739,8 @@ static int do_ncp_setprivatedata(unsigned int fd, unsigned int cmd, unsigned lon
static int static int
lp_timeout_trans(unsigned int fd, unsigned int cmd, unsigned long arg) lp_timeout_trans(unsigned int fd, unsigned int cmd, unsigned long arg)
{ {
struct compat_timeval *tc = (struct compat_timeval *)arg; struct compat_timeval __user *tc = (struct compat_timeval __user *)arg;
struct timeval *tn = compat_alloc_user_space(sizeof(struct timeval)); struct timeval __user *tn = compat_alloc_user_space(sizeof(struct timeval));
struct timeval ts; struct timeval ts;
if (get_user(ts.tv_sec, &tc->tv_sec) || if (get_user(ts.tv_sec, &tc->tv_sec) ||
get_user(ts.tv_usec, &tc->tv_usec) || get_user(ts.tv_usec, &tc->tv_usec) ||
......
...@@ -56,38 +56,38 @@ ...@@ -56,38 +56,38 @@
* variations of functions: non-prefixed ones that preserve the value * variations of functions: non-prefixed ones that preserve the value
* and prefixed ones that preserve byte addresses. The latters are * and prefixed ones that preserve byte addresses. The latters are
* typically used for moving raw data between a peripheral and memory (cf. * typically used for moving raw data between a peripheral and memory (cf.
* string I/O functions), hence the "mem_" prefix. * string I/O functions), hence the "__mem_" prefix.
*/ */
#if defined(CONFIG_SWAP_IO_SPACE) #if defined(CONFIG_SWAP_IO_SPACE)
# define ioswabb(x) (x) # define ioswabb(x) (x)
# define mem_ioswabb(x) (x) # define __mem_ioswabb(x) (x)
# ifdef CONFIG_SGI_IP22 # ifdef CONFIG_SGI_IP22
/* /*
* IP22 seems braindead enough to swap 16bits values in hardware, but * IP22 seems braindead enough to swap 16bits values in hardware, but
* not 32bits. Go figure... Can't tell without documentation. * not 32bits. Go figure... Can't tell without documentation.
*/ */
# define ioswabw(x) (x) # define ioswabw(x) (x)
# define mem_ioswabw(x) le16_to_cpu(x) # define __mem_ioswabw(x) le16_to_cpu(x)
# else # else
# define ioswabw(x) le16_to_cpu(x) # define ioswabw(x) le16_to_cpu(x)
# define mem_ioswabw(x) (x) # define __mem_ioswabw(x) (x)
# endif # endif
# define ioswabl(x) le32_to_cpu(x) # define ioswabl(x) le32_to_cpu(x)
# define mem_ioswabl(x) (x) # define __mem_ioswabl(x) (x)
# define ioswabq(x) le64_to_cpu(x) # define ioswabq(x) le64_to_cpu(x)
# define mem_ioswabq(x) (x) # define __mem_ioswabq(x) (x)
#else #else
# define ioswabb(x) (x) # define ioswabb(x) (x)
# define mem_ioswabb(x) (x) # define __mem_ioswabb(x) (x)
# define ioswabw(x) (x) # define ioswabw(x) (x)
# define mem_ioswabw(x) cpu_to_le16(x) # define __mem_ioswabw(x) cpu_to_le16(x)
# define ioswabl(x) (x) # define ioswabl(x) (x)
# define mem_ioswabl(x) cpu_to_le32(x) # define __mem_ioswabl(x) cpu_to_le32(x)
# define ioswabq(x) (x) # define ioswabq(x) (x)
# define mem_ioswabq(x) cpu_to_le32(x) # define __mem_ioswabq(x) cpu_to_le32(x)
#endif #endif
...@@ -417,7 +417,7 @@ __BUILD_MEMORY_SINGLE(bus, bwlq, type, 1) ...@@ -417,7 +417,7 @@ __BUILD_MEMORY_SINGLE(bus, bwlq, type, 1)
\ \
__BUILD_MEMORY_PFX(__raw_, bwlq, type) \ __BUILD_MEMORY_PFX(__raw_, bwlq, type) \
__BUILD_MEMORY_PFX(, bwlq, type) \ __BUILD_MEMORY_PFX(, bwlq, type) \
__BUILD_MEMORY_PFX(mem_, bwlq, type) \ __BUILD_MEMORY_PFX(__mem_, bwlq, type) \
BUILDIO_MEM(b, u8) BUILDIO_MEM(b, u8)
BUILDIO_MEM(w, u16) BUILDIO_MEM(w, u16)
...@@ -430,7 +430,7 @@ BUILDIO_MEM(q, u64) ...@@ -430,7 +430,7 @@ BUILDIO_MEM(q, u64)
#define BUILDIO_IOPORT(bwlq, type) \ #define BUILDIO_IOPORT(bwlq, type) \
__BUILD_IOPORT_PFX(, bwlq, type) \ __BUILD_IOPORT_PFX(, bwlq, type) \
__BUILD_IOPORT_PFX(mem_, bwlq, type) __BUILD_IOPORT_PFX(__mem_, bwlq, type)
BUILDIO_IOPORT(b, u8) BUILDIO_IOPORT(b, u8)
BUILDIO_IOPORT(w, u16) BUILDIO_IOPORT(w, u16)
...@@ -464,7 +464,7 @@ static inline void writes##bwlq(volatile void __iomem *mem, \ ...@@ -464,7 +464,7 @@ static inline void writes##bwlq(volatile void __iomem *mem, \
const volatile type *__addr = addr; \ const volatile type *__addr = addr; \
\ \
while (count--) { \ while (count--) { \
mem_write##bwlq(*__addr, mem); \ __mem_write##bwlq(*__addr, mem); \
__addr++; \ __addr++; \
} \ } \
} \ } \
...@@ -475,7 +475,7 @@ static inline void reads##bwlq(volatile void __iomem *mem, void *addr, \ ...@@ -475,7 +475,7 @@ static inline void reads##bwlq(volatile void __iomem *mem, void *addr, \
volatile type *__addr = addr; \ volatile type *__addr = addr; \
\ \
while (count--) { \ while (count--) { \
*__addr = mem_read##bwlq(mem); \ *__addr = __mem_read##bwlq(mem); \
__addr++; \ __addr++; \
} \ } \
} }
...@@ -488,7 +488,7 @@ static inline void outs##bwlq(unsigned long port, const void *addr, \ ...@@ -488,7 +488,7 @@ static inline void outs##bwlq(unsigned long port, const void *addr, \
const volatile type *__addr = addr; \ const volatile type *__addr = addr; \
\ \
while (count--) { \ while (count--) { \
mem_out##bwlq(*__addr, port); \ __mem_out##bwlq(*__addr, port); \
__addr++; \ __addr++; \
} \ } \
} \ } \
...@@ -499,7 +499,7 @@ static inline void ins##bwlq(unsigned long port, void *addr, \ ...@@ -499,7 +499,7 @@ static inline void ins##bwlq(unsigned long port, void *addr, \
volatile type *__addr = addr; \ volatile type *__addr = addr; \
\ \
while (count--) { \ while (count--) { \
*__addr = mem_in##bwlq(port); \ *__addr = __mem_in##bwlq(port); \
__addr++; \ __addr++; \
} \ } \
} }
......
...@@ -126,6 +126,11 @@ static inline void __user *compat_ptr(compat_uptr_t uptr) ...@@ -126,6 +126,11 @@ static inline void __user *compat_ptr(compat_uptr_t uptr)
return (void __user *)(unsigned long)uptr; return (void __user *)(unsigned long)uptr;
} }
static inline compat_uptr_t ptr_to_compat(void __user *uptr)
{
return (u32)(unsigned long)uptr;
}
static inline void __user *compat_alloc_user_space(long len) static inline void __user *compat_alloc_user_space(long len)
{ {
struct pt_regs *regs = current->thread.regs; struct pt_regs *regs = current->thread.regs;
......
...@@ -37,7 +37,7 @@ struct thread_info { ...@@ -37,7 +37,7 @@ struct thread_info {
int preempt_count; /* 0 => preemptable, int preempt_count; /* 0 => preemptable,
<0 => BUG */ <0 => BUG */
struct restart_block restart_block; struct restart_block restart_block;
void *nvgprs_frame; void __user *nvgprs_frame;
/* low level flags - has atomic operations done on it */ /* low level flags - has atomic operations done on it */
unsigned long flags ____cacheline_aligned_in_smp; unsigned long flags ____cacheline_aligned_in_smp;
}; };
......
...@@ -61,7 +61,7 @@ ...@@ -61,7 +61,7 @@
#define segment_eq(a,b) ((a).ar4 == (b).ar4) #define segment_eq(a,b) ((a).ar4 == (b).ar4)
static inline int __access_ok(const void *addr, unsigned long size) static inline int __access_ok(const void __user *addr, unsigned long size)
{ {
return 1; return 1;
} }
...@@ -208,25 +208,25 @@ extern int __put_user_bad(void) __attribute__((noreturn)); ...@@ -208,25 +208,25 @@ extern int __put_user_bad(void) __attribute__((noreturn));
case 1: { \ case 1: { \
unsigned char __x; \ unsigned char __x; \
__get_user_asm(__x, ptr, __gu_err); \ __get_user_asm(__x, ptr, __gu_err); \
(x) = *(__typeof__(*(ptr)) *) &__x; \ (x) = *(__force __typeof__(*(ptr)) *) &__x; \
break; \ break; \
}; \ }; \
case 2: { \ case 2: { \
unsigned short __x; \ unsigned short __x; \
__get_user_asm(__x, ptr, __gu_err); \ __get_user_asm(__x, ptr, __gu_err); \
(x) = *(__typeof__(*(ptr)) *) &__x; \ (x) = *(__force __typeof__(*(ptr)) *) &__x; \
break; \ break; \
}; \ }; \
case 4: { \ case 4: { \
unsigned int __x; \ unsigned int __x; \
__get_user_asm(__x, ptr, __gu_err); \ __get_user_asm(__x, ptr, __gu_err); \
(x) = *(__typeof__(*(ptr)) *) &__x; \ (x) = *(__force __typeof__(*(ptr)) *) &__x; \
break; \ break; \
}; \ }; \
case 8: { \ case 8: { \
unsigned long long __x; \ unsigned long long __x; \
__get_user_asm(__x, ptr, __gu_err); \ __get_user_asm(__x, ptr, __gu_err); \
(x) = *(__typeof__(*(ptr)) *) &__x; \ (x) = *(__force __typeof__(*(ptr)) *) &__x; \
break; \ break; \
}; \ }; \
default: \ default: \
......
...@@ -27,7 +27,7 @@ struct ioc3_driver_data { ...@@ -27,7 +27,7 @@ struct ioc3_driver_data {
int id; /* IOC3 sequence number */ int id; /* IOC3 sequence number */
/* PCI mapping */ /* PCI mapping */
unsigned long pma; /* physical address */ unsigned long pma; /* physical address */
struct __iomem ioc3 *vma; /* pointer to registers */ struct ioc3 __iomem *vma; /* pointer to registers */
struct pci_dev *pdev; /* PCI device */ struct pci_dev *pdev; /* PCI device */
/* IRQ stuff */ /* IRQ stuff */
int dual_irq; /* set if separate IRQs are used */ int dual_irq; /* set if separate IRQs are used */
......
...@@ -549,7 +549,7 @@ struct v4l2_framebuffer ...@@ -549,7 +549,7 @@ struct v4l2_framebuffer
struct v4l2_clip struct v4l2_clip
{ {
struct v4l2_rect c; struct v4l2_rect c;
struct v4l2_clip *next; struct v4l2_clip __user *next;
}; };
struct v4l2_window struct v4l2_window
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册