diff options
| -rw-r--r-- | drivers/gpu/drm/drm_drv.c | 13 | ||||
| -rw-r--r-- | drivers/gpu/drm/drm_ioc32.c | 89 | ||||
| -rw-r--r-- | drivers/gpu/drm/i810/i810_dma.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/i810/i810_drv.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/i830/i830_dma.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/i830/i830_drv.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_drv.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/i915/i915_ioc32.c | 23 | ||||
| -rw-r--r-- | drivers/gpu/drm/mga/mga_drv.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/mga/mga_ioc32.c | 13 | ||||
| -rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_drv.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_ioc32.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/r128/r128_drv.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/r128/r128_ioc32.c | 16 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_drv.c | 4 | ||||
| -rw-r--r-- | drivers/gpu/drm/radeon/radeon_ioc32.c | 38 | ||||
| -rw-r--r-- | drivers/gpu/drm/savage/savage_drv.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/sis/sis_drv.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/tdfx/tdfx_drv.c | 2 | ||||
| -rw-r--r-- | drivers/gpu/drm/via/via_drv.c | 2 | ||||
| -rw-r--r-- | include/drm/drmP.h | 5 |
21 files changed, 89 insertions, 140 deletions
diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c index ff2f1042cb44..766c46875a20 100644 --- a/drivers/gpu/drm/drm_drv.c +++ b/drivers/gpu/drm/drm_drv.c | |||
| @@ -434,11 +434,11 @@ static int drm_version(struct drm_device *dev, void *data, | |||
| 434 | * Looks up the ioctl function in the ::ioctls table, checking for root | 434 | * Looks up the ioctl function in the ::ioctls table, checking for root |
| 435 | * previleges if so required, and dispatches to the respective function. | 435 | * previleges if so required, and dispatches to the respective function. |
| 436 | */ | 436 | */ |
| 437 | int drm_ioctl(struct inode *inode, struct file *filp, | 437 | long drm_ioctl(struct file *filp, |
| 438 | unsigned int cmd, unsigned long arg) | 438 | unsigned int cmd, unsigned long arg) |
| 439 | { | 439 | { |
| 440 | struct drm_file *file_priv = filp->private_data; | 440 | struct drm_file *file_priv = filp->private_data; |
| 441 | struct drm_device *dev = file_priv->minor->dev; | 441 | struct drm_device *dev; |
| 442 | struct drm_ioctl_desc *ioctl; | 442 | struct drm_ioctl_desc *ioctl; |
| 443 | drm_ioctl_t *func; | 443 | drm_ioctl_t *func; |
| 444 | unsigned int nr = DRM_IOCTL_NR(cmd); | 444 | unsigned int nr = DRM_IOCTL_NR(cmd); |
| @@ -446,6 +446,7 @@ int drm_ioctl(struct inode *inode, struct file *filp, | |||
| 446 | char stack_kdata[128]; | 446 | char stack_kdata[128]; |
| 447 | char *kdata = NULL; | 447 | char *kdata = NULL; |
| 448 | 448 | ||
| 449 | dev = file_priv->minor->dev; | ||
| 449 | atomic_inc(&dev->ioctl_count); | 450 | atomic_inc(&dev->ioctl_count); |
| 450 | atomic_inc(&dev->counts[_DRM_STAT_IOCTLS]); | 451 | atomic_inc(&dev->counts[_DRM_STAT_IOCTLS]); |
| 451 | ++file_priv->ioctl_count; | 452 | ++file_priv->ioctl_count; |
| @@ -501,7 +502,13 @@ int drm_ioctl(struct inode *inode, struct file *filp, | |||
| 501 | goto err_i1; | 502 | goto err_i1; |
| 502 | } | 503 | } |
| 503 | } | 504 | } |
| 504 | retcode = func(dev, kdata, file_priv); | 505 | if (ioctl->flags & DRM_UNLOCKED) |
| 506 | retcode = func(dev, kdata, file_priv); | ||
| 507 | else { | ||
| 508 | lock_kernel(); | ||
| 509 | retcode = func(dev, kdata, file_priv); | ||
| 510 | unlock_kernel(); | ||
| 511 | } | ||
| 505 | 512 | ||
| 506 | if (cmd & IOC_OUT) { | 513 | if (cmd & IOC_OUT) { |
| 507 | if (copy_to_user((void __user *)arg, kdata, | 514 | if (copy_to_user((void __user *)arg, kdata, |
diff --git a/drivers/gpu/drm/drm_ioc32.c b/drivers/gpu/drm/drm_ioc32.c index 282d9fdf9f4e..d61d185cf040 100644 --- a/drivers/gpu/drm/drm_ioc32.c +++ b/drivers/gpu/drm/drm_ioc32.c | |||
| @@ -104,7 +104,7 @@ static int compat_drm_version(struct file *file, unsigned int cmd, | |||
| 104 | &version->desc)) | 104 | &version->desc)) |
| 105 | return -EFAULT; | 105 | return -EFAULT; |
| 106 | 106 | ||
| 107 | err = drm_ioctl(file->f_path.dentry->d_inode, file, | 107 | err = drm_ioctl(file, |
| 108 | DRM_IOCTL_VERSION, (unsigned long)version); | 108 | DRM_IOCTL_VERSION, (unsigned long)version); |
| 109 | if (err) | 109 | if (err) |
| 110 | return err; | 110 | return err; |
| @@ -145,8 +145,7 @@ static int compat_drm_getunique(struct file *file, unsigned int cmd, | |||
| 145 | &u->unique)) | 145 | &u->unique)) |
| 146 | return -EFAULT; | 146 | return -EFAULT; |
| 147 | 147 | ||
| 148 | err = drm_ioctl(file->f_path.dentry->d_inode, file, | 148 | err = drm_ioctl(file, DRM_IOCTL_GET_UNIQUE, (unsigned long)u); |
| 149 | DRM_IOCTL_GET_UNIQUE, (unsigned long)u); | ||
| 150 | if (err) | 149 | if (err) |
| 151 | return err; | 150 | return err; |
| 152 | 151 | ||
| @@ -174,8 +173,7 @@ static int compat_drm_setunique(struct file *file, unsigned int cmd, | |||
| 174 | &u->unique)) | 173 | &u->unique)) |
| 175 | return -EFAULT; | 174 | return -EFAULT; |
| 176 | 175 | ||
| 177 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 176 | return drm_ioctl(file, DRM_IOCTL_SET_UNIQUE, (unsigned long)u); |
| 178 | DRM_IOCTL_SET_UNIQUE, (unsigned long)u); | ||
| 179 | } | 177 | } |
| 180 | 178 | ||
| 181 | typedef struct drm_map32 { | 179 | typedef struct drm_map32 { |
| @@ -205,8 +203,7 @@ static int compat_drm_getmap(struct file *file, unsigned int cmd, | |||
| 205 | if (__put_user(idx, &map->offset)) | 203 | if (__put_user(idx, &map->offset)) |
| 206 | return -EFAULT; | 204 | return -EFAULT; |
| 207 | 205 | ||
| 208 | err = drm_ioctl(file->f_path.dentry->d_inode, file, | 206 | err = drm_ioctl(file, DRM_IOCTL_GET_MAP, (unsigned long)map); |
| 209 | DRM_IOCTL_GET_MAP, (unsigned long)map); | ||
| 210 | if (err) | 207 | if (err) |
| 211 | return err; | 208 | return err; |
| 212 | 209 | ||
| @@ -246,8 +243,7 @@ static int compat_drm_addmap(struct file *file, unsigned int cmd, | |||
| 246 | || __put_user(m32.flags, &map->flags)) | 243 | || __put_user(m32.flags, &map->flags)) |
| 247 | return -EFAULT; | 244 | return -EFAULT; |
| 248 | 245 | ||
| 249 | err = drm_ioctl(file->f_path.dentry->d_inode, file, | 246 | err = drm_ioctl(file, DRM_IOCTL_ADD_MAP, (unsigned long)map); |
| 250 | DRM_IOCTL_ADD_MAP, (unsigned long)map); | ||
| 251 | if (err) | 247 | if (err) |
| 252 | return err; | 248 | return err; |
| 253 | 249 | ||
| @@ -284,8 +280,7 @@ static int compat_drm_rmmap(struct file *file, unsigned int cmd, | |||
| 284 | if (__put_user((void *)(unsigned long)handle, &map->handle)) | 280 | if (__put_user((void *)(unsigned long)handle, &map->handle)) |
| 285 | return -EFAULT; | 281 | return -EFAULT; |
| 286 | 282 | ||
| 287 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 283 | return drm_ioctl(file, DRM_IOCTL_RM_MAP, (unsigned long)map); |
| 288 | DRM_IOCTL_RM_MAP, (unsigned long)map); | ||
| 289 | } | 284 | } |
| 290 | 285 | ||
| 291 | typedef struct drm_client32 { | 286 | typedef struct drm_client32 { |
| @@ -314,8 +309,7 @@ static int compat_drm_getclient(struct file *file, unsigned int cmd, | |||
| 314 | if (__put_user(idx, &client->idx)) | 309 | if (__put_user(idx, &client->idx)) |
| 315 | return -EFAULT; | 310 | return -EFAULT; |
| 316 | 311 | ||
| 317 | err = drm_ioctl(file->f_path.dentry->d_inode, file, | 312 | err = drm_ioctl(file, DRM_IOCTL_GET_CLIENT, (unsigned long)client); |
| 318 | DRM_IOCTL_GET_CLIENT, (unsigned long)client); | ||
| 319 | if (err) | 313 | if (err) |
| 320 | return err; | 314 | return err; |
| 321 | 315 | ||
| @@ -351,8 +345,7 @@ static int compat_drm_getstats(struct file *file, unsigned int cmd, | |||
| 351 | if (!access_ok(VERIFY_WRITE, stats, sizeof(*stats))) | 345 | if (!access_ok(VERIFY_WRITE, stats, sizeof(*stats))) |
| 352 | return -EFAULT; | 346 | return -EFAULT; |
| 353 | 347 | ||
| 354 | err = drm_ioctl(file->f_path.dentry->d_inode, file, | 348 | err = drm_ioctl(file, DRM_IOCTL_GET_STATS, (unsigned long)stats); |
| 355 | DRM_IOCTL_GET_STATS, (unsigned long)stats); | ||
| 356 | if (err) | 349 | if (err) |
| 357 | return err; | 350 | return err; |
| 358 | 351 | ||
| @@ -395,8 +388,7 @@ static int compat_drm_addbufs(struct file *file, unsigned int cmd, | |||
| 395 | || __put_user(agp_start, &buf->agp_start)) | 388 | || __put_user(agp_start, &buf->agp_start)) |
| 396 | return -EFAULT; | 389 | return -EFAULT; |
| 397 | 390 | ||
| 398 | err = drm_ioctl(file->f_path.dentry->d_inode, file, | 391 | err = drm_ioctl(file, DRM_IOCTL_ADD_BUFS, (unsigned long)buf); |
| 399 | DRM_IOCTL_ADD_BUFS, (unsigned long)buf); | ||
| 400 | if (err) | 392 | if (err) |
| 401 | return err; | 393 | return err; |
| 402 | 394 | ||
| @@ -427,8 +419,7 @@ static int compat_drm_markbufs(struct file *file, unsigned int cmd, | |||
| 427 | || __put_user(b32.high_mark, &buf->high_mark)) | 419 | || __put_user(b32.high_mark, &buf->high_mark)) |
| 428 | return -EFAULT; | 420 | return -EFAULT; |
| 429 | 421 | ||
| 430 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 422 | return drm_ioctl(file, DRM_IOCTL_MARK_BUFS, (unsigned long)buf); |
| 431 | DRM_IOCTL_MARK_BUFS, (unsigned long)buf); | ||
| 432 | } | 423 | } |
| 433 | 424 | ||
| 434 | typedef struct drm_buf_info32 { | 425 | typedef struct drm_buf_info32 { |
| @@ -469,8 +460,7 @@ static int compat_drm_infobufs(struct file *file, unsigned int cmd, | |||
| 469 | || __put_user(list, &request->list)) | 460 | || __put_user(list, &request->list)) |
| 470 | return -EFAULT; | 461 | return -EFAULT; |
| 471 | 462 | ||
| 472 | err = drm_ioctl(file->f_path.dentry->d_inode, file, | 463 | err = drm_ioctl(file, DRM_IOCTL_INFO_BUFS, (unsigned long)request); |
| 473 | DRM_IOCTL_INFO_BUFS, (unsigned long)request); | ||
| 474 | if (err) | 464 | if (err) |
| 475 | return err; | 465 | return err; |
| 476 | 466 | ||
| @@ -531,8 +521,7 @@ static int compat_drm_mapbufs(struct file *file, unsigned int cmd, | |||
| 531 | || __put_user(list, &request->list)) | 521 | || __put_user(list, &request->list)) |
| 532 | return -EFAULT; | 522 | return -EFAULT; |
| 533 | 523 | ||
| 534 | err = drm_ioctl(file->f_path.dentry->d_inode, file, | 524 | err = drm_ioctl(file, DRM_IOCTL_MAP_BUFS, (unsigned long)request); |
| 535 | DRM_IOCTL_MAP_BUFS, (unsigned long)request); | ||
| 536 | if (err) | 525 | if (err) |
| 537 | return err; | 526 | return err; |
| 538 | 527 | ||
| @@ -578,8 +567,7 @@ static int compat_drm_freebufs(struct file *file, unsigned int cmd, | |||
| 578 | &request->list)) | 567 | &request->list)) |
| 579 | return -EFAULT; | 568 | return -EFAULT; |
| 580 | 569 | ||
| 581 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 570 | return drm_ioctl(file, DRM_IOCTL_FREE_BUFS, (unsigned long)request); |
| 582 | DRM_IOCTL_FREE_BUFS, (unsigned long)request); | ||
| 583 | } | 571 | } |
| 584 | 572 | ||
| 585 | typedef struct drm_ctx_priv_map32 { | 573 | typedef struct drm_ctx_priv_map32 { |
| @@ -605,8 +593,7 @@ static int compat_drm_setsareactx(struct file *file, unsigned int cmd, | |||
| 605 | &request->handle)) | 593 | &request->handle)) |
| 606 | return -EFAULT; | 594 | return -EFAULT; |
| 607 | 595 | ||
| 608 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 596 | return drm_ioctl(file, DRM_IOCTL_SET_SAREA_CTX, (unsigned long)request); |
| 609 | DRM_IOCTL_SET_SAREA_CTX, (unsigned long)request); | ||
| 610 | } | 597 | } |
| 611 | 598 | ||
| 612 | static int compat_drm_getsareactx(struct file *file, unsigned int cmd, | 599 | static int compat_drm_getsareactx(struct file *file, unsigned int cmd, |
| @@ -628,8 +615,7 @@ static int compat_drm_getsareactx(struct file *file, unsigned int cmd, | |||
| 628 | if (__put_user(ctx_id, &request->ctx_id)) | 615 | if (__put_user(ctx_id, &request->ctx_id)) |
| 629 | return -EFAULT; | 616 | return -EFAULT; |
| 630 | 617 | ||
| 631 | err = drm_ioctl(file->f_path.dentry->d_inode, file, | 618 | err = drm_ioctl(file, DRM_IOCTL_GET_SAREA_CTX, (unsigned long)request); |
| 632 | DRM_IOCTL_GET_SAREA_CTX, (unsigned long)request); | ||
| 633 | if (err) | 619 | if (err) |
| 634 | return err; | 620 | return err; |
| 635 | 621 | ||
| @@ -664,8 +650,7 @@ static int compat_drm_resctx(struct file *file, unsigned int cmd, | |||
| 664 | &res->contexts)) | 650 | &res->contexts)) |
| 665 | return -EFAULT; | 651 | return -EFAULT; |
| 666 | 652 | ||
| 667 | err = drm_ioctl(file->f_path.dentry->d_inode, file, | 653 | err = drm_ioctl(file, DRM_IOCTL_RES_CTX, (unsigned long)res); |
| 668 | DRM_IOCTL_RES_CTX, (unsigned long)res); | ||
| 669 | if (err) | 654 | if (err) |
| 670 | return err; | 655 | return err; |
| 671 | 656 | ||
| @@ -718,8 +703,7 @@ static int compat_drm_dma(struct file *file, unsigned int cmd, | |||
| 718 | &d->request_sizes)) | 703 | &d->request_sizes)) |
| 719 | return -EFAULT; | 704 | return -EFAULT; |
| 720 | 705 | ||
| 721 | err = drm_ioctl(file->f_path.dentry->d_inode, file, | 706 | err = drm_ioctl(file, DRM_IOCTL_DMA, (unsigned long)d); |
| 722 | DRM_IOCTL_DMA, (unsigned long)d); | ||
| 723 | if (err) | 707 | if (err) |
| 724 | return err; | 708 | return err; |
| 725 | 709 | ||
| @@ -751,8 +735,7 @@ static int compat_drm_agp_enable(struct file *file, unsigned int cmd, | |||
| 751 | if (put_user(m32.mode, &mode->mode)) | 735 | if (put_user(m32.mode, &mode->mode)) |
| 752 | return -EFAULT; | 736 | return -EFAULT; |
| 753 | 737 | ||
| 754 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 738 | return drm_ioctl(file, DRM_IOCTL_AGP_ENABLE, (unsigned long)mode); |
| 755 | DRM_IOCTL_AGP_ENABLE, (unsigned long)mode); | ||
| 756 | } | 739 | } |
| 757 | 740 | ||
| 758 | typedef struct drm_agp_info32 { | 741 | typedef struct drm_agp_info32 { |
| @@ -781,8 +764,7 @@ static int compat_drm_agp_info(struct file *file, unsigned int cmd, | |||
| 781 | if (!access_ok(VERIFY_WRITE, info, sizeof(*info))) | 764 | if (!access_ok(VERIFY_WRITE, info, sizeof(*info))) |
| 782 | return -EFAULT; | 765 | return -EFAULT; |
| 783 | 766 | ||
| 784 | err = drm_ioctl(file->f_path.dentry->d_inode, file, | 767 | err = drm_ioctl(file, DRM_IOCTL_AGP_INFO, (unsigned long)info); |
| 785 | DRM_IOCTL_AGP_INFO, (unsigned long)info); | ||
| 786 | if (err) | 768 | if (err) |
| 787 | return err; | 769 | return err; |
| 788 | 770 | ||
| @@ -827,16 +809,14 @@ static int compat_drm_agp_alloc(struct file *file, unsigned int cmd, | |||
| 827 | || __put_user(req32.type, &request->type)) | 809 | || __put_user(req32.type, &request->type)) |
| 828 | return -EFAULT; | 810 | return -EFAULT; |
| 829 | 811 | ||
| 830 | err = drm_ioctl(file->f_path.dentry->d_inode, file, | 812 | err = drm_ioctl(file, DRM_IOCTL_AGP_ALLOC, (unsigned long)request); |
| 831 | DRM_IOCTL_AGP_ALLOC, (unsigned long)request); | ||
| 832 | if (err) | 813 | if (err) |
| 833 | return err; | 814 | return err; |
| 834 | 815 | ||
| 835 | if (__get_user(req32.handle, &request->handle) | 816 | if (__get_user(req32.handle, &request->handle) |
| 836 | || __get_user(req32.physical, &request->physical) | 817 | || __get_user(req32.physical, &request->physical) |
| 837 | || copy_to_user(argp, &req32, sizeof(req32))) { | 818 | || copy_to_user(argp, &req32, sizeof(req32))) { |
| 838 | drm_ioctl(file->f_path.dentry->d_inode, file, | 819 | drm_ioctl(file, DRM_IOCTL_AGP_FREE, (unsigned long)request); |
| 839 | DRM_IOCTL_AGP_FREE, (unsigned long)request); | ||
| 840 | return -EFAULT; | 820 | return -EFAULT; |
| 841 | } | 821 | } |
| 842 | 822 | ||
| @@ -856,8 +836,7 @@ static int compat_drm_agp_free(struct file *file, unsigned int cmd, | |||
| 856 | || __put_user(handle, &request->handle)) | 836 | || __put_user(handle, &request->handle)) |
| 857 | return -EFAULT; | 837 | return -EFAULT; |
| 858 | 838 | ||
| 859 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 839 | return drm_ioctl(file, DRM_IOCTL_AGP_FREE, (unsigned long)request); |
| 860 | DRM_IOCTL_AGP_FREE, (unsigned long)request); | ||
| 861 | } | 840 | } |
| 862 | 841 | ||
| 863 | typedef struct drm_agp_binding32 { | 842 | typedef struct drm_agp_binding32 { |
| @@ -881,8 +860,7 @@ static int compat_drm_agp_bind(struct file *file, unsigned int cmd, | |||
| 881 | || __put_user(req32.offset, &request->offset)) | 860 | || __put_user(req32.offset, &request->offset)) |
| 882 | return -EFAULT; | 861 | return -EFAULT; |
| 883 | 862 | ||
| 884 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 863 | return drm_ioctl(file, DRM_IOCTL_AGP_BIND, (unsigned long)request); |
| 885 | DRM_IOCTL_AGP_BIND, (unsigned long)request); | ||
| 886 | } | 864 | } |
| 887 | 865 | ||
| 888 | static int compat_drm_agp_unbind(struct file *file, unsigned int cmd, | 866 | static int compat_drm_agp_unbind(struct file *file, unsigned int cmd, |
| @@ -898,8 +876,7 @@ static int compat_drm_agp_unbind(struct file *file, unsigned int cmd, | |||
| 898 | || __put_user(handle, &request->handle)) | 876 | || __put_user(handle, &request->handle)) |
| 899 | return -EFAULT; | 877 | return -EFAULT; |
| 900 | 878 | ||
| 901 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 879 | return drm_ioctl(file, DRM_IOCTL_AGP_UNBIND, (unsigned long)request); |
| 902 | DRM_IOCTL_AGP_UNBIND, (unsigned long)request); | ||
| 903 | } | 880 | } |
| 904 | #endif /* __OS_HAS_AGP */ | 881 | #endif /* __OS_HAS_AGP */ |
| 905 | 882 | ||
| @@ -923,8 +900,7 @@ static int compat_drm_sg_alloc(struct file *file, unsigned int cmd, | |||
| 923 | || __put_user(x, &request->size)) | 900 | || __put_user(x, &request->size)) |
| 924 | return -EFAULT; | 901 | return -EFAULT; |
| 925 | 902 | ||
| 926 | err = drm_ioctl(file->f_path.dentry->d_inode, file, | 903 | err = drm_ioctl(file, DRM_IOCTL_SG_ALLOC, (unsigned long)request); |
| 927 | DRM_IOCTL_SG_ALLOC, (unsigned long)request); | ||
| 928 | if (err) | 904 | if (err) |
| 929 | return err; | 905 | return err; |
| 930 | 906 | ||
| @@ -950,8 +926,7 @@ static int compat_drm_sg_free(struct file *file, unsigned int cmd, | |||
| 950 | || __put_user(x << PAGE_SHIFT, &request->handle)) | 926 | || __put_user(x << PAGE_SHIFT, &request->handle)) |
| 951 | return -EFAULT; | 927 | return -EFAULT; |
| 952 | 928 | ||
| 953 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 929 | return drm_ioctl(file, DRM_IOCTL_SG_FREE, (unsigned long)request); |
| 954 | DRM_IOCTL_SG_FREE, (unsigned long)request); | ||
| 955 | } | 930 | } |
| 956 | 931 | ||
| 957 | #if defined(CONFIG_X86) || defined(CONFIG_IA64) | 932 | #if defined(CONFIG_X86) || defined(CONFIG_IA64) |
| @@ -981,8 +956,7 @@ static int compat_drm_update_draw(struct file *file, unsigned int cmd, | |||
| 981 | __put_user(update32.data, &request->data)) | 956 | __put_user(update32.data, &request->data)) |
| 982 | return -EFAULT; | 957 | return -EFAULT; |
| 983 | 958 | ||
| 984 | err = drm_ioctl(file->f_path.dentry->d_inode, file, | 959 | err = drm_ioctl(file, DRM_IOCTL_UPDATE_DRAW, (unsigned long)request); |
| 985 | DRM_IOCTL_UPDATE_DRAW, (unsigned long)request); | ||
| 986 | return err; | 960 | return err; |
| 987 | } | 961 | } |
| 988 | #endif | 962 | #endif |
| @@ -1023,8 +997,7 @@ static int compat_drm_wait_vblank(struct file *file, unsigned int cmd, | |||
| 1023 | || __put_user(req32.request.signal, &request->request.signal)) | 997 | || __put_user(req32.request.signal, &request->request.signal)) |
| 1024 | return -EFAULT; | 998 | return -EFAULT; |
| 1025 | 999 | ||
| 1026 | err = drm_ioctl(file->f_path.dentry->d_inode, file, | 1000 | err = drm_ioctl(file, DRM_IOCTL_WAIT_VBLANK, (unsigned long)request); |
| 1027 | DRM_IOCTL_WAIT_VBLANK, (unsigned long)request); | ||
| 1028 | if (err) | 1001 | if (err) |
| 1029 | return err; | 1002 | return err; |
| 1030 | 1003 | ||
| @@ -1094,16 +1067,14 @@ long drm_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | |||
| 1094 | * than always failing. | 1067 | * than always failing. |
| 1095 | */ | 1068 | */ |
| 1096 | if (nr >= ARRAY_SIZE(drm_compat_ioctls)) | 1069 | if (nr >= ARRAY_SIZE(drm_compat_ioctls)) |
| 1097 | return drm_ioctl(filp->f_dentry->d_inode, filp, cmd, arg); | 1070 | return drm_ioctl(filp, cmd, arg); |
| 1098 | 1071 | ||
| 1099 | fn = drm_compat_ioctls[nr]; | 1072 | fn = drm_compat_ioctls[nr]; |
| 1100 | 1073 | ||
| 1101 | lock_kernel(); /* XXX for now */ | ||
| 1102 | if (fn != NULL) | 1074 | if (fn != NULL) |
| 1103 | ret = (*fn) (filp, cmd, arg); | 1075 | ret = (*fn) (filp, cmd, arg); |
| 1104 | else | 1076 | else |
| 1105 | ret = drm_ioctl(filp->f_path.dentry->d_inode, filp, cmd, arg); | 1077 | ret = drm_ioctl(filp, cmd, arg); |
| 1106 | unlock_kernel(); | ||
| 1107 | 1078 | ||
| 1108 | return ret; | 1079 | return ret; |
| 1109 | } | 1080 | } |
diff --git a/drivers/gpu/drm/i810/i810_dma.c b/drivers/gpu/drm/i810/i810_dma.c index 7d1d88cdf2dc..de32d22a8c39 100644 --- a/drivers/gpu/drm/i810/i810_dma.c +++ b/drivers/gpu/drm/i810/i810_dma.c | |||
| @@ -115,7 +115,7 @@ static int i810_mmap_buffers(struct file *filp, struct vm_area_struct *vma) | |||
| 115 | static const struct file_operations i810_buffer_fops = { | 115 | static const struct file_operations i810_buffer_fops = { |
| 116 | .open = drm_open, | 116 | .open = drm_open, |
| 117 | .release = drm_release, | 117 | .release = drm_release, |
| 118 | .ioctl = drm_ioctl, | 118 | .unlocked_ioctl = drm_ioctl, |
| 119 | .mmap = i810_mmap_buffers, | 119 | .mmap = i810_mmap_buffers, |
| 120 | .fasync = drm_fasync, | 120 | .fasync = drm_fasync, |
| 121 | }; | 121 | }; |
diff --git a/drivers/gpu/drm/i810/i810_drv.c b/drivers/gpu/drm/i810/i810_drv.c index fabb9a817966..c1e02752e023 100644 --- a/drivers/gpu/drm/i810/i810_drv.c +++ b/drivers/gpu/drm/i810/i810_drv.c | |||
| @@ -59,7 +59,7 @@ static struct drm_driver driver = { | |||
| 59 | .owner = THIS_MODULE, | 59 | .owner = THIS_MODULE, |
| 60 | .open = drm_open, | 60 | .open = drm_open, |
| 61 | .release = drm_release, | 61 | .release = drm_release, |
| 62 | .ioctl = drm_ioctl, | 62 | .unlocked_ioctl = drm_ioctl, |
| 63 | .mmap = drm_mmap, | 63 | .mmap = drm_mmap, |
| 64 | .poll = drm_poll, | 64 | .poll = drm_poll, |
| 65 | .fasync = drm_fasync, | 65 | .fasync = drm_fasync, |
diff --git a/drivers/gpu/drm/i830/i830_dma.c b/drivers/gpu/drm/i830/i830_dma.c index 877bf6cb14a4..06bd732e6463 100644 --- a/drivers/gpu/drm/i830/i830_dma.c +++ b/drivers/gpu/drm/i830/i830_dma.c | |||
| @@ -117,7 +117,7 @@ static int i830_mmap_buffers(struct file *filp, struct vm_area_struct *vma) | |||
| 117 | static const struct file_operations i830_buffer_fops = { | 117 | static const struct file_operations i830_buffer_fops = { |
| 118 | .open = drm_open, | 118 | .open = drm_open, |
| 119 | .release = drm_release, | 119 | .release = drm_release, |
| 120 | .ioctl = drm_ioctl, | 120 | .unlocked_ioctl = drm_ioctl, |
| 121 | .mmap = i830_mmap_buffers, | 121 | .mmap = i830_mmap_buffers, |
| 122 | .fasync = drm_fasync, | 122 | .fasync = drm_fasync, |
| 123 | }; | 123 | }; |
diff --git a/drivers/gpu/drm/i830/i830_drv.c b/drivers/gpu/drm/i830/i830_drv.c index 389597e4a623..44f990bed8f4 100644 --- a/drivers/gpu/drm/i830/i830_drv.c +++ b/drivers/gpu/drm/i830/i830_drv.c | |||
| @@ -70,7 +70,7 @@ static struct drm_driver driver = { | |||
| 70 | .owner = THIS_MODULE, | 70 | .owner = THIS_MODULE, |
| 71 | .open = drm_open, | 71 | .open = drm_open, |
| 72 | .release = drm_release, | 72 | .release = drm_release, |
| 73 | .ioctl = drm_ioctl, | 73 | .unlocked_ioctl = drm_ioctl, |
| 74 | .mmap = drm_mmap, | 74 | .mmap = drm_mmap, |
| 75 | .poll = drm_poll, | 75 | .poll = drm_poll, |
| 76 | .fasync = drm_fasync, | 76 | .fasync = drm_fasync, |
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c index 2fa217862058..24286ca168fc 100644 --- a/drivers/gpu/drm/i915/i915_drv.c +++ b/drivers/gpu/drm/i915/i915_drv.c | |||
| @@ -329,7 +329,7 @@ static struct drm_driver driver = { | |||
| 329 | .owner = THIS_MODULE, | 329 | .owner = THIS_MODULE, |
| 330 | .open = drm_open, | 330 | .open = drm_open, |
| 331 | .release = drm_release, | 331 | .release = drm_release, |
| 332 | .ioctl = drm_ioctl, | 332 | .unlocked_ioctl = drm_ioctl, |
| 333 | .mmap = drm_gem_mmap, | 333 | .mmap = drm_gem_mmap, |
| 334 | .poll = drm_poll, | 334 | .poll = drm_poll, |
| 335 | .fasync = drm_fasync, | 335 | .fasync = drm_fasync, |
diff --git a/drivers/gpu/drm/i915/i915_ioc32.c b/drivers/gpu/drm/i915/i915_ioc32.c index 1fe68a251b75..13b028994b2b 100644 --- a/drivers/gpu/drm/i915/i915_ioc32.c +++ b/drivers/gpu/drm/i915/i915_ioc32.c | |||
| @@ -66,8 +66,7 @@ static int compat_i915_batchbuffer(struct file *file, unsigned int cmd, | |||
| 66 | &batchbuffer->cliprects)) | 66 | &batchbuffer->cliprects)) |
| 67 | return -EFAULT; | 67 | return -EFAULT; |
| 68 | 68 | ||
| 69 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 69 | return drm_ioctl(file, DRM_IOCTL_I915_BATCHBUFFER, |
| 70 | DRM_IOCTL_I915_BATCHBUFFER, | ||
| 71 | (unsigned long)batchbuffer); | 70 | (unsigned long)batchbuffer); |
| 72 | } | 71 | } |
| 73 | 72 | ||
| @@ -102,8 +101,8 @@ static int compat_i915_cmdbuffer(struct file *file, unsigned int cmd, | |||
| 102 | &cmdbuffer->cliprects)) | 101 | &cmdbuffer->cliprects)) |
| 103 | return -EFAULT; | 102 | return -EFAULT; |
| 104 | 103 | ||
| 105 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 104 | return drm_ioctl(file, DRM_IOCTL_I915_CMDBUFFER, |
| 106 | DRM_IOCTL_I915_CMDBUFFER, (unsigned long)cmdbuffer); | 105 | (unsigned long)cmdbuffer); |
| 107 | } | 106 | } |
| 108 | 107 | ||
| 109 | typedef struct drm_i915_irq_emit32 { | 108 | typedef struct drm_i915_irq_emit32 { |
| @@ -125,8 +124,8 @@ static int compat_i915_irq_emit(struct file *file, unsigned int cmd, | |||
| 125 | &request->irq_seq)) | 124 | &request->irq_seq)) |
| 126 | return -EFAULT; | 125 | return -EFAULT; |
| 127 | 126 | ||
| 128 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 127 | return drm_ioctl(file, DRM_IOCTL_I915_IRQ_EMIT, |
| 129 | DRM_IOCTL_I915_IRQ_EMIT, (unsigned long)request); | 128 | (unsigned long)request); |
| 130 | } | 129 | } |
| 131 | typedef struct drm_i915_getparam32 { | 130 | typedef struct drm_i915_getparam32 { |
| 132 | int param; | 131 | int param; |
| @@ -149,8 +148,8 @@ static int compat_i915_getparam(struct file *file, unsigned int cmd, | |||
| 149 | &request->value)) | 148 | &request->value)) |
| 150 | return -EFAULT; | 149 | return -EFAULT; |
| 151 | 150 | ||
| 152 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 151 | return drm_ioctl(file, DRM_IOCTL_I915_GETPARAM, |
| 153 | DRM_IOCTL_I915_GETPARAM, (unsigned long)request); | 152 | (unsigned long)request); |
| 154 | } | 153 | } |
| 155 | 154 | ||
| 156 | typedef struct drm_i915_mem_alloc32 { | 155 | typedef struct drm_i915_mem_alloc32 { |
| @@ -178,8 +177,8 @@ static int compat_i915_alloc(struct file *file, unsigned int cmd, | |||
| 178 | &request->region_offset)) | 177 | &request->region_offset)) |
| 179 | return -EFAULT; | 178 | return -EFAULT; |
| 180 | 179 | ||
| 181 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 180 | return drm_ioctl(file, DRM_IOCTL_I915_ALLOC, |
| 182 | DRM_IOCTL_I915_ALLOC, (unsigned long)request); | 181 | (unsigned long)request); |
| 183 | } | 182 | } |
| 184 | 183 | ||
| 185 | drm_ioctl_compat_t *i915_compat_ioctls[] = { | 184 | drm_ioctl_compat_t *i915_compat_ioctls[] = { |
| @@ -211,12 +210,10 @@ long i915_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | |||
| 211 | if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(i915_compat_ioctls)) | 210 | if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(i915_compat_ioctls)) |
| 212 | fn = i915_compat_ioctls[nr - DRM_COMMAND_BASE]; | 211 | fn = i915_compat_ioctls[nr - DRM_COMMAND_BASE]; |
| 213 | 212 | ||
| 214 | lock_kernel(); /* XXX for now */ | ||
| 215 | if (fn != NULL) | 213 | if (fn != NULL) |
| 216 | ret = (*fn) (filp, cmd, arg); | 214 | ret = (*fn) (filp, cmd, arg); |
| 217 | else | 215 | else |
| 218 | ret = drm_ioctl(filp->f_path.dentry->d_inode, filp, cmd, arg); | 216 | ret = drm_ioctl(filp, cmd, arg); |
| 219 | unlock_kernel(); | ||
| 220 | 217 | ||
| 221 | return ret; | 218 | return ret; |
| 222 | } | 219 | } |
diff --git a/drivers/gpu/drm/mga/mga_drv.c b/drivers/gpu/drm/mga/mga_drv.c index 97ee566ef749..ddfe16197b59 100644 --- a/drivers/gpu/drm/mga/mga_drv.c +++ b/drivers/gpu/drm/mga/mga_drv.c | |||
| @@ -68,7 +68,7 @@ static struct drm_driver driver = { | |||
| 68 | .owner = THIS_MODULE, | 68 | .owner = THIS_MODULE, |
| 69 | .open = drm_open, | 69 | .open = drm_open, |
| 70 | .release = drm_release, | 70 | .release = drm_release, |
| 71 | .ioctl = drm_ioctl, | 71 | .unlocked_ioctl = drm_ioctl, |
| 72 | .mmap = drm_mmap, | 72 | .mmap = drm_mmap, |
| 73 | .poll = drm_poll, | 73 | .poll = drm_poll, |
| 74 | .fasync = drm_fasync, | 74 | .fasync = drm_fasync, |
diff --git a/drivers/gpu/drm/mga/mga_ioc32.c b/drivers/gpu/drm/mga/mga_ioc32.c index 30d00478ddee..c1f877b7bac1 100644 --- a/drivers/gpu/drm/mga/mga_ioc32.c +++ b/drivers/gpu/drm/mga/mga_ioc32.c | |||
| @@ -100,8 +100,7 @@ static int compat_mga_init(struct file *file, unsigned int cmd, | |||
| 100 | if (err) | 100 | if (err) |
| 101 | return -EFAULT; | 101 | return -EFAULT; |
| 102 | 102 | ||
| 103 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 103 | return drm_ioctl(file, DRM_IOCTL_MGA_INIT, (unsigned long)init); |
| 104 | DRM_IOCTL_MGA_INIT, (unsigned long)init); | ||
| 105 | } | 104 | } |
| 106 | 105 | ||
| 107 | typedef struct drm_mga_getparam32 { | 106 | typedef struct drm_mga_getparam32 { |
| @@ -125,8 +124,7 @@ static int compat_mga_getparam(struct file *file, unsigned int cmd, | |||
| 125 | &getparam->value)) | 124 | &getparam->value)) |
| 126 | return -EFAULT; | 125 | return -EFAULT; |
| 127 | 126 | ||
| 128 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 127 | return drm_ioctl(file, DRM_IOCTL_MGA_GETPARAM, (unsigned long)getparam); |
| 129 | DRM_IOCTL_MGA_GETPARAM, (unsigned long)getparam); | ||
| 130 | } | 128 | } |
| 131 | 129 | ||
| 132 | typedef struct drm_mga_drm_bootstrap32 { | 130 | typedef struct drm_mga_drm_bootstrap32 { |
| @@ -166,8 +164,7 @@ static int compat_mga_dma_bootstrap(struct file *file, unsigned int cmd, | |||
| 166 | || __put_user(dma_bootstrap32.agp_size, &dma_bootstrap->agp_size)) | 164 | || __put_user(dma_bootstrap32.agp_size, &dma_bootstrap->agp_size)) |
| 167 | return -EFAULT; | 165 | return -EFAULT; |
| 168 | 166 | ||
| 169 | err = drm_ioctl(file->f_path.dentry->d_inode, file, | 167 | err = drm_ioctl(file, DRM_IOCTL_MGA_DMA_BOOTSTRAP, |
| 170 | DRM_IOCTL_MGA_DMA_BOOTSTRAP, | ||
| 171 | (unsigned long)dma_bootstrap); | 168 | (unsigned long)dma_bootstrap); |
| 172 | if (err) | 169 | if (err) |
| 173 | return err; | 170 | return err; |
| @@ -220,12 +217,10 @@ long mga_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | |||
| 220 | if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(mga_compat_ioctls)) | 217 | if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(mga_compat_ioctls)) |
| 221 | fn = mga_compat_ioctls[nr - DRM_COMMAND_BASE]; | 218 | fn = mga_compat_ioctls[nr - DRM_COMMAND_BASE]; |
| 222 | 219 | ||
| 223 | lock_kernel(); /* XXX for now */ | ||
| 224 | if (fn != NULL) | 220 | if (fn != NULL) |
| 225 | ret = (*fn) (filp, cmd, arg); | 221 | ret = (*fn) (filp, cmd, arg); |
| 226 | else | 222 | else |
| 227 | ret = drm_ioctl(filp->f_path.dentry->d_inode, filp, cmd, arg); | 223 | ret = drm_ioctl(filp, cmd, arg); |
| 228 | unlock_kernel(); | ||
| 229 | 224 | ||
| 230 | return ret; | 225 | return ret; |
| 231 | } | 226 | } |
diff --git a/drivers/gpu/drm/nouveau/nouveau_drv.c b/drivers/gpu/drm/nouveau/nouveau_drv.c index 35249c35118f..3f943c01e995 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drv.c +++ b/drivers/gpu/drm/nouveau/nouveau_drv.c | |||
| @@ -341,7 +341,7 @@ static struct drm_driver driver = { | |||
| 341 | .owner = THIS_MODULE, | 341 | .owner = THIS_MODULE, |
| 342 | .open = drm_open, | 342 | .open = drm_open, |
| 343 | .release = drm_release, | 343 | .release = drm_release, |
| 344 | .ioctl = drm_ioctl, | 344 | .unlocked_ioctl = drm_ioctl, |
| 345 | .mmap = nouveau_ttm_mmap, | 345 | .mmap = nouveau_ttm_mmap, |
| 346 | .poll = drm_poll, | 346 | .poll = drm_poll, |
| 347 | .fasync = drm_fasync, | 347 | .fasync = drm_fasync, |
diff --git a/drivers/gpu/drm/nouveau/nouveau_ioc32.c b/drivers/gpu/drm/nouveau/nouveau_ioc32.c index a2c30f4611ba..475ba810bba3 100644 --- a/drivers/gpu/drm/nouveau/nouveau_ioc32.c +++ b/drivers/gpu/drm/nouveau/nouveau_ioc32.c | |||
| @@ -61,12 +61,10 @@ long nouveau_compat_ioctl(struct file *filp, unsigned int cmd, | |||
| 61 | if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(mga_compat_ioctls)) | 61 | if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(mga_compat_ioctls)) |
| 62 | fn = nouveau_compat_ioctls[nr - DRM_COMMAND_BASE]; | 62 | fn = nouveau_compat_ioctls[nr - DRM_COMMAND_BASE]; |
| 63 | #endif | 63 | #endif |
| 64 | lock_kernel(); /* XXX for now */ | ||
| 65 | if (fn != NULL) | 64 | if (fn != NULL) |
| 66 | ret = (*fn)(filp, cmd, arg); | 65 | ret = (*fn)(filp, cmd, arg); |
| 67 | else | 66 | else |
| 68 | ret = drm_ioctl(filp->f_dentry->d_inode, filp, cmd, arg); | 67 | ret = drm_ioctl(filp, cmd, arg); |
| 69 | unlock_kernel(); | ||
| 70 | 68 | ||
| 71 | return ret; | 69 | return ret; |
| 72 | } | 70 | } |
diff --git a/drivers/gpu/drm/r128/r128_drv.c b/drivers/gpu/drm/r128/r128_drv.c index 601f4c0e5da5..b806fdcc7170 100644 --- a/drivers/gpu/drm/r128/r128_drv.c +++ b/drivers/gpu/drm/r128/r128_drv.c | |||
| @@ -64,7 +64,7 @@ static struct drm_driver driver = { | |||
| 64 | .owner = THIS_MODULE, | 64 | .owner = THIS_MODULE, |
| 65 | .open = drm_open, | 65 | .open = drm_open, |
| 66 | .release = drm_release, | 66 | .release = drm_release, |
| 67 | .ioctl = drm_ioctl, | 67 | .unlocked_ioctl = drm_ioctl, |
| 68 | .mmap = drm_mmap, | 68 | .mmap = drm_mmap, |
| 69 | .poll = drm_poll, | 69 | .poll = drm_poll, |
| 70 | .fasync = drm_fasync, | 70 | .fasync = drm_fasync, |
diff --git a/drivers/gpu/drm/r128/r128_ioc32.c b/drivers/gpu/drm/r128/r128_ioc32.c index d3cb676eee84..51c99fc4dd38 100644 --- a/drivers/gpu/drm/r128/r128_ioc32.c +++ b/drivers/gpu/drm/r128/r128_ioc32.c | |||
| @@ -95,8 +95,7 @@ static int compat_r128_init(struct file *file, unsigned int cmd, | |||
| 95 | &init->agp_textures_offset)) | 95 | &init->agp_textures_offset)) |
| 96 | return -EFAULT; | 96 | return -EFAULT; |
| 97 | 97 | ||
| 98 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 98 | return drm_ioctl(file, DRM_IOCTL_R128_INIT, (unsigned long)init); |
| 99 | DRM_IOCTL_R128_INIT, (unsigned long)init); | ||
| 100 | } | 99 | } |
| 101 | 100 | ||
| 102 | typedef struct drm_r128_depth32 { | 101 | typedef struct drm_r128_depth32 { |
| @@ -129,8 +128,7 @@ static int compat_r128_depth(struct file *file, unsigned int cmd, | |||
| 129 | &depth->mask)) | 128 | &depth->mask)) |
| 130 | return -EFAULT; | 129 | return -EFAULT; |
| 131 | 130 | ||
| 132 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 131 | return drm_ioctl(file, DRM_IOCTL_R128_DEPTH, (unsigned long)depth); |
| 133 | DRM_IOCTL_R128_DEPTH, (unsigned long)depth); | ||
| 134 | 132 | ||
| 135 | } | 133 | } |
| 136 | 134 | ||
| @@ -153,8 +151,7 @@ static int compat_r128_stipple(struct file *file, unsigned int cmd, | |||
| 153 | &stipple->mask)) | 151 | &stipple->mask)) |
| 154 | return -EFAULT; | 152 | return -EFAULT; |
| 155 | 153 | ||
| 156 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 154 | return drm_ioctl(file, DRM_IOCTL_R128_STIPPLE, (unsigned long)stipple); |
| 157 | DRM_IOCTL_R128_STIPPLE, (unsigned long)stipple); | ||
| 158 | } | 155 | } |
| 159 | 156 | ||
| 160 | typedef struct drm_r128_getparam32 { | 157 | typedef struct drm_r128_getparam32 { |
| @@ -178,8 +175,7 @@ static int compat_r128_getparam(struct file *file, unsigned int cmd, | |||
| 178 | &getparam->value)) | 175 | &getparam->value)) |
| 179 | return -EFAULT; | 176 | return -EFAULT; |
| 180 | 177 | ||
| 181 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 178 | return drm_ioctl(file, DRM_IOCTL_R128_GETPARAM, (unsigned long)getparam); |
| 182 | DRM_IOCTL_R128_GETPARAM, (unsigned long)getparam); | ||
| 183 | } | 179 | } |
| 184 | 180 | ||
| 185 | drm_ioctl_compat_t *r128_compat_ioctls[] = { | 181 | drm_ioctl_compat_t *r128_compat_ioctls[] = { |
| @@ -210,12 +206,10 @@ long r128_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | |||
| 210 | if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(r128_compat_ioctls)) | 206 | if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(r128_compat_ioctls)) |
| 211 | fn = r128_compat_ioctls[nr - DRM_COMMAND_BASE]; | 207 | fn = r128_compat_ioctls[nr - DRM_COMMAND_BASE]; |
| 212 | 208 | ||
| 213 | lock_kernel(); /* XXX for now */ | ||
| 214 | if (fn != NULL) | 209 | if (fn != NULL) |
| 215 | ret = (*fn) (filp, cmd, arg); | 210 | ret = (*fn) (filp, cmd, arg); |
| 216 | else | 211 | else |
| 217 | ret = drm_ioctl(filp->f_path.dentry->d_inode, filp, cmd, arg); | 212 | ret = drm_ioctl(filp, cmd, arg); |
| 218 | unlock_kernel(); | ||
| 219 | 213 | ||
| 220 | return ret; | 214 | return ret; |
| 221 | } | 215 | } |
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c index dbd56ef82f9c..8ba3de7994d4 100644 --- a/drivers/gpu/drm/radeon/radeon_drv.c +++ b/drivers/gpu/drm/radeon/radeon_drv.c | |||
| @@ -196,7 +196,7 @@ static struct drm_driver driver_old = { | |||
| 196 | .owner = THIS_MODULE, | 196 | .owner = THIS_MODULE, |
| 197 | .open = drm_open, | 197 | .open = drm_open, |
| 198 | .release = drm_release, | 198 | .release = drm_release, |
| 199 | .ioctl = drm_ioctl, | 199 | .unlocked_ioctl = drm_ioctl, |
| 200 | .mmap = drm_mmap, | 200 | .mmap = drm_mmap, |
| 201 | .poll = drm_poll, | 201 | .poll = drm_poll, |
| 202 | .fasync = drm_fasync, | 202 | .fasync = drm_fasync, |
| @@ -284,7 +284,7 @@ static struct drm_driver kms_driver = { | |||
| 284 | .owner = THIS_MODULE, | 284 | .owner = THIS_MODULE, |
| 285 | .open = drm_open, | 285 | .open = drm_open, |
| 286 | .release = drm_release, | 286 | .release = drm_release, |
| 287 | .ioctl = drm_ioctl, | 287 | .unlocked_ioctl = drm_ioctl, |
| 288 | .mmap = radeon_mmap, | 288 | .mmap = radeon_mmap, |
| 289 | .poll = drm_poll, | 289 | .poll = drm_poll, |
| 290 | .fasync = drm_fasync, | 290 | .fasync = drm_fasync, |
diff --git a/drivers/gpu/drm/radeon/radeon_ioc32.c b/drivers/gpu/drm/radeon/radeon_ioc32.c index a1bf11de308a..48b7cea31e08 100644 --- a/drivers/gpu/drm/radeon/radeon_ioc32.c +++ b/drivers/gpu/drm/radeon/radeon_ioc32.c | |||
| @@ -92,8 +92,7 @@ static int compat_radeon_cp_init(struct file *file, unsigned int cmd, | |||
| 92 | &init->gart_textures_offset)) | 92 | &init->gart_textures_offset)) |
| 93 | return -EFAULT; | 93 | return -EFAULT; |
| 94 | 94 | ||
| 95 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 95 | return drm_ioctl(file, DRM_IOCTL_RADEON_CP_INIT, (unsigned long)init); |
| 96 | DRM_IOCTL_RADEON_CP_INIT, (unsigned long)init); | ||
| 97 | } | 96 | } |
| 98 | 97 | ||
| 99 | typedef struct drm_radeon_clear32 { | 98 | typedef struct drm_radeon_clear32 { |
| @@ -125,8 +124,7 @@ static int compat_radeon_cp_clear(struct file *file, unsigned int cmd, | |||
| 125 | &clr->depth_boxes)) | 124 | &clr->depth_boxes)) |
| 126 | return -EFAULT; | 125 | return -EFAULT; |
| 127 | 126 | ||
| 128 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 127 | return drm_ioctl(file, DRM_IOCTL_RADEON_CLEAR, (unsigned long)clr); |
| 129 | DRM_IOCTL_RADEON_CLEAR, (unsigned long)clr); | ||
| 130 | } | 128 | } |
| 131 | 129 | ||
| 132 | typedef struct drm_radeon_stipple32 { | 130 | typedef struct drm_radeon_stipple32 { |
| @@ -149,8 +147,7 @@ static int compat_radeon_cp_stipple(struct file *file, unsigned int cmd, | |||
| 149 | &request->mask)) | 147 | &request->mask)) |
| 150 | return -EFAULT; | 148 | return -EFAULT; |
| 151 | 149 | ||
| 152 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 150 | return drm_ioctl(file, DRM_IOCTL_RADEON_STIPPLE, (unsigned long)request); |
| 153 | DRM_IOCTL_RADEON_STIPPLE, (unsigned long)request); | ||
| 154 | } | 151 | } |
| 155 | 152 | ||
| 156 | typedef struct drm_radeon_tex_image32 { | 153 | typedef struct drm_radeon_tex_image32 { |
| @@ -204,8 +201,7 @@ static int compat_radeon_cp_texture(struct file *file, unsigned int cmd, | |||
| 204 | &image->data)) | 201 | &image->data)) |
| 205 | return -EFAULT; | 202 | return -EFAULT; |
| 206 | 203 | ||
| 207 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 204 | return drm_ioctl(file, DRM_IOCTL_RADEON_TEXTURE, (unsigned long)request); |
| 208 | DRM_IOCTL_RADEON_TEXTURE, (unsigned long)request); | ||
| 209 | } | 205 | } |
| 210 | 206 | ||
| 211 | typedef struct drm_radeon_vertex2_32 { | 207 | typedef struct drm_radeon_vertex2_32 { |
| @@ -238,8 +234,7 @@ static int compat_radeon_cp_vertex2(struct file *file, unsigned int cmd, | |||
| 238 | &request->prim)) | 234 | &request->prim)) |
| 239 | return -EFAULT; | 235 | return -EFAULT; |
| 240 | 236 | ||
| 241 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 237 | return drm_ioctl(file, DRM_IOCTL_RADEON_VERTEX2, (unsigned long)request); |
| 242 | DRM_IOCTL_RADEON_VERTEX2, (unsigned long)request); | ||
| 243 | } | 238 | } |
| 244 | 239 | ||
| 245 | typedef struct drm_radeon_cmd_buffer32 { | 240 | typedef struct drm_radeon_cmd_buffer32 { |
| @@ -268,8 +263,7 @@ static int compat_radeon_cp_cmdbuf(struct file *file, unsigned int cmd, | |||
| 268 | &request->boxes)) | 263 | &request->boxes)) |
| 269 | return -EFAULT; | 264 | return -EFAULT; |
| 270 | 265 | ||
| 271 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 266 | return drm_ioctl(file, DRM_IOCTL_RADEON_CMDBUF, (unsigned long)request); |
| 272 | DRM_IOCTL_RADEON_CMDBUF, (unsigned long)request); | ||
| 273 | } | 267 | } |
| 274 | 268 | ||
| 275 | typedef struct drm_radeon_getparam32 { | 269 | typedef struct drm_radeon_getparam32 { |
| @@ -293,8 +287,7 @@ static int compat_radeon_cp_getparam(struct file *file, unsigned int cmd, | |||
| 293 | &request->value)) | 287 | &request->value)) |
| 294 | return -EFAULT; | 288 | return -EFAULT; |
| 295 | 289 | ||
| 296 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 290 | return drm_ioctl(file, DRM_IOCTL_RADEON_GETPARAM, (unsigned long)request); |
| 297 | DRM_IOCTL_RADEON_GETPARAM, (unsigned long)request); | ||
| 298 | } | 291 | } |
| 299 | 292 | ||
| 300 | typedef struct drm_radeon_mem_alloc32 { | 293 | typedef struct drm_radeon_mem_alloc32 { |
| @@ -322,8 +315,7 @@ static int compat_radeon_mem_alloc(struct file *file, unsigned int cmd, | |||
| 322 | &request->region_offset)) | 315 | &request->region_offset)) |
| 323 | return -EFAULT; | 316 | return -EFAULT; |
| 324 | 317 | ||
| 325 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 318 | return drm_ioctl(file, DRM_IOCTL_RADEON_ALLOC, (unsigned long)request); |
| 326 | DRM_IOCTL_RADEON_ALLOC, (unsigned long)request); | ||
| 327 | } | 319 | } |
| 328 | 320 | ||
| 329 | typedef struct drm_radeon_irq_emit32 { | 321 | typedef struct drm_radeon_irq_emit32 { |
| @@ -345,8 +337,7 @@ static int compat_radeon_irq_emit(struct file *file, unsigned int cmd, | |||
| 345 | &request->irq_seq)) | 337 | &request->irq_seq)) |
| 346 | return -EFAULT; | 338 | return -EFAULT; |
| 347 | 339 | ||
| 348 | return drm_ioctl(file->f_path.dentry->d_inode, file, | 340 | return drm_ioctl(file, DRM_IOCTL_RADEON_IRQ_EMIT, (unsigned long)request); |
| 349 | DRM_IOCTL_RADEON_IRQ_EMIT, (unsigned long)request); | ||
| 350 | } | 341 | } |
| 351 | 342 | ||
| 352 | /* The two 64-bit arches where alignof(u64)==4 in 32-bit code */ | 343 | /* The two 64-bit arches where alignof(u64)==4 in 32-bit code */ |
| @@ -372,8 +363,7 @@ static int compat_radeon_cp_setparam(struct file *file, unsigned int cmd, | |||
| 372 | &request->value)) | 363 | &request->value)) |
| 373 | return -EFAULT; | 364 | return -EFAULT; |
| 374 | 365 | ||
| 375 | return drm_ioctl(file->f_dentry->d_inode, file, | 366 | return drm_ioctl(file, DRM_IOCTL_RADEON_SETPARAM, (unsigned long) request); |
| 376 | DRM_IOCTL_RADEON_SETPARAM, (unsigned long) request); | ||
| 377 | } | 367 | } |
| 378 | #else | 368 | #else |
| 379 | #define compat_radeon_cp_setparam NULL | 369 | #define compat_radeon_cp_setparam NULL |
| @@ -413,12 +403,10 @@ long radeon_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | |||
| 413 | if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(radeon_compat_ioctls)) | 403 | if (nr < DRM_COMMAND_BASE + DRM_ARRAY_SIZE(radeon_compat_ioctls)) |
| 414 | fn = radeon_compat_ioctls[nr - DRM_COMMAND_BASE]; | 404 | fn = radeon_compat_ioctls[nr - DRM_COMMAND_BASE]; |
| 415 | 405 | ||
| 416 | lock_kernel(); /* XXX for now */ | ||
| 417 | if (fn != NULL) | 406 | if (fn != NULL) |
| 418 | ret = (*fn) (filp, cmd, arg); | 407 | ret = (*fn) (filp, cmd, arg); |
| 419 | else | 408 | else |
| 420 | ret = drm_ioctl(filp->f_path.dentry->d_inode, filp, cmd, arg); | 409 | ret = drm_ioctl(filp, cmd, arg); |
| 421 | unlock_kernel(); | ||
| 422 | 410 | ||
| 423 | return ret; | 411 | return ret; |
| 424 | } | 412 | } |
| @@ -431,9 +419,7 @@ long radeon_kms_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long | |||
| 431 | if (nr < DRM_COMMAND_BASE) | 419 | if (nr < DRM_COMMAND_BASE) |
| 432 | return drm_compat_ioctl(filp, cmd, arg); | 420 | return drm_compat_ioctl(filp, cmd, arg); |
| 433 | 421 | ||
| 434 | lock_kernel(); /* XXX for now */ | 422 | ret = drm_ioctl(filp, cmd, arg); |
| 435 | ret = drm_ioctl(filp->f_path.dentry->d_inode, filp, cmd, arg); | ||
| 436 | unlock_kernel(); | ||
| 437 | 423 | ||
| 438 | return ret; | 424 | return ret; |
| 439 | } | 425 | } |
diff --git a/drivers/gpu/drm/savage/savage_drv.c b/drivers/gpu/drm/savage/savage_drv.c index eee52aa92a7c..021de44c15ab 100644 --- a/drivers/gpu/drm/savage/savage_drv.c +++ b/drivers/gpu/drm/savage/savage_drv.c | |||
| @@ -50,7 +50,7 @@ static struct drm_driver driver = { | |||
| 50 | .owner = THIS_MODULE, | 50 | .owner = THIS_MODULE, |
| 51 | .open = drm_open, | 51 | .open = drm_open, |
| 52 | .release = drm_release, | 52 | .release = drm_release, |
| 53 | .ioctl = drm_ioctl, | 53 | .unlocked_ioctl = drm_ioctl, |
| 54 | .mmap = drm_mmap, | 54 | .mmap = drm_mmap, |
| 55 | .poll = drm_poll, | 55 | .poll = drm_poll, |
| 56 | .fasync = drm_fasync, | 56 | .fasync = drm_fasync, |
diff --git a/drivers/gpu/drm/sis/sis_drv.c b/drivers/gpu/drm/sis/sis_drv.c index e725cc0b1155..4fd1f067d380 100644 --- a/drivers/gpu/drm/sis/sis_drv.c +++ b/drivers/gpu/drm/sis/sis_drv.c | |||
| @@ -80,7 +80,7 @@ static struct drm_driver driver = { | |||
| 80 | .owner = THIS_MODULE, | 80 | .owner = THIS_MODULE, |
| 81 | .open = drm_open, | 81 | .open = drm_open, |
| 82 | .release = drm_release, | 82 | .release = drm_release, |
| 83 | .ioctl = drm_ioctl, | 83 | .unlocked_ioctl = drm_ioctl, |
| 84 | .mmap = drm_mmap, | 84 | .mmap = drm_mmap, |
| 85 | .poll = drm_poll, | 85 | .poll = drm_poll, |
| 86 | .fasync = drm_fasync, | 86 | .fasync = drm_fasync, |
diff --git a/drivers/gpu/drm/tdfx/tdfx_drv.c b/drivers/gpu/drm/tdfx/tdfx_drv.c index 012ff2e356b2..ec5a43e65722 100644 --- a/drivers/gpu/drm/tdfx/tdfx_drv.c +++ b/drivers/gpu/drm/tdfx/tdfx_drv.c | |||
| @@ -48,7 +48,7 @@ static struct drm_driver driver = { | |||
| 48 | .owner = THIS_MODULE, | 48 | .owner = THIS_MODULE, |
| 49 | .open = drm_open, | 49 | .open = drm_open, |
| 50 | .release = drm_release, | 50 | .release = drm_release, |
| 51 | .ioctl = drm_ioctl, | 51 | .unlocked_ioctl = drm_ioctl, |
| 52 | .mmap = drm_mmap, | 52 | .mmap = drm_mmap, |
| 53 | .poll = drm_poll, | 53 | .poll = drm_poll, |
| 54 | .fasync = drm_fasync, | 54 | .fasync = drm_fasync, |
diff --git a/drivers/gpu/drm/via/via_drv.c b/drivers/gpu/drm/via/via_drv.c index bc2f51843005..7a1b210401e0 100644 --- a/drivers/gpu/drm/via/via_drv.c +++ b/drivers/gpu/drm/via/via_drv.c | |||
| @@ -58,7 +58,7 @@ static struct drm_driver driver = { | |||
| 58 | .owner = THIS_MODULE, | 58 | .owner = THIS_MODULE, |
| 59 | .open = drm_open, | 59 | .open = drm_open, |
| 60 | .release = drm_release, | 60 | .release = drm_release, |
| 61 | .ioctl = drm_ioctl, | 61 | .unlocked_ioctl = drm_ioctl, |
| 62 | .mmap = drm_mmap, | 62 | .mmap = drm_mmap, |
| 63 | .poll = drm_poll, | 63 | .poll = drm_poll, |
| 64 | .fasync = drm_fasync, | 64 | .fasync = drm_fasync, |
diff --git a/include/drm/drmP.h b/include/drm/drmP.h index 19ef8ebdc662..71dafb69cfeb 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h | |||
| @@ -296,6 +296,7 @@ typedef int drm_ioctl_compat_t(struct file *filp, unsigned int cmd, | |||
| 296 | #define DRM_MASTER 0x2 | 296 | #define DRM_MASTER 0x2 |
| 297 | #define DRM_ROOT_ONLY 0x4 | 297 | #define DRM_ROOT_ONLY 0x4 |
| 298 | #define DRM_CONTROL_ALLOW 0x8 | 298 | #define DRM_CONTROL_ALLOW 0x8 |
| 299 | #define DRM_UNLOCKED 0x10 | ||
| 299 | 300 | ||
| 300 | struct drm_ioctl_desc { | 301 | struct drm_ioctl_desc { |
| 301 | unsigned int cmd; | 302 | unsigned int cmd; |
| @@ -1128,8 +1129,8 @@ static inline int drm_mtrr_del(int handle, unsigned long offset, | |||
| 1128 | /* Driver support (drm_drv.h) */ | 1129 | /* Driver support (drm_drv.h) */ |
| 1129 | extern int drm_init(struct drm_driver *driver); | 1130 | extern int drm_init(struct drm_driver *driver); |
| 1130 | extern void drm_exit(struct drm_driver *driver); | 1131 | extern void drm_exit(struct drm_driver *driver); |
| 1131 | extern int drm_ioctl(struct inode *inode, struct file *filp, | 1132 | extern long drm_ioctl(struct file *filp, |
| 1132 | unsigned int cmd, unsigned long arg); | 1133 | unsigned int cmd, unsigned long arg); |
| 1133 | extern long drm_compat_ioctl(struct file *filp, | 1134 | extern long drm_compat_ioctl(struct file *filp, |
| 1134 | unsigned int cmd, unsigned long arg); | 1135 | unsigned int cmd, unsigned long arg); |
| 1135 | extern int drm_lastclose(struct drm_device *dev); | 1136 | extern int drm_lastclose(struct drm_device *dev); |
