- Add DRM_GET_PRIV_WITH_RETURN macro. This can be used in shared code to
authorEric Anholt <anholt@freebsd.org>
Wed, 22 Oct 2003 22:08:53 +0000 (22:08 +0000)
committerEric Anholt <anholt@freebsd.org>
Wed, 22 Oct 2003 22:08:53 +0000 (22:08 +0000)
    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.

12 files changed:
bsd-core/drm_auth.c
bsd-core/drm_drv.c
bsd-core/drm_os_freebsd.h
bsd-core/drm_os_netbsd.h
bsd-core/drm_vm.c
bsd/drm_auth.h
bsd/drm_drv.h
bsd/drm_os_freebsd.h
bsd/drm_os_netbsd.h
bsd/drm_vm.h
linux-core/drm_os_linux.h
linux/drm_os_linux.h

index 9e34b35..537718c 100644 (file)
@@ -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) {
index 7d75383..582a411 100644 (file)
@@ -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;
index 4238513..89231ec 100644 (file)
@@ -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)
index b03399d..4c95c50 100644 (file)
@@ -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) ||              \
index 9e9f1e1..e4ae8c7 100644 (file)
@@ -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);
index 9e34b35..537718c 100644 (file)
@@ -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) {
index 7d75383..582a411 100644 (file)
@@ -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;
index 4238513..89231ec 100644 (file)
@@ -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)
index b03399d..4c95c50 100644 (file)
@@ -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) ||              \
index 9e9f1e1..e4ae8c7 100644 (file)
@@ -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);
index 38a5769..cf7d7c2 100644 (file)
@@ -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.
  *
index 38a5769..cf7d7c2 100644 (file)
@@ -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.
  *