summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <anholt@freebsd.org>2003-10-22 22:08:53 +0000
committerEric Anholt <anholt@freebsd.org>2003-10-22 22:08:53 +0000
commit86e6325e5ab848c15c422f20133445fe6c1caa09 (patch)
tree8c4699b4ddac738ed005d5f4aedd9dae4c628bed
parent4e6ddcbb698c029b407d5dc43348c6e422a36705 (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.c8
-rw-r--r--bsd-core/drm_drv.c10
-rw-r--r--bsd-core/drm_os_freebsd.h35
-rw-r--r--bsd-core/drm_os_netbsd.h13
-rw-r--r--bsd-core/drm_vm.c8
-rw-r--r--bsd/drm_auth.h8
-rw-r--r--bsd/drm_drv.h10
-rw-r--r--bsd/drm_os_freebsd.h35
-rw-r--r--bsd/drm_os_netbsd.h13
-rw-r--r--bsd/drm_vm.h8
-rw-r--r--linux-core/drm_os_linux.h2
-rw-r--r--linux/drm_os_linux.h2
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.
*