diff options
author | Eric Anholt <anholt@freebsd.org> | 2003-10-22 22:08:53 +0000 |
---|---|---|
committer | Eric Anholt <anholt@freebsd.org> | 2003-10-22 22:08:53 +0000 |
commit | 86e6325e5ab848c15c422f20133445fe6c1caa09 (patch) | |
tree | 8c4699b4ddac738ed005d5f4aedd9dae4c628bed | |
parent | 4e6ddcbb698c029b407d5dc43348c6e422a36705 (diff) |
- Add DRM_GET_PRIV_WITH_RETURN macro. This can be used in shared code to
get the drm_file_t * based on the filp passed in ioctl handlers.
- Use this macro on BSD for simplification and improve its error reporting.
Make failure to find the drm_file_t * print as an error, not debug.
This failure may be part of the problem with KDE.
- Make debug and error print macros include the pid on BSD.
-rw-r--r-- | bsd-core/drm_auth.c | 8 | ||||
-rw-r--r-- | bsd-core/drm_drv.c | 10 | ||||
-rw-r--r-- | bsd-core/drm_os_freebsd.h | 35 | ||||
-rw-r--r-- | bsd-core/drm_os_netbsd.h | 13 | ||||
-rw-r--r-- | bsd-core/drm_vm.c | 8 | ||||
-rw-r--r-- | bsd/drm_auth.h | 8 | ||||
-rw-r--r-- | bsd/drm_drv.h | 10 | ||||
-rw-r--r-- | bsd/drm_os_freebsd.h | 35 | ||||
-rw-r--r-- | bsd/drm_os_netbsd.h | 13 | ||||
-rw-r--r-- | bsd/drm_vm.h | 8 | ||||
-rw-r--r-- | linux-core/drm_os_linux.h | 2 | ||||
-rw-r--r-- | linux/drm_os_linux.h | 2 |
12 files changed, 92 insertions, 60 deletions
diff --git a/bsd-core/drm_auth.c b/bsd-core/drm_auth.c index 9e34b35c..537718c1 100644 --- a/bsd-core/drm_auth.c +++ b/bsd-core/drm_auth.c @@ -120,13 +120,7 @@ int DRM(getmagic)(DRM_IOCTL_ARGS) drm_file_t *priv; DRM_DEVICE; - DRM_LOCK(); - priv = (drm_file_t *) DRM(find_file_by_proc)(dev, p); - DRM_UNLOCK(); - if (priv == NULL) { - DRM_DEBUG("can't find authenticator\n"); - return EINVAL; - } + DRM_GET_PRIV_WITH_RETURN(priv, filp); /* Find unique magic */ if (priv->magic) { diff --git a/bsd-core/drm_drv.c b/bsd-core/drm_drv.c index 7d753836..582a4112 100644 --- a/bsd-core/drm_drv.c +++ b/bsd-core/drm_drv.c @@ -824,7 +824,7 @@ int DRM(close)(dev_t kdev, int flags, int fmt, DRM_STRUCTPROC *p) priv = DRM(find_file_by_proc)(dev, p); if (!priv) { DRM_UNLOCK(); - DRM_DEBUG("can't find authenticator\n"); + DRM_ERROR("can't find authenticator\n"); return EINVAL; } @@ -938,13 +938,7 @@ int DRM(ioctl)(dev_t kdev, u_long cmd, caddr_t data, int flags, int nr = DRM_IOCTL_NR(cmd); drm_file_t *priv; - DRM_LOCK(); - priv = (drm_file_t *) DRM(find_file_by_proc)(dev, p); - DRM_UNLOCK(); - if (priv == NULL) { - DRM_DEBUG("can't find authenticator\n"); - return EINVAL; - } + DRM_GET_PRIV_WITH_RETURN(priv, (DRMFILE)DRM_CURRENTPID); atomic_inc( &dev->counts[_DRM_STAT_IOCTLS] ); ++priv->ioctl_count; diff --git a/bsd-core/drm_os_freebsd.h b/bsd-core/drm_os_freebsd.h index 42385137..89231ecd 100644 --- a/bsd-core/drm_os_freebsd.h +++ b/bsd-core/drm_os_freebsd.h @@ -173,6 +173,21 @@ typedef void irqreturn_t; #define DRM_MTRR_WC MDF_WRITECOMBINE +#define DRM_GET_PRIV_WITH_RETURN(_priv, _filp) \ +do { \ + if (_filp != (DRMFILE)DRM_CURRENTPID) { \ + DRM_ERROR("filp doesn't match curproc\n"); \ + return EINVAL; \ + } \ + DRM_LOCK(); \ + _priv = DRM(find_file_by_proc)(dev, DRM_CURPROC); \ + DRM_UNLOCK(); \ + if (_priv == NULL) { \ + DRM_ERROR("can't find authenticator\n"); \ + return EINVAL; \ + } \ +} while (0) + #define LOCK_TEST_WITH_RETURN(dev, filp) \ do { \ if (!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock) || \ @@ -391,17 +406,21 @@ find_first_zero_bit(volatile void *p, int max) /* Macros to make printf easier */ #define DRM_ERROR(fmt, arg...) \ - printf("error: " "[" DRM_NAME ":%s] *ERROR* " fmt , __func__ , ## arg) + printf("error: [" DRM_NAME ":pid%d:%s] *ERROR* " fmt, \ + DRM_CURRENTPID, __func__ , ## arg) + #define DRM_MEM_ERROR(area, fmt, arg...) \ - printf("error: " "[" DRM_NAME ":%s:%s] *ERROR* " fmt , \ - __func__, DRM(mem_stats)[area].name , ##arg) -#define DRM_INFO(fmt, arg...) printf("info: " "[" DRM_NAME "] " fmt , ## arg) + printf("error: [" DRM_NAME ":pid%d:%s:%s] *ERROR* " fmt, \ + DRM_CURRENTPID , __func__, DRM(mem_stats)[area].name , ##arg) + +#define DRM_INFO(fmt, arg...) printf("info: [" DRM_NAME "] " fmt , ## arg) #if DRM_DEBUG_CODE -#define DRM_DEBUG(fmt, arg...) \ - do { \ - if (DRM(flags) & DRM_FLAG_DEBUG) \ - printf("[" DRM_NAME ":%s] " fmt , __func__ , ## arg); \ +#define DRM_DEBUG(fmt, arg...) \ + do { \ + if (DRM(flags) & DRM_FLAG_DEBUG) \ + printf("[" DRM_NAME ":pid%d:%s] " fmt, \ + DRM_CURRENTPID, __func__ , ## arg); \ } while (0) #else #define DRM_DEBUG(fmt, arg...) do { } while (0) diff --git a/bsd-core/drm_os_netbsd.h b/bsd-core/drm_os_netbsd.h index b03399d8..4c95c50f 100644 --- a/bsd-core/drm_os_netbsd.h +++ b/bsd-core/drm_os_netbsd.h @@ -140,6 +140,19 @@ extern const int DRM(M_DRM) = M_DEVBUF; #define DRM_AGP_FIND_DEVICE() agp_find_device(0) +#define DRM_GET_PRIV_WITH_RETURN(_priv, _filp) \ +do { \ + if (_filp != (DRMFILE)DRM_CURRENTPID) { \ + DRM_ERROR("filp doesn't match curproc\n"); \ + return EINVAL; \ + } \ + _priv = DRM(find_file_by_proc)(dev, DRM_CURPROC); \ + if (_priv == NULL) { \ + DRM_ERROR("can't find authenticator\n"); \ + return EINVAL; \ + } \ +} while (0) + #define LOCK_TEST_WITH_RETURN(dev, filp) \ do { \ if (!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock) || \ diff --git a/bsd-core/drm_vm.c b/bsd-core/drm_vm.c index 9e9f1e14..e4ae8c7e 100644 --- a/bsd-core/drm_vm.c +++ b/bsd-core/drm_vm.c @@ -65,13 +65,7 @@ paddr_t DRM(mmap)(dev_t kdev, off_t offset, int prot) drm_map_list_entry_t *listentry = NULL; drm_file_t *priv; - DRM_LOCK(); - priv = DRM(find_file_by_proc)(dev, DRM_CURPROC); - DRM_UNLOCK(); - if (!priv) { - DRM_DEBUG("can't find authenticator\n"); - return EINVAL; - } + DRM_GET_PRIV_WITH_RETURN(priv, (DRMFILE)DRM_CURRENTPID); if (!priv->authenticated) return DRM_ERR(EACCES); diff --git a/bsd/drm_auth.h b/bsd/drm_auth.h index 9e34b35c..537718c1 100644 --- a/bsd/drm_auth.h +++ b/bsd/drm_auth.h @@ -120,13 +120,7 @@ int DRM(getmagic)(DRM_IOCTL_ARGS) drm_file_t *priv; DRM_DEVICE; - DRM_LOCK(); - priv = (drm_file_t *) DRM(find_file_by_proc)(dev, p); - DRM_UNLOCK(); - if (priv == NULL) { - DRM_DEBUG("can't find authenticator\n"); - return EINVAL; - } + DRM_GET_PRIV_WITH_RETURN(priv, filp); /* Find unique magic */ if (priv->magic) { diff --git a/bsd/drm_drv.h b/bsd/drm_drv.h index 7d753836..582a4112 100644 --- a/bsd/drm_drv.h +++ b/bsd/drm_drv.h @@ -824,7 +824,7 @@ int DRM(close)(dev_t kdev, int flags, int fmt, DRM_STRUCTPROC *p) priv = DRM(find_file_by_proc)(dev, p); if (!priv) { DRM_UNLOCK(); - DRM_DEBUG("can't find authenticator\n"); + DRM_ERROR("can't find authenticator\n"); return EINVAL; } @@ -938,13 +938,7 @@ int DRM(ioctl)(dev_t kdev, u_long cmd, caddr_t data, int flags, int nr = DRM_IOCTL_NR(cmd); drm_file_t *priv; - DRM_LOCK(); - priv = (drm_file_t *) DRM(find_file_by_proc)(dev, p); - DRM_UNLOCK(); - if (priv == NULL) { - DRM_DEBUG("can't find authenticator\n"); - return EINVAL; - } + DRM_GET_PRIV_WITH_RETURN(priv, (DRMFILE)DRM_CURRENTPID); atomic_inc( &dev->counts[_DRM_STAT_IOCTLS] ); ++priv->ioctl_count; diff --git a/bsd/drm_os_freebsd.h b/bsd/drm_os_freebsd.h index 42385137..89231ecd 100644 --- a/bsd/drm_os_freebsd.h +++ b/bsd/drm_os_freebsd.h @@ -173,6 +173,21 @@ typedef void irqreturn_t; #define DRM_MTRR_WC MDF_WRITECOMBINE +#define DRM_GET_PRIV_WITH_RETURN(_priv, _filp) \ +do { \ + if (_filp != (DRMFILE)DRM_CURRENTPID) { \ + DRM_ERROR("filp doesn't match curproc\n"); \ + return EINVAL; \ + } \ + DRM_LOCK(); \ + _priv = DRM(find_file_by_proc)(dev, DRM_CURPROC); \ + DRM_UNLOCK(); \ + if (_priv == NULL) { \ + DRM_ERROR("can't find authenticator\n"); \ + return EINVAL; \ + } \ +} while (0) + #define LOCK_TEST_WITH_RETURN(dev, filp) \ do { \ if (!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock) || \ @@ -391,17 +406,21 @@ find_first_zero_bit(volatile void *p, int max) /* Macros to make printf easier */ #define DRM_ERROR(fmt, arg...) \ - printf("error: " "[" DRM_NAME ":%s] *ERROR* " fmt , __func__ , ## arg) + printf("error: [" DRM_NAME ":pid%d:%s] *ERROR* " fmt, \ + DRM_CURRENTPID, __func__ , ## arg) + #define DRM_MEM_ERROR(area, fmt, arg...) \ - printf("error: " "[" DRM_NAME ":%s:%s] *ERROR* " fmt , \ - __func__, DRM(mem_stats)[area].name , ##arg) -#define DRM_INFO(fmt, arg...) printf("info: " "[" DRM_NAME "] " fmt , ## arg) + printf("error: [" DRM_NAME ":pid%d:%s:%s] *ERROR* " fmt, \ + DRM_CURRENTPID , __func__, DRM(mem_stats)[area].name , ##arg) + +#define DRM_INFO(fmt, arg...) printf("info: [" DRM_NAME "] " fmt , ## arg) #if DRM_DEBUG_CODE -#define DRM_DEBUG(fmt, arg...) \ - do { \ - if (DRM(flags) & DRM_FLAG_DEBUG) \ - printf("[" DRM_NAME ":%s] " fmt , __func__ , ## arg); \ +#define DRM_DEBUG(fmt, arg...) \ + do { \ + if (DRM(flags) & DRM_FLAG_DEBUG) \ + printf("[" DRM_NAME ":pid%d:%s] " fmt, \ + DRM_CURRENTPID, __func__ , ## arg); \ } while (0) #else #define DRM_DEBUG(fmt, arg...) do { } while (0) diff --git a/bsd/drm_os_netbsd.h b/bsd/drm_os_netbsd.h index b03399d8..4c95c50f 100644 --- a/bsd/drm_os_netbsd.h +++ b/bsd/drm_os_netbsd.h @@ -140,6 +140,19 @@ extern const int DRM(M_DRM) = M_DEVBUF; #define DRM_AGP_FIND_DEVICE() agp_find_device(0) +#define DRM_GET_PRIV_WITH_RETURN(_priv, _filp) \ +do { \ + if (_filp != (DRMFILE)DRM_CURRENTPID) { \ + DRM_ERROR("filp doesn't match curproc\n"); \ + return EINVAL; \ + } \ + _priv = DRM(find_file_by_proc)(dev, DRM_CURPROC); \ + if (_priv == NULL) { \ + DRM_ERROR("can't find authenticator\n"); \ + return EINVAL; \ + } \ +} while (0) + #define LOCK_TEST_WITH_RETURN(dev, filp) \ do { \ if (!_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock) || \ diff --git a/bsd/drm_vm.h b/bsd/drm_vm.h index 9e9f1e14..e4ae8c7e 100644 --- a/bsd/drm_vm.h +++ b/bsd/drm_vm.h @@ -65,13 +65,7 @@ paddr_t DRM(mmap)(dev_t kdev, off_t offset, int prot) drm_map_list_entry_t *listentry = NULL; drm_file_t *priv; - DRM_LOCK(); - priv = DRM(find_file_by_proc)(dev, DRM_CURPROC); - DRM_UNLOCK(); - if (!priv) { - DRM_DEBUG("can't find authenticator\n"); - return EINVAL; - } + DRM_GET_PRIV_WITH_RETURN(priv, (DRMFILE)DRM_CURRENTPID); if (!priv->authenticated) return DRM_ERR(EACCES); diff --git a/linux-core/drm_os_linux.h b/linux-core/drm_os_linux.h index 38a5769e..cf7d7c2d 100644 --- a/linux-core/drm_os_linux.h +++ b/linux-core/drm_os_linux.h @@ -83,6 +83,8 @@ typedef void irqreturn_t; /** 'free' without the overhead of DRM(free)() */ #define DRM_FREE(x,size) kfree(x) +#define DRM_GET_PRIV_WITH_RETURN(_priv, _filp) _priv = _filp->private_data + /** * Get the pointer to the SAREA. * diff --git a/linux/drm_os_linux.h b/linux/drm_os_linux.h index 38a5769e..cf7d7c2d 100644 --- a/linux/drm_os_linux.h +++ b/linux/drm_os_linux.h @@ -83,6 +83,8 @@ typedef void irqreturn_t; /** 'free' without the overhead of DRM(free)() */ #define DRM_FREE(x,size) kfree(x) +#define DRM_GET_PRIV_WITH_RETURN(_priv, _filp) _priv = _filp->private_data + /** * Get the pointer to the SAREA. * |