~ubuntu-branches/ubuntu/precise/linux-ti-omap4/precise

« back to all changes in this revision

Viewing changes to arch/s390/lib/uaccess_pt.c

  • Committer: Bazaar Package Importer
  • Author(s): Paolo Pisati
  • Date: 2011-06-29 15:23:51 UTC
  • mfrom: (26.1.1 natty-proposed)
  • Revision ID: james.westby@ubuntu.com-20110629152351-xs96tm303d95rpbk
Tags: 3.0.0-1200.2
* Rebased against 3.0.0-6.7
* BSP from TI based on 3.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
302
302
                     : "0" (-EFAULT), "d" (oparg), "a" (uaddr),         \
303
303
                       "m" (*uaddr) : "cc" );
304
304
 
305
 
static int __futex_atomic_op_pt(int op, int __user *uaddr, int oparg, int *old)
 
305
static int __futex_atomic_op_pt(int op, u32 __user *uaddr, int oparg, int *old)
306
306
{
307
307
        int oldval = 0, newval, ret;
308
308
 
335
335
        return ret;
336
336
}
337
337
 
338
 
int futex_atomic_op_pt(int op, int __user *uaddr, int oparg, int *old)
 
338
int futex_atomic_op_pt(int op, u32 __user *uaddr, int oparg, int *old)
339
339
{
340
340
        int ret;
341
341
 
354
354
        return ret;
355
355
}
356
356
 
357
 
static int __futex_atomic_cmpxchg_pt(int __user *uaddr, int oldval, int newval)
 
357
static int __futex_atomic_cmpxchg_pt(u32 *uval, u32 __user *uaddr,
 
358
                                     u32 oldval, u32 newval)
358
359
{
359
360
        int ret;
360
361
 
361
362
        asm volatile("0: cs   %1,%4,0(%5)\n"
362
 
                     "1: lr   %0,%1\n"
 
363
                     "1: la   %0,0\n"
363
364
                     "2:\n"
364
365
                     EX_TABLE(0b,2b) EX_TABLE(1b,2b)
365
366
                     : "=d" (ret), "+d" (oldval), "=m" (*uaddr)
366
367
                     : "0" (-EFAULT), "d" (newval), "a" (uaddr), "m" (*uaddr)
367
368
                     : "cc", "memory" );
 
369
        *uval = oldval;
368
370
        return ret;
369
371
}
370
372
 
371
 
int futex_atomic_cmpxchg_pt(int __user *uaddr, int oldval, int newval)
 
373
int futex_atomic_cmpxchg_pt(u32 *uval, u32 __user *uaddr,
 
374
                            u32 oldval, u32 newval)
372
375
{
373
376
        int ret;
374
377
 
375
378
        if (segment_eq(get_fs(), KERNEL_DS))
376
 
                return __futex_atomic_cmpxchg_pt(uaddr, oldval, newval);
 
379
                return __futex_atomic_cmpxchg_pt(uval, uaddr, oldval, newval);
377
380
        spin_lock(&current->mm->page_table_lock);
378
381
        uaddr = (int __user *) __dat_user_addr((unsigned long) uaddr);
379
382
        if (!uaddr) {
382
385
        }
383
386
        get_page(virt_to_page(uaddr));
384
387
        spin_unlock(&current->mm->page_table_lock);
385
 
        ret = __futex_atomic_cmpxchg_pt(uaddr, oldval, newval);
 
388
        ret = __futex_atomic_cmpxchg_pt(uval, uaddr, oldval, newval);
386
389
        put_page(virt_to_page(uaddr));
387
390
        return ret;
388
391
}