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); |