Commit bbb644a2 authored by David S. Miller's avatar David S. Miller Committed by David S. Miller

Merge davem@nuts.davemloft.net:/disk1/BK/sparc-2.6

into kernel.bkbits.net:/home/davem/sparc-2.6
parents c0f100c2 e1900a19
...@@ -348,7 +348,7 @@ do_translation_fault(unsigned long addr, unsigned int fsr, ...@@ -348,7 +348,7 @@ do_translation_fault(unsigned long addr, unsigned int fsr,
if (pmd_none(*pmd_k)) if (pmd_none(*pmd_k))
goto bad_area; goto bad_area;
set_pmd(pmd, *pmd_k); copy_pmd(pmd, pmd_k);
return 0; return 0;
bad_area: bad_area:
......
...@@ -40,7 +40,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, ...@@ -40,7 +40,7 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr,
*/ */
cache_type = read_cpuid(CPUID_CACHETYPE); cache_type = read_cpuid(CPUID_CACHETYPE);
if (cache_type != read_cpuid(CPUID_ID)) { if (cache_type != read_cpuid(CPUID_ID)) {
aliasing = (cache_type | cache_type >> 12) & (1 << 9); aliasing = (cache_type | cache_type >> 12) & (1 << 11);
if (aliasing) if (aliasing)
do_align = filp || flags & MAP_SHARED; do_align = filp || flags & MAP_SHARED;
} }
......
...@@ -797,7 +797,7 @@ static int ds_release(struct inode *inode, struct file *file) ...@@ -797,7 +797,7 @@ static int ds_release(struct inode *inode, struct file *file)
/*====================================================================*/ /*====================================================================*/
static ssize_t ds_read(struct file *file, char *buf, static ssize_t ds_read(struct file *file, char __user *buf,
size_t count, loff_t *ppos) size_t count, loff_t *ppos)
{ {
struct pcmcia_bus_socket *s; struct pcmcia_bus_socket *s;
...@@ -819,14 +819,14 @@ static ssize_t ds_read(struct file *file, char *buf, ...@@ -819,14 +819,14 @@ static ssize_t ds_read(struct file *file, char *buf,
ret = wait_event_interruptible(s->queue, !queue_empty(user)); ret = wait_event_interruptible(s->queue, !queue_empty(user));
if (ret == 0) if (ret == 0)
ret = put_user(get_queued_event(user), (int *)buf) ? -EFAULT : 4; ret = put_user(get_queued_event(user), (int __user *)buf) ? -EFAULT : 4;
return ret; return ret;
} /* ds_read */ } /* ds_read */
/*====================================================================*/ /*====================================================================*/
static ssize_t ds_write(struct file *file, const char *buf, static ssize_t ds_write(struct file *file, const char __user *buf,
size_t count, loff_t *ppos) size_t count, loff_t *ppos)
{ {
struct pcmcia_bus_socket *s; struct pcmcia_bus_socket *s;
...@@ -849,7 +849,7 @@ static ssize_t ds_write(struct file *file, const char *buf, ...@@ -849,7 +849,7 @@ static ssize_t ds_write(struct file *file, const char *buf,
if (s->req_pending) { if (s->req_pending) {
s->req_pending--; s->req_pending--;
get_user(s->req_result, (int *)buf); get_user(s->req_result, (int __user *)buf);
if ((s->req_result != 0) || (s->req_pending == 0)) if ((s->req_result != 0) || (s->req_pending == 0))
wake_up_interruptible(&s->request); wake_up_interruptible(&s->request);
} else } else
...@@ -888,6 +888,7 @@ static int ds_ioctl(struct inode * inode, struct file * file, ...@@ -888,6 +888,7 @@ static int ds_ioctl(struct inode * inode, struct file * file,
u_int cmd, u_long arg) u_int cmd, u_long arg)
{ {
struct pcmcia_bus_socket *s; struct pcmcia_bus_socket *s;
void __user *uarg = (char __user *)arg;
u_int size; u_int size;
int ret, err; int ret, err;
ds_ioctl_arg_t buf; ds_ioctl_arg_t buf;
...@@ -911,14 +912,14 @@ static int ds_ioctl(struct inode * inode, struct file * file, ...@@ -911,14 +912,14 @@ static int ds_ioctl(struct inode * inode, struct file * file,
return -EPERM; return -EPERM;
if (cmd & IOC_IN) { if (cmd & IOC_IN) {
err = verify_area(VERIFY_READ, (char *)arg, size); err = verify_area(VERIFY_READ, uarg, size);
if (err) { if (err) {
ds_dbg(3, "ds_ioctl(): verify_read = %d\n", err); ds_dbg(3, "ds_ioctl(): verify_read = %d\n", err);
return err; return err;
} }
} }
if (cmd & IOC_OUT) { if (cmd & IOC_OUT) {
err = verify_area(VERIFY_WRITE, (char *)arg, size); err = verify_area(VERIFY_WRITE, uarg, size);
if (err) { if (err) {
ds_dbg(3, "ds_ioctl(): verify_write = %d\n", err); ds_dbg(3, "ds_ioctl(): verify_write = %d\n", err);
return err; return err;
...@@ -927,7 +928,7 @@ static int ds_ioctl(struct inode * inode, struct file * file, ...@@ -927,7 +928,7 @@ static int ds_ioctl(struct inode * inode, struct file * file,
err = ret = 0; err = ret = 0;
if (cmd & IOC_IN) __copy_from_user((char *)&buf, (char *)arg, size); if (cmd & IOC_IN) __copy_from_user((char *)&buf, uarg, size);
switch (cmd) { switch (cmd) {
case DS_ADJUST_RESOURCE_INFO: case DS_ADJUST_RESOURCE_INFO:
...@@ -1042,7 +1043,7 @@ static int ds_ioctl(struct inode * inode, struct file * file, ...@@ -1042,7 +1043,7 @@ static int ds_ioctl(struct inode * inode, struct file * file,
} }
} }
if (cmd & IOC_OUT) __copy_to_user((char *)arg, (char *)&buf, size); if (cmd & IOC_OUT) __copy_to_user(uarg, (char *)&buf, size);
return err; return err;
} /* ds_ioctl */ } /* ds_ioctl */
......
...@@ -312,6 +312,13 @@ PTE_BIT_FUNC(mkyoung, |= L_PTE_YOUNG); ...@@ -312,6 +312,13 @@ PTE_BIT_FUNC(mkyoung, |= L_PTE_YOUNG);
flush_pmd_entry(pmdp); \ flush_pmd_entry(pmdp); \
} while (0) } while (0)
#define copy_pmd(pmdpd,pmdps) \
do { \
pmdpd[0] = pmdps[0]; \
pmdpd[1] = pmdps[1]; \
flush_pmd_entry(pmdpd); \
} while (0)
#define pmd_clear(pmdp) \ #define pmd_clear(pmdp) \
do { \ do { \
pmdp[0] = __pmd(0); \ pmdp[0] = __pmd(0); \
......
...@@ -140,7 +140,7 @@ static __inline__ int _raw_write_trylock(rwlock_t *rw) ...@@ -140,7 +140,7 @@ static __inline__ int _raw_write_trylock(rwlock_t *rw)
unsigned int tmp; unsigned int tmp;
__asm__ __volatile__( __asm__ __volatile__(
"2: lwarx %0,0,%1\n\ # write_trylock\n\ "2: lwarx %0,0,%1 # write_trylock\n\
cmpwi 0,%0,0\n\ cmpwi 0,%0,0\n\
bne- 1f\n" bne- 1f\n"
PPC405_ERR77(0,%1) PPC405_ERR77(0,%1)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment