[Bluetooth] Fix reference count when connection lookup fails
[pandora-kernel.git] / drivers / video / sbuslib.c
index 646c43f..34ef859 100644 (file)
@@ -46,6 +46,9 @@ int sbusfb_mmap_helper(struct sbus_mmap_map *map,
        unsigned long off;
        int i;
                                         
+       if (!(vma->vm_flags & (VM_SHARED | VM_MAYSHARE)))
+               return -EINVAL;
+
        size = vma->vm_end - vma->vm_start;
        if (vma->vm_pgoff > (~0UL >> PAGE_SHIFT))
                return -EINVAL;
@@ -55,6 +58,8 @@ int sbusfb_mmap_helper(struct sbus_mmap_map *map,
        /* To stop the swapper from even considering these pages */
        vma->vm_flags |= (VM_IO | VM_RESERVED);
        
+       vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
+
        /* Each page, see which map applies */
        for (page = 0; page < size; ){
                map_size = 0;
@@ -196,8 +201,7 @@ struct  fbcmap32 {
 #define FBIOPUTCMAP32  _IOW('F', 3, struct fbcmap32)
 #define FBIOGETCMAP32  _IOW('F', 4, struct fbcmap32)
 
-static int fbiogetputcmap(struct file *file, struct fb_info *info,
-               unsigned int cmd, unsigned long arg)
+static int fbiogetputcmap(struct fb_info *info, unsigned int cmd, unsigned long arg)
 {
        struct fbcmap32 __user *argp = (void __user *)arg;
        struct fbcmap __user *p = compat_alloc_user_space(sizeof(*p));
@@ -213,10 +217,10 @@ static int fbiogetputcmap(struct file *file, struct fb_info *info,
        ret |= put_user(compat_ptr(addr), &p->blue);
        if (ret)
                return -EFAULT;
-       return info->fbops->fb_ioctl(file->f_dentry->d_inode, file,
+       return info->fbops->fb_ioctl(info,
                        (cmd == FBIOPUTCMAP32) ?
                        FBIOPUTCMAP_SPARC : FBIOGETCMAP_SPARC,
-                       (unsigned long)p, info);
+                       (unsigned long)p);
 }
 
 struct fbcursor32 {
@@ -233,8 +237,7 @@ struct fbcursor32 {
 #define FBIOSCURSOR32  _IOW('F', 24, struct fbcursor32)
 #define FBIOGCURSOR32  _IOW('F', 25, struct fbcursor32)
 
-static int fbiogscursor(struct file *file, struct fb_info *info,
-               unsigned long arg)
+static int fbiogscursor(struct fb_info *info, unsigned long arg)
 {
        struct fbcursor __user *p = compat_alloc_user_space(sizeof(*p));
        struct fbcursor32 __user *argp =  (void __user *)arg;
@@ -257,12 +260,10 @@ static int fbiogscursor(struct file *file, struct fb_info *info,
        ret |= put_user(compat_ptr(addr), &p->image);
        if (ret)
                return -EFAULT;
-       return info->fbops->fb_ioctl(file->f_dentry->d_inode, file,
-                       FBIOSCURSOR, (unsigned long)p, info);
+       return info->fbops->fb_ioctl(info, FBIOSCURSOR, (unsigned long)p);
 }
 
-long sbusfb_compat_ioctl(struct file *file, unsigned int cmd,
-               unsigned long arg, struct fb_info *info)
+int sbusfb_compat_ioctl(struct fb_info *info, unsigned int cmd, unsigned long arg)
 {
        switch (cmd) {
        case FBIOGTYPE:
@@ -275,14 +276,13 @@ long sbusfb_compat_ioctl(struct file *file, unsigned int cmd,
        case FBIOSCURPOS:
        case FBIOGCURPOS:
        case FBIOGCURMAX:
-               return info->fbops->fb_ioctl(file->f_dentry->d_inode,
-                               file, cmd, arg, info);
+               return info->fbops->fb_ioctl(info, cmd, arg);
        case FBIOPUTCMAP32:
-               return fbiogetputcmap(file, info, cmd, arg);
+               return fbiogetputcmap(info, cmd, arg);
        case FBIOGETCMAP32:
-               return fbiogetputcmap(file, info, cmd, arg);
+               return fbiogetputcmap(info, cmd, arg);
        case FBIOSCURSOR32:
-               return fbiogscursor(file, info, arg);
+               return fbiogscursor(info, arg);
        default:
                return -ENOIOCTLCMD;
        }