Commit 6c340eac authored by Eric Anholt's avatar Eric Anholt Committed by Dave Airlie

drm: Replace filp in ioctl arguments with drm_file *file_priv.

As a fallout, replace filp storage with file_priv storage for "unique
identifier of a client" all over the DRM.  There is a 1:1 mapping, so this
should be a noop.  This could be a minor performance improvement, as everyth
on Linux dereferenced filp to get file_priv anyway, while only the mmap ioct
went the other direction.
Signed-off-by: default avatarDave Airlie <airlied@linux.ie>
parent 20caafa6
...@@ -34,6 +34,8 @@ ...@@ -34,6 +34,8 @@
#ifndef _DRM_P_H_ #ifndef _DRM_P_H_
#define _DRM_P_H_ #define _DRM_P_H_
struct drm_file;
/* If you want the memory alloc debug functionality, change define below */ /* If you want the memory alloc debug functionality, change define below */
/* #define DEBUG_MEMORY */ /* #define DEBUG_MEMORY */
...@@ -257,11 +259,11 @@ do { \ ...@@ -257,11 +259,11 @@ do { \
* Ioctl function type. * Ioctl function type.
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private pointer.
* \param cmd command. * \param cmd command.
* \param arg argument. * \param arg argument.
*/ */
typedef int drm_ioctl_t(struct inode *inode, struct file *filp, typedef int drm_ioctl_t(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
typedef int drm_ioctl_compat_t(struct file *filp, unsigned int cmd, typedef int drm_ioctl_compat_t(struct file *filp, unsigned int cmd,
...@@ -304,7 +306,7 @@ struct drm_buf { ...@@ -304,7 +306,7 @@ struct drm_buf {
__volatile__ int waiting; /**< On kernel DMA queue */ __volatile__ int waiting; /**< On kernel DMA queue */
__volatile__ int pending; /**< On hardware DMA queue */ __volatile__ int pending; /**< On hardware DMA queue */
wait_queue_head_t dma_wait; /**< Processes waiting */ wait_queue_head_t dma_wait; /**< Processes waiting */
struct file *filp; /**< Pointer to holding file descr */ struct drm_file *file_priv; /**< Private of holding file descr */
int context; /**< Kernel queue for this buffer */ int context; /**< Kernel queue for this buffer */
int while_locked; /**< Dispatch this buffer while locked */ int while_locked; /**< Dispatch this buffer while locked */
enum { enum {
...@@ -377,6 +379,7 @@ struct drm_file { ...@@ -377,6 +379,7 @@ struct drm_file {
int remove_auth_on_close; int remove_auth_on_close;
unsigned long lock_count; unsigned long lock_count;
void *driver_priv; void *driver_priv;
struct file *filp;
}; };
/** Wait queue */ /** Wait queue */
...@@ -403,7 +406,7 @@ struct drm_queue { ...@@ -403,7 +406,7 @@ struct drm_queue {
*/ */
struct drm_lock_data { struct drm_lock_data {
struct drm_hw_lock *hw_lock; /**< Hardware lock */ struct drm_hw_lock *hw_lock; /**< Hardware lock */
struct file *filp; /**< File descr of lock holder (0=kernel) */ struct drm_file *file_priv; /**< File descr of lock holder (0=kernel) */
wait_queue_head_t lock_queue; /**< Queue of blocked processes */ wait_queue_head_t lock_queue; /**< Queue of blocked processes */
unsigned long lock_time; /**< Time of last lock in jiffies */ unsigned long lock_time; /**< Time of last lock in jiffies */
spinlock_t spinlock; spinlock_t spinlock;
...@@ -552,7 +555,7 @@ struct drm_driver { ...@@ -552,7 +555,7 @@ struct drm_driver {
int (*load) (struct drm_device *, unsigned long flags); int (*load) (struct drm_device *, unsigned long flags);
int (*firstopen) (struct drm_device *); int (*firstopen) (struct drm_device *);
int (*open) (struct drm_device *, struct drm_file *); int (*open) (struct drm_device *, struct drm_file *);
void (*preclose) (struct drm_device *, struct file * filp); void (*preclose) (struct drm_device *, struct drm_file *file_priv);
void (*postclose) (struct drm_device *, struct drm_file *); void (*postclose) (struct drm_device *, struct drm_file *);
void (*lastclose) (struct drm_device *); void (*lastclose) (struct drm_device *);
int (*unload) (struct drm_device *); int (*unload) (struct drm_device *);
...@@ -587,11 +590,12 @@ struct drm_driver { ...@@ -587,11 +590,12 @@ struct drm_driver {
void (*irq_preinstall) (struct drm_device *dev); void (*irq_preinstall) (struct drm_device *dev);
void (*irq_postinstall) (struct drm_device *dev); void (*irq_postinstall) (struct drm_device *dev);
void (*irq_uninstall) (struct drm_device *dev); void (*irq_uninstall) (struct drm_device *dev);
void (*reclaim_buffers) (struct drm_device *dev, struct file * filp); void (*reclaim_buffers) (struct drm_device *dev,
struct drm_file * file_priv);
void (*reclaim_buffers_locked) (struct drm_device *dev, void (*reclaim_buffers_locked) (struct drm_device *dev,
struct file *filp); struct drm_file *file_priv);
void (*reclaim_buffers_idlelocked) (struct drm_device *dev, void (*reclaim_buffers_idlelocked) (struct drm_device *dev,
struct file * filp); struct drm_file *file_priv);
unsigned long (*get_map_ofs) (struct drm_map * map); unsigned long (*get_map_ofs) (struct drm_map * map);
unsigned long (*get_reg_ofs) (struct drm_device *dev); unsigned long (*get_reg_ofs) (struct drm_device *dev);
void (*set_version) (struct drm_device *dev, void (*set_version) (struct drm_device *dev,
...@@ -850,69 +854,69 @@ extern int drm_bind_agp(DRM_AGP_MEM * handle, unsigned int start); ...@@ -850,69 +854,69 @@ extern int drm_bind_agp(DRM_AGP_MEM * handle, unsigned int start);
extern int drm_unbind_agp(DRM_AGP_MEM * handle); extern int drm_unbind_agp(DRM_AGP_MEM * handle);
/* Misc. IOCTL support (drm_ioctl.h) */ /* Misc. IOCTL support (drm_ioctl.h) */
extern int drm_irq_by_busid(struct inode *inode, struct file *filp, extern int drm_irq_by_busid(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_getunique(struct inode *inode, struct file *filp, extern int drm_getunique(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_setunique(struct inode *inode, struct file *filp, extern int drm_setunique(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_getmap(struct inode *inode, struct file *filp, extern int drm_getmap(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_getclient(struct inode *inode, struct file *filp, extern int drm_getclient(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_getstats(struct inode *inode, struct file *filp, extern int drm_getstats(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_setversion(struct inode *inode, struct file *filp, extern int drm_setversion(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_noop(struct inode *inode, struct file *filp, extern int drm_noop(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
/* Context IOCTL support (drm_context.h) */ /* Context IOCTL support (drm_context.h) */
extern int drm_resctx(struct inode *inode, struct file *filp, extern int drm_resctx(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_addctx(struct inode *inode, struct file *filp, extern int drm_addctx(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_modctx(struct inode *inode, struct file *filp, extern int drm_modctx(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_getctx(struct inode *inode, struct file *filp, extern int drm_getctx(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_switchctx(struct inode *inode, struct file *filp, extern int drm_switchctx(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_newctx(struct inode *inode, struct file *filp, extern int drm_newctx(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_rmctx(struct inode *inode, struct file *filp, extern int drm_rmctx(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_ctxbitmap_init(struct drm_device *dev); extern int drm_ctxbitmap_init(struct drm_device *dev);
extern void drm_ctxbitmap_cleanup(struct drm_device *dev); extern void drm_ctxbitmap_cleanup(struct drm_device *dev);
extern void drm_ctxbitmap_free(struct drm_device *dev, int ctx_handle); extern void drm_ctxbitmap_free(struct drm_device *dev, int ctx_handle);
extern int drm_setsareactx(struct inode *inode, struct file *filp, extern int drm_setsareactx(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_getsareactx(struct inode *inode, struct file *filp, extern int drm_getsareactx(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
/* Drawable IOCTL support (drm_drawable.h) */ /* Drawable IOCTL support (drm_drawable.h) */
extern int drm_adddraw(struct inode *inode, struct file *filp, extern int drm_adddraw(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_rmdraw(struct inode *inode, struct file *filp, extern int drm_rmdraw(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_update_drawable_info(struct inode *inode, struct file *filp, extern int drm_update_drawable_info(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern struct drm_drawable_info *drm_get_drawable_info(struct drm_device *dev, extern struct drm_drawable_info *drm_get_drawable_info(struct drm_device *dev,
drm_drawable_t id); drm_drawable_t id);
extern void drm_drawable_free_all(struct drm_device *dev); extern void drm_drawable_free_all(struct drm_device *dev);
/* Authentication IOCTL support (drm_auth.h) */ /* Authentication IOCTL support (drm_auth.h) */
extern int drm_getmagic(struct inode *inode, struct file *filp, extern int drm_getmagic(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_authmagic(struct inode *inode, struct file *filp, extern int drm_authmagic(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
/* Locking IOCTL support (drm_lock.h) */ /* Locking IOCTL support (drm_lock.h) */
extern int drm_lock(struct inode *inode, struct file *filp, extern int drm_lock(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_unlock(struct inode *inode, struct file *filp, extern int drm_unlock(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_lock_take(struct drm_lock_data *lock_data, unsigned int context); extern int drm_lock_take(struct drm_lock_data *lock_data, unsigned int context);
extern int drm_lock_free(struct drm_lock_data *lock_data, unsigned int context); extern int drm_lock_free(struct drm_lock_data *lock_data, unsigned int context);
...@@ -924,8 +928,7 @@ extern void drm_idlelock_release(struct drm_lock_data *lock_data); ...@@ -924,8 +928,7 @@ extern void drm_idlelock_release(struct drm_lock_data *lock_data);
* DMA quiscent + idle. DMA quiescent usually requires the hardware lock. * DMA quiscent + idle. DMA quiescent usually requires the hardware lock.
*/ */
extern int drm_i_have_hw_lock(struct file *filp); extern int drm_i_have_hw_lock(struct drm_file *file_priv);
extern int drm_kernel_take_hw_lock(struct file *filp);
/* Buffer management support (drm_bufs.h) */ /* Buffer management support (drm_bufs.h) */
extern int drm_addbufs_agp(struct drm_device *dev, struct drm_buf_desc * request); extern int drm_addbufs_agp(struct drm_device *dev, struct drm_buf_desc * request);
...@@ -933,23 +936,23 @@ extern int drm_addbufs_pci(struct drm_device *dev, struct drm_buf_desc * request ...@@ -933,23 +936,23 @@ extern int drm_addbufs_pci(struct drm_device *dev, struct drm_buf_desc * request
extern int drm_addmap(struct drm_device *dev, unsigned int offset, extern int drm_addmap(struct drm_device *dev, unsigned int offset,
unsigned int size, enum drm_map_type type, unsigned int size, enum drm_map_type type,
enum drm_map_flags flags, drm_local_map_t ** map_ptr); enum drm_map_flags flags, drm_local_map_t ** map_ptr);
extern int drm_addmap_ioctl(struct inode *inode, struct file *filp, extern int drm_addmap_ioctl(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_rmmap(struct drm_device *dev, drm_local_map_t * map); extern int drm_rmmap(struct drm_device *dev, drm_local_map_t * map);
extern int drm_rmmap_locked(struct drm_device *dev, drm_local_map_t * map); extern int drm_rmmap_locked(struct drm_device *dev, drm_local_map_t * map);
extern int drm_rmmap_ioctl(struct inode *inode, struct file *filp, extern int drm_rmmap_ioctl(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_order(unsigned long size); extern int drm_order(unsigned long size);
extern int drm_addbufs(struct inode *inode, struct file *filp, extern int drm_addbufs(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_infobufs(struct inode *inode, struct file *filp, extern int drm_infobufs(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_markbufs(struct inode *inode, struct file *filp, extern int drm_markbufs(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_freebufs(struct inode *inode, struct file *filp, extern int drm_freebufs(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_mapbufs(struct inode *inode, struct file *filp, extern int drm_mapbufs(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern unsigned long drm_get_resource_start(struct drm_device *dev, extern unsigned long drm_get_resource_start(struct drm_device *dev,
unsigned int resource); unsigned int resource);
...@@ -960,10 +963,11 @@ extern unsigned long drm_get_resource_len(struct drm_device *dev, ...@@ -960,10 +963,11 @@ extern unsigned long drm_get_resource_len(struct drm_device *dev,
extern int drm_dma_setup(struct drm_device *dev); extern int drm_dma_setup(struct drm_device *dev);
extern void drm_dma_takedown(struct drm_device *dev); extern void drm_dma_takedown(struct drm_device *dev);
extern void drm_free_buffer(struct drm_device *dev, struct drm_buf * buf); extern void drm_free_buffer(struct drm_device *dev, struct drm_buf * buf);
extern void drm_core_reclaim_buffers(struct drm_device *dev, struct file *filp); extern void drm_core_reclaim_buffers(struct drm_device *dev,
struct drm_file *filp);
/* IRQ support (drm_irq.h) */ /* IRQ support (drm_irq.h) */
extern int drm_control(struct inode *inode, struct file *filp, extern int drm_control(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern irqreturn_t drm_irq_handler(DRM_IRQ_ARGS); extern irqreturn_t drm_irq_handler(DRM_IRQ_ARGS);
extern int drm_irq_uninstall(struct drm_device *dev); extern int drm_irq_uninstall(struct drm_device *dev);
...@@ -971,7 +975,7 @@ extern void drm_driver_irq_preinstall(struct drm_device *dev); ...@@ -971,7 +975,7 @@ extern void drm_driver_irq_preinstall(struct drm_device *dev);
extern void drm_driver_irq_postinstall(struct drm_device *dev); extern void drm_driver_irq_postinstall(struct drm_device *dev);
extern void drm_driver_irq_uninstall(struct drm_device *dev); extern void drm_driver_irq_uninstall(struct drm_device *dev);
extern int drm_wait_vblank(struct inode *inode, struct file *filp, extern int drm_wait_vblank(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_vblank_wait(struct drm_device *dev, unsigned int *vbl_seq); extern int drm_vblank_wait(struct drm_device *dev, unsigned int *vbl_seq);
extern void drm_vbl_send_signals(struct drm_device *dev); extern void drm_vbl_send_signals(struct drm_device *dev);
...@@ -980,28 +984,28 @@ extern void drm_locked_tasklet(struct drm_device *dev, void(*func)(struct drm_de ...@@ -980,28 +984,28 @@ extern void drm_locked_tasklet(struct drm_device *dev, void(*func)(struct drm_de
/* AGP/GART support (drm_agpsupport.h) */ /* AGP/GART support (drm_agpsupport.h) */
extern struct drm_agp_head *drm_agp_init(struct drm_device *dev); extern struct drm_agp_head *drm_agp_init(struct drm_device *dev);
extern int drm_agp_acquire(struct drm_device *dev); extern int drm_agp_acquire(struct drm_device *dev);
extern int drm_agp_acquire_ioctl(struct inode *inode, struct file *filp, extern int drm_agp_acquire_ioctl(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_agp_release(struct drm_device *dev); extern int drm_agp_release(struct drm_device *dev);
extern int drm_agp_release_ioctl(struct inode *inode, struct file *filp, extern int drm_agp_release_ioctl(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_agp_enable(struct drm_device *dev, struct drm_agp_mode mode); extern int drm_agp_enable(struct drm_device *dev, struct drm_agp_mode mode);
extern int drm_agp_enable_ioctl(struct inode *inode, struct file *filp, extern int drm_agp_enable_ioctl(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_agp_info(struct drm_device *dev, struct drm_agp_info * info); extern int drm_agp_info(struct drm_device *dev, struct drm_agp_info * info);
extern int drm_agp_info_ioctl(struct inode *inode, struct file *filp, extern int drm_agp_info_ioctl(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_agp_alloc(struct drm_device *dev, struct drm_agp_buffer *request); extern int drm_agp_alloc(struct drm_device *dev, struct drm_agp_buffer *request);
extern int drm_agp_alloc_ioctl(struct inode *inode, struct file *filp, extern int drm_agp_alloc_ioctl(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_agp_free(struct drm_device *dev, struct drm_agp_buffer *request); extern int drm_agp_free(struct drm_device *dev, struct drm_agp_buffer *request);
extern int drm_agp_free_ioctl(struct inode *inode, struct file *filp, extern int drm_agp_free_ioctl(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_agp_unbind(struct drm_device *dev, struct drm_agp_binding *request); extern int drm_agp_unbind(struct drm_device *dev, struct drm_agp_binding *request);
extern int drm_agp_unbind_ioctl(struct inode *inode, struct file *filp, extern int drm_agp_unbind_ioctl(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_agp_bind(struct drm_device *dev, struct drm_agp_binding *request); extern int drm_agp_bind(struct drm_device *dev, struct drm_agp_binding *request);
extern int drm_agp_bind_ioctl(struct inode *inode, struct file *filp, extern int drm_agp_bind_ioctl(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern DRM_AGP_MEM *drm_agp_allocate_memory(struct agp_bridge_data *bridge, extern DRM_AGP_MEM *drm_agp_allocate_memory(struct agp_bridge_data *bridge,
size_t pages, u32 type); size_t pages, u32 type);
...@@ -1033,9 +1037,9 @@ extern int drm_proc_cleanup(int minor, ...@@ -1033,9 +1037,9 @@ extern int drm_proc_cleanup(int minor,
/* Scatter Gather Support (drm_scatter.h) */ /* Scatter Gather Support (drm_scatter.h) */
extern void drm_sg_cleanup(struct drm_sg_mem * entry); extern void drm_sg_cleanup(struct drm_sg_mem * entry);
extern int drm_sg_alloc(struct inode *inode, struct file *filp, extern int drm_sg_alloc(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int drm_sg_free(struct inode *inode, struct file *filp, extern int drm_sg_free(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
/* ATI PCIGART support (ati_pcigart.h) */ /* ATI PCIGART support (ati_pcigart.h) */
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
* Get AGP information. * Get AGP information.
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg pointer to a (output) drm_agp_info structure. * \param arg pointer to a (output) drm_agp_info structure.
* \return zero on success or a negative number on failure. * \return zero on success or a negative number on failure.
...@@ -71,11 +71,10 @@ int drm_agp_info(struct drm_device *dev, struct drm_agp_info *info) ...@@ -71,11 +71,10 @@ int drm_agp_info(struct drm_device *dev, struct drm_agp_info *info)
EXPORT_SYMBOL(drm_agp_info); EXPORT_SYMBOL(drm_agp_info);
int drm_agp_info_ioctl(struct inode *inode, struct file *filp, int drm_agp_info_ioctl(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_agp_info info; struct drm_agp_info info;
int err; int err;
...@@ -115,7 +114,7 @@ EXPORT_SYMBOL(drm_agp_acquire); ...@@ -115,7 +114,7 @@ EXPORT_SYMBOL(drm_agp_acquire);
* Acquire the AGP device (ioctl). * Acquire the AGP device (ioctl).
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg user argument. * \param arg user argument.
* \return zero on success or a negative number on failure. * \return zero on success or a negative number on failure.
...@@ -123,12 +122,10 @@ EXPORT_SYMBOL(drm_agp_acquire); ...@@ -123,12 +122,10 @@ EXPORT_SYMBOL(drm_agp_acquire);
* Verifies the AGP device hasn't been acquired before and calls * Verifies the AGP device hasn't been acquired before and calls
* \c agp_backend_acquire. * \c agp_backend_acquire.
*/ */
int drm_agp_acquire_ioctl(struct inode *inode, struct file *filp, int drm_agp_acquire_ioctl(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; return drm_agp_acquire((struct drm_device *) file_priv->head->dev);
return drm_agp_acquire((struct drm_device *) priv->head->dev);
} }
/** /**
...@@ -149,11 +146,10 @@ int drm_agp_release(struct drm_device * dev) ...@@ -149,11 +146,10 @@ int drm_agp_release(struct drm_device * dev)
} }
EXPORT_SYMBOL(drm_agp_release); EXPORT_SYMBOL(drm_agp_release);
int drm_agp_release_ioctl(struct inode *inode, struct file *filp, int drm_agp_release_ioctl(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
return drm_agp_release(dev); return drm_agp_release(dev);
} }
...@@ -182,11 +178,10 @@ int drm_agp_enable(struct drm_device * dev, struct drm_agp_mode mode) ...@@ -182,11 +178,10 @@ int drm_agp_enable(struct drm_device * dev, struct drm_agp_mode mode)
EXPORT_SYMBOL(drm_agp_enable); EXPORT_SYMBOL(drm_agp_enable);
int drm_agp_enable_ioctl(struct inode *inode, struct file *filp, int drm_agp_enable_ioctl(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_agp_mode mode; struct drm_agp_mode mode;
if (copy_from_user(&mode, (struct drm_agp_mode __user *) arg, sizeof(mode))) if (copy_from_user(&mode, (struct drm_agp_mode __user *) arg, sizeof(mode)))
...@@ -199,7 +194,7 @@ int drm_agp_enable_ioctl(struct inode *inode, struct file *filp, ...@@ -199,7 +194,7 @@ int drm_agp_enable_ioctl(struct inode *inode, struct file *filp,
* Allocate AGP memory. * Allocate AGP memory.
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv file private pointer.
* \param cmd command. * \param cmd command.
* \param arg pointer to a drm_agp_buffer structure. * \param arg pointer to a drm_agp_buffer structure.
* \return zero on success or a negative number on failure. * \return zero on success or a negative number on failure.
...@@ -241,11 +236,10 @@ int drm_agp_alloc(struct drm_device *dev, struct drm_agp_buffer *request) ...@@ -241,11 +236,10 @@ int drm_agp_alloc(struct drm_device *dev, struct drm_agp_buffer *request)
} }
EXPORT_SYMBOL(drm_agp_alloc); EXPORT_SYMBOL(drm_agp_alloc);
int drm_agp_alloc_ioctl(struct inode *inode, struct file *filp, int drm_agp_alloc_ioctl(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_agp_buffer request; struct drm_agp_buffer request;
struct drm_agp_buffer __user *argp = (void __user *)arg; struct drm_agp_buffer __user *argp = (void __user *)arg;
int err; int err;
...@@ -297,7 +291,7 @@ static struct drm_agp_mem *drm_agp_lookup_entry(struct drm_device * dev, ...@@ -297,7 +291,7 @@ static struct drm_agp_mem *drm_agp_lookup_entry(struct drm_device * dev,
* Unbind AGP memory from the GATT (ioctl). * Unbind AGP memory from the GATT (ioctl).
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg pointer to a drm_agp_binding structure. * \param arg pointer to a drm_agp_binding structure.
* \return zero on success or a negative number on failure. * \return zero on success or a negative number on failure.
...@@ -323,11 +317,10 @@ int drm_agp_unbind(struct drm_device *dev, struct drm_agp_binding *request) ...@@ -323,11 +317,10 @@ int drm_agp_unbind(struct drm_device *dev, struct drm_agp_binding *request)
} }
EXPORT_SYMBOL(drm_agp_unbind); EXPORT_SYMBOL(drm_agp_unbind);
int drm_agp_unbind_ioctl(struct inode *inode, struct file *filp, int drm_agp_unbind_ioctl(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_agp_binding request; struct drm_agp_binding request;
if (copy_from_user if (copy_from_user
...@@ -341,7 +334,7 @@ int drm_agp_unbind_ioctl(struct inode *inode, struct file *filp, ...@@ -341,7 +334,7 @@ int drm_agp_unbind_ioctl(struct inode *inode, struct file *filp,
* Bind AGP memory into the GATT (ioctl) * Bind AGP memory into the GATT (ioctl)
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg pointer to a drm_agp_binding structure. * \param arg pointer to a drm_agp_binding structure.
* \return zero on success or a negative number on failure. * \return zero on success or a negative number on failure.
...@@ -372,11 +365,10 @@ int drm_agp_bind(struct drm_device *dev, struct drm_agp_binding *request) ...@@ -372,11 +365,10 @@ int drm_agp_bind(struct drm_device *dev, struct drm_agp_binding *request)
} }
EXPORT_SYMBOL(drm_agp_bind); EXPORT_SYMBOL(drm_agp_bind);
int drm_agp_bind_ioctl(struct inode *inode, struct file *filp, int drm_agp_bind_ioctl(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_agp_binding request; struct drm_agp_binding request;
if (copy_from_user if (copy_from_user
...@@ -390,7 +382,7 @@ int drm_agp_bind_ioctl(struct inode *inode, struct file *filp, ...@@ -390,7 +382,7 @@ int drm_agp_bind_ioctl(struct inode *inode, struct file *filp,
* Free AGP memory (ioctl). * Free AGP memory (ioctl).
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg pointer to a drm_agp_buffer structure. * \param arg pointer to a drm_agp_buffer structure.
* \return zero on success or a negative number on failure. * \return zero on success or a negative number on failure.
...@@ -419,11 +411,10 @@ int drm_agp_free(struct drm_device *dev, struct drm_agp_buffer *request) ...@@ -419,11 +411,10 @@ int drm_agp_free(struct drm_device *dev, struct drm_agp_buffer *request)
} }
EXPORT_SYMBOL(drm_agp_free); EXPORT_SYMBOL(drm_agp_free);
int drm_agp_free_ioctl(struct inode *inode, struct file *filp, int drm_agp_free_ioctl(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_agp_buffer request; struct drm_agp_buffer request;
if (copy_from_user if (copy_from_user
......
...@@ -128,27 +128,26 @@ static int drm_remove_magic(struct drm_device * dev, drm_magic_t magic) ...@@ -128,27 +128,26 @@ static int drm_remove_magic(struct drm_device * dev, drm_magic_t magic)
* Get a unique magic number (ioctl). * Get a unique magic number (ioctl).
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg pointer to a resulting drm_auth structure. * \param arg pointer to a resulting drm_auth structure.
* \return zero on success, or a negative number on failure. * \return zero on success, or a negative number on failure.
* *
* If there is a magic number in drm_file::magic then use it, otherwise * If there is a magic number in drm_file::magic then use it, otherwise
* searches an unique non-zero magic number and add it associating it with \p * searches an unique non-zero magic number and add it associating it with \p
* filp. * file_priv.
*/ */
int drm_getmagic(struct inode *inode, struct file *filp, int drm_getmagic(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
static drm_magic_t sequence = 0; static drm_magic_t sequence = 0;
static DEFINE_SPINLOCK(lock); static DEFINE_SPINLOCK(lock);
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_auth auth; struct drm_auth auth;
/* Find unique magic */ /* Find unique magic */
if (priv->magic) { if (file_priv->magic) {
auth.magic = priv->magic; auth.magic = file_priv->magic;
} else { } else {
do { do {
spin_lock(&lock); spin_lock(&lock);
...@@ -157,8 +156,8 @@ int drm_getmagic(struct inode *inode, struct file *filp, ...@@ -157,8 +156,8 @@ int drm_getmagic(struct inode *inode, struct file *filp,
auth.magic = sequence++; auth.magic = sequence++;
spin_unlock(&lock); spin_unlock(&lock);
} while (drm_find_file(dev, auth.magic)); } while (drm_find_file(dev, auth.magic));
priv->magic = auth.magic; file_priv->magic = auth.magic;
drm_add_magic(dev, priv, auth.magic); drm_add_magic(dev, file_priv, auth.magic);
} }
DRM_DEBUG("%u\n", auth.magic); DRM_DEBUG("%u\n", auth.magic);
...@@ -171,18 +170,17 @@ int drm_getmagic(struct inode *inode, struct file *filp, ...@@ -171,18 +170,17 @@ int drm_getmagic(struct inode *inode, struct file *filp,
* Authenticate with a magic. * Authenticate with a magic.
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg pointer to a drm_auth structure. * \param arg pointer to a drm_auth structure.
* \return zero if authentication successed, or a negative number otherwise. * \return zero if authentication successed, or a negative number otherwise.
* *
* Checks if \p filp is associated with the magic number passed in \arg. * Checks if \p file_priv is associated with the magic number passed in \arg.
*/ */
int drm_authmagic(struct inode *inode, struct file *filp, int drm_authmagic(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_auth auth; struct drm_auth auth;
struct drm_file *file; struct drm_file *file;
......
...@@ -92,7 +92,7 @@ static int drm_map_handle(struct drm_device *dev, struct drm_hash_item *hash, ...@@ -92,7 +92,7 @@ static int drm_map_handle(struct drm_device *dev, struct drm_hash_item *hash,
* Ioctl to specify a range of memory that is available for mapping by a non-root process. * Ioctl to specify a range of memory that is available for mapping by a non-root process.
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg pointer to a drm_map structure. * \param arg pointer to a drm_map structure.
* \return zero on success or a negative value on error. * \return zero on success or a negative value on error.
...@@ -332,19 +332,15 @@ int drm_addmap(struct drm_device * dev, unsigned int offset, ...@@ -332,19 +332,15 @@ int drm_addmap(struct drm_device * dev, unsigned int offset,
EXPORT_SYMBOL(drm_addmap); EXPORT_SYMBOL(drm_addmap);
int drm_addmap_ioctl(struct inode *inode, struct file *filp, int drm_addmap_ioctl(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_map map; struct drm_map map;
struct drm_map_list *maplist; struct drm_map_list *maplist;
struct drm_map __user *argp = (void __user *)arg; struct drm_map __user *argp = (void __user *)arg;
int err; int err;
if (!(filp->f_mode & 3))
return -EACCES; /* Require read/write */
if (copy_from_user(&map, argp, sizeof(map))) { if (copy_from_user(&map, argp, sizeof(map))) {
return -EFAULT; return -EFAULT;
} }
...@@ -372,7 +368,7 @@ int drm_addmap_ioctl(struct inode *inode, struct file *filp, ...@@ -372,7 +368,7 @@ int drm_addmap_ioctl(struct inode *inode, struct file *filp,
* isn't in use. * isn't in use.
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg pointer to a struct drm_map structure. * \param arg pointer to a struct drm_map structure.
* \return zero on success or a negative value on error. * \return zero on success or a negative value on error.
...@@ -453,11 +449,10 @@ int drm_rmmap(struct drm_device *dev, drm_local_map_t *map) ...@@ -453,11 +449,10 @@ int drm_rmmap(struct drm_device *dev, drm_local_map_t *map)
* gets used by drivers that the server doesn't need to care about. This seems * gets used by drivers that the server doesn't need to care about. This seems
* unlikely. * unlikely.
*/ */
int drm_rmmap_ioctl(struct inode *inode, struct file *filp, int drm_rmmap_ioctl(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_map request; struct drm_map request;
drm_local_map_t *map = NULL; drm_local_map_t *map = NULL;
struct drm_map_list *r_list; struct drm_map_list *r_list;
...@@ -661,7 +656,7 @@ int drm_addbufs_agp(struct drm_device * dev, struct drm_buf_desc * request) ...@@ -661,7 +656,7 @@ int drm_addbufs_agp(struct drm_device * dev, struct drm_buf_desc * request)
buf->waiting = 0; buf->waiting = 0;
buf->pending = 0; buf->pending = 0;
init_waitqueue_head(&buf->dma_wait); init_waitqueue_head(&buf->dma_wait);
buf->filp = NULL; buf->file_priv = NULL;
buf->dev_priv_size = dev->driver->dev_priv_size; buf->dev_priv_size = dev->driver->dev_priv_size;
buf->dev_private = drm_alloc(buf->dev_priv_size, DRM_MEM_BUFS); buf->dev_private = drm_alloc(buf->dev_priv_size, DRM_MEM_BUFS);
...@@ -872,7 +867,7 @@ int drm_addbufs_pci(struct drm_device * dev, struct drm_buf_desc * request) ...@@ -872,7 +867,7 @@ int drm_addbufs_pci(struct drm_device * dev, struct drm_buf_desc * request)
buf->waiting = 0; buf->waiting = 0;
buf->pending = 0; buf->pending = 0;
init_waitqueue_head(&buf->dma_wait); init_waitqueue_head(&buf->dma_wait);
buf->filp = NULL; buf->file_priv = NULL;
buf->dev_priv_size = dev->driver->dev_priv_size; buf->dev_priv_size = dev->driver->dev_priv_size;
buf->dev_private = drm_alloc(buf->dev_priv_size, buf->dev_private = drm_alloc(buf->dev_priv_size,
...@@ -1050,7 +1045,7 @@ static int drm_addbufs_sg(struct drm_device * dev, struct drm_buf_desc * request ...@@ -1050,7 +1045,7 @@ static int drm_addbufs_sg(struct drm_device * dev, struct drm_buf_desc * request
buf->waiting = 0; buf->waiting = 0;
buf->pending = 0; buf->pending = 0;
init_waitqueue_head(&buf->dma_wait); init_waitqueue_head(&buf->dma_wait);
buf->filp = NULL; buf->file_priv = NULL;
buf->dev_priv_size = dev->driver->dev_priv_size; buf->dev_priv_size = dev->driver->dev_priv_size;
buf->dev_private = drm_alloc(buf->dev_priv_size, DRM_MEM_BUFS); buf->dev_private = drm_alloc(buf->dev_priv_size, DRM_MEM_BUFS);
...@@ -1211,7 +1206,7 @@ static int drm_addbufs_fb(struct drm_device * dev, struct drm_buf_desc * request ...@@ -1211,7 +1206,7 @@ static int drm_addbufs_fb(struct drm_device * dev, struct drm_buf_desc * request
buf->waiting = 0; buf->waiting = 0;
buf->pending = 0; buf->pending = 0;
init_waitqueue_head(&buf->dma_wait); init_waitqueue_head(&buf->dma_wait);
buf->filp = NULL; buf->file_priv = NULL;
buf->dev_priv_size = dev->driver->dev_priv_size; buf->dev_priv_size = dev->driver->dev_priv_size;
buf->dev_private = drm_alloc(buf->dev_priv_size, DRM_MEM_BUFS); buf->dev_private = drm_alloc(buf->dev_priv_size, DRM_MEM_BUFS);
...@@ -1275,7 +1270,7 @@ static int drm_addbufs_fb(struct drm_device * dev, struct drm_buf_desc * request ...@@ -1275,7 +1270,7 @@ static int drm_addbufs_fb(struct drm_device * dev, struct drm_buf_desc * request
* Add buffers for DMA transfers (ioctl). * Add buffers for DMA transfers (ioctl).
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg pointer to a struct drm_buf_desc request. * \param arg pointer to a struct drm_buf_desc request.
* \return zero on success or a negative number on failure. * \return zero on success or a negative number on failure.
...@@ -1285,12 +1280,11 @@ static int drm_addbufs_fb(struct drm_device * dev, struct drm_buf_desc * request ...@@ -1285,12 +1280,11 @@ static int drm_addbufs_fb(struct drm_device * dev, struct drm_buf_desc * request
* addbufs_sg() or addbufs_pci() for AGP, scatter-gather or consistent * addbufs_sg() or addbufs_pci() for AGP, scatter-gather or consistent
* PCI memory respectively. * PCI memory respectively.
*/ */
int drm_addbufs(struct inode *inode, struct file *filp, int drm_addbufs(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_buf_desc request; struct drm_buf_desc request;
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
int ret; int ret;
if (!drm_core_check_feature(dev, DRIVER_HAVE_DMA)) if (!drm_core_check_feature(dev, DRIVER_HAVE_DMA))
...@@ -1328,7 +1322,7 @@ int drm_addbufs(struct inode *inode, struct file *filp, ...@@ -1328,7 +1322,7 @@ int drm_addbufs(struct inode *inode, struct file *filp,
* large buffers can be used for image transfer). * large buffers can be used for image transfer).
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg pointer to a drm_buf_info structure. * \param arg pointer to a drm_buf_info structure.
* \return zero on success or a negative number on failure. * \return zero on success or a negative number on failure.
...@@ -1337,11 +1331,10 @@ int drm_addbufs(struct inode *inode, struct file *filp, ...@@ -1337,11 +1331,10 @@ int drm_addbufs(struct inode *inode, struct file *filp,
* lock, preventing of allocating more buffers after this call. Information * lock, preventing of allocating more buffers after this call. Information
* about each requested buffer is then copied into user space. * about each requested buffer is then copied into user space.
*/ */
int drm_infobufs(struct inode *inode, struct file *filp, int drm_infobufs(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_device_dma *dma = dev->dma; struct drm_device_dma *dma = dev->dma;
struct drm_buf_info request; struct drm_buf_info request;
struct drm_buf_info __user *argp = (void __user *)arg; struct drm_buf_info __user *argp = (void __user *)arg;
...@@ -1415,7 +1408,7 @@ int drm_infobufs(struct inode *inode, struct file *filp, ...@@ -1415,7 +1408,7 @@ int drm_infobufs(struct inode *inode, struct file *filp,
* Specifies a low and high water mark for buffer allocation * Specifies a low and high water mark for buffer allocation
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg a pointer to a drm_buf_desc structure. * \param arg a pointer to a drm_buf_desc structure.
* \return zero on success or a negative number on failure. * \return zero on success or a negative number on failure.
...@@ -1425,11 +1418,10 @@ int drm_infobufs(struct inode *inode, struct file *filp, ...@@ -1425,11 +1418,10 @@ int drm_infobufs(struct inode *inode, struct file *filp,
* *
* \note This ioctl is deprecated and mostly never used. * \note This ioctl is deprecated and mostly never used.
*/ */
int drm_markbufs(struct inode *inode, struct file *filp, int drm_markbufs(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_device_dma *dma = dev->dma; struct drm_device_dma *dma = dev->dma;
struct drm_buf_desc request; struct drm_buf_desc request;
int order; int order;
...@@ -1467,7 +1459,7 @@ int drm_markbufs(struct inode *inode, struct file *filp, ...@@ -1467,7 +1459,7 @@ int drm_markbufs(struct inode *inode, struct file *filp,
* Unreserve the buffers in list, previously reserved using drmDMA. * Unreserve the buffers in list, previously reserved using drmDMA.
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg pointer to a drm_buf_free structure. * \param arg pointer to a drm_buf_free structure.
* \return zero on success or a negative number on failure. * \return zero on success or a negative number on failure.
...@@ -1475,11 +1467,10 @@ int drm_markbufs(struct inode *inode, struct file *filp, ...@@ -1475,11 +1467,10 @@ int drm_markbufs(struct inode *inode, struct file *filp,
* Calls free_buffer() for each used buffer. * Calls free_buffer() for each used buffer.
* This function is primarily used for debugging. * This function is primarily used for debugging.
*/ */
int drm_freebufs(struct inode *inode, struct file *filp, int drm_freebufs(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_device_dma *dma = dev->dma; struct drm_device_dma *dma = dev->dma;
struct drm_buf_free request; struct drm_buf_free request;
int i; int i;
...@@ -1506,7 +1497,7 @@ int drm_freebufs(struct inode *inode, struct file *filp, ...@@ -1506,7 +1497,7 @@ int drm_freebufs(struct inode *inode, struct file *filp,
return -EINVAL; return -EINVAL;
} }
buf = dma->buflist[idx]; buf = dma->buflist[idx];
if (buf->filp != filp) { if (buf->file_priv != file_priv) {
DRM_ERROR("Process %d freeing buffer not owned\n", DRM_ERROR("Process %d freeing buffer not owned\n",
current->pid); current->pid);
return -EINVAL; return -EINVAL;
...@@ -1521,7 +1512,7 @@ int drm_freebufs(struct inode *inode, struct file *filp, ...@@ -1521,7 +1512,7 @@ int drm_freebufs(struct inode *inode, struct file *filp,
* Maps all of the DMA buffers into client-virtual space (ioctl). * Maps all of the DMA buffers into client-virtual space (ioctl).
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg pointer to a drm_buf_map structure. * \param arg pointer to a drm_buf_map structure.
* \return zero on success or a negative number on failure. * \return zero on success or a negative number on failure.
...@@ -1531,11 +1522,10 @@ int drm_freebufs(struct inode *inode, struct file *filp, ...@@ -1531,11 +1522,10 @@ int drm_freebufs(struct inode *inode, struct file *filp,
* offset equal to 0, which drm_mmap() interpretes as PCI buffers and calls * offset equal to 0, which drm_mmap() interpretes as PCI buffers and calls
* drm_mmap_dma(). * drm_mmap_dma().
*/ */
int drm_mapbufs(struct inode *inode, struct file *filp, int drm_mapbufs(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_device_dma *dma = dev->dma; struct drm_device_dma *dma = dev->dma;
struct drm_buf_map __user *argp = (void __user *)arg; struct drm_buf_map __user *argp = (void __user *)arg;
int retcode = 0; int retcode = 0;
...@@ -1577,13 +1567,13 @@ int drm_mapbufs(struct inode *inode, struct file *filp, ...@@ -1577,13 +1567,13 @@ int drm_mapbufs(struct inode *inode, struct file *filp,
} }
down_write(&current->mm->mmap_sem); down_write(&current->mm->mmap_sem);
virtual = do_mmap(filp, 0, map->size, virtual = do_mmap(file_priv->filp, 0, map->size,
PROT_READ | PROT_WRITE, PROT_READ | PROT_WRITE,
MAP_SHARED, token); MAP_SHARED, token);
up_write(&current->mm->mmap_sem); up_write(&current->mm->mmap_sem);
} else { } else {
down_write(&current->mm->mmap_sem); down_write(&current->mm->mmap_sem);
virtual = do_mmap(filp, 0, dma->byte_count, virtual = do_mmap(file_priv->filp, 0, dma->byte_count,
PROT_READ | PROT_WRITE, PROT_READ | PROT_WRITE,
MAP_SHARED, 0); MAP_SHARED, 0);
up_write(&current->mm->mmap_sem); up_write(&current->mm->mmap_sem);
......
...@@ -131,7 +131,7 @@ void drm_ctxbitmap_cleanup(struct drm_device * dev) ...@@ -131,7 +131,7 @@ void drm_ctxbitmap_cleanup(struct drm_device * dev)
* Get per-context SAREA. * Get per-context SAREA.
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg user argument pointing to a drm_ctx_priv_map structure. * \param arg user argument pointing to a drm_ctx_priv_map structure.
* \return zero on success or a negative number on failure. * \return zero on success or a negative number on failure.
...@@ -139,11 +139,10 @@ void drm_ctxbitmap_cleanup(struct drm_device * dev) ...@@ -139,11 +139,10 @@ void drm_ctxbitmap_cleanup(struct drm_device * dev)
* Gets the map from drm_device::ctx_idr with the handle specified and * Gets the map from drm_device::ctx_idr with the handle specified and
* returns its handle. * returns its handle.
*/ */
int drm_getsareactx(struct inode *inode, struct file *filp, int drm_getsareactx(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_ctx_priv_map __user *argp = (void __user *)arg; struct drm_ctx_priv_map __user *argp = (void __user *)arg;
struct drm_ctx_priv_map request; struct drm_ctx_priv_map request;
struct drm_map *map; struct drm_map *map;
...@@ -182,7 +181,7 @@ int drm_getsareactx(struct inode *inode, struct file *filp, ...@@ -182,7 +181,7 @@ int drm_getsareactx(struct inode *inode, struct file *filp,
* Set per-context SAREA. * Set per-context SAREA.
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg user argument pointing to a drm_ctx_priv_map structure. * \param arg user argument pointing to a drm_ctx_priv_map structure.
* \return zero on success or a negative number on failure. * \return zero on success or a negative number on failure.
...@@ -190,11 +189,10 @@ int drm_getsareactx(struct inode *inode, struct file *filp, ...@@ -190,11 +189,10 @@ int drm_getsareactx(struct inode *inode, struct file *filp,
* Searches the mapping specified in \p arg and update the entry in * Searches the mapping specified in \p arg and update the entry in
* drm_device::ctx_idr with it. * drm_device::ctx_idr with it.
*/ */
int drm_setsareactx(struct inode *inode, struct file *filp, int drm_setsareactx(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_ctx_priv_map request; struct drm_ctx_priv_map request;
struct drm_map *map = NULL; struct drm_map *map = NULL;
struct drm_map_list *r_list = NULL; struct drm_map_list *r_list = NULL;
...@@ -292,12 +290,12 @@ static int drm_context_switch_complete(struct drm_device * dev, int new) ...@@ -292,12 +290,12 @@ static int drm_context_switch_complete(struct drm_device * dev, int new)
* Reserve contexts. * Reserve contexts.
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg user argument pointing to a drm_ctx_res structure. * \param arg user argument pointing to a drm_ctx_res structure.
* \return zero on success or a negative number on failure. * \return zero on success or a negative number on failure.
*/ */
int drm_resctx(struct inode *inode, struct file *filp, int drm_resctx(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_ctx_res res; struct drm_ctx_res res;
...@@ -327,18 +325,17 @@ int drm_resctx(struct inode *inode, struct file *filp, ...@@ -327,18 +325,17 @@ int drm_resctx(struct inode *inode, struct file *filp,
* Add context. * Add context.
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg user argument pointing to a drm_ctx structure. * \param arg user argument pointing to a drm_ctx structure.
* \return zero on success or a negative number on failure. * \return zero on success or a negative number on failure.
* *
* Get a new handle for the context and copy to userspace. * Get a new handle for the context and copy to userspace.
*/ */
int drm_addctx(struct inode *inode, struct file *filp, int drm_addctx(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_ctx_list *ctx_entry; struct drm_ctx_list *ctx_entry;
struct drm_ctx __user *argp = (void __user *)arg; struct drm_ctx __user *argp = (void __user *)arg;
struct drm_ctx ctx; struct drm_ctx ctx;
...@@ -374,7 +371,7 @@ int drm_addctx(struct inode *inode, struct file *filp, ...@@ -374,7 +371,7 @@ int drm_addctx(struct inode *inode, struct file *filp,
INIT_LIST_HEAD(&ctx_entry->head); INIT_LIST_HEAD(&ctx_entry->head);
ctx_entry->handle = ctx.handle; ctx_entry->handle = ctx.handle;
ctx_entry->tag = priv; ctx_entry->tag = file_priv;
mutex_lock(&dev->ctxlist_mutex); mutex_lock(&dev->ctxlist_mutex);
list_add(&ctx_entry->head, &dev->ctxlist); list_add(&ctx_entry->head, &dev->ctxlist);
...@@ -386,7 +383,7 @@ int drm_addctx(struct inode *inode, struct file *filp, ...@@ -386,7 +383,7 @@ int drm_addctx(struct inode *inode, struct file *filp,
return 0; return 0;
} }
int drm_modctx(struct inode *inode, struct file *filp, int drm_modctx(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
/* This does nothing */ /* This does nothing */
...@@ -397,12 +394,12 @@ int drm_modctx(struct inode *inode, struct file *filp, ...@@ -397,12 +394,12 @@ int drm_modctx(struct inode *inode, struct file *filp,
* Get context. * Get context.
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg user argument pointing to a drm_ctx structure. * \param arg user argument pointing to a drm_ctx structure.
* \return zero on success or a negative number on failure. * \return zero on success or a negative number on failure.
*/ */
int drm_getctx(struct inode *inode, struct file *filp, int drm_getctx(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_ctx __user *argp = (void __user *)arg; struct drm_ctx __user *argp = (void __user *)arg;
...@@ -423,18 +420,17 @@ int drm_getctx(struct inode *inode, struct file *filp, ...@@ -423,18 +420,17 @@ int drm_getctx(struct inode *inode, struct file *filp,
* Switch context. * Switch context.
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg user argument pointing to a drm_ctx structure. * \param arg user argument pointing to a drm_ctx structure.
* \return zero on success or a negative number on failure. * \return zero on success or a negative number on failure.
* *
* Calls context_switch(). * Calls context_switch().
*/ */
int drm_switchctx(struct inode *inode, struct file *filp, int drm_switchctx(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_ctx ctx; struct drm_ctx ctx;
if (copy_from_user(&ctx, (struct drm_ctx __user *) arg, sizeof(ctx))) if (copy_from_user(&ctx, (struct drm_ctx __user *) arg, sizeof(ctx)))
...@@ -448,18 +444,17 @@ int drm_switchctx(struct inode *inode, struct file *filp, ...@@ -448,18 +444,17 @@ int drm_switchctx(struct inode *inode, struct file *filp,
* New context. * New context.
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg user argument pointing to a drm_ctx structure. * \param arg user argument pointing to a drm_ctx structure.
* \return zero on success or a negative number on failure. * \return zero on success or a negative number on failure.
* *
* Calls context_switch_complete(). * Calls context_switch_complete().
*/ */
int drm_newctx(struct inode *inode, struct file *filp, int drm_newctx(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_ctx ctx; struct drm_ctx ctx;
if (copy_from_user(&ctx, (struct drm_ctx __user *) arg, sizeof(ctx))) if (copy_from_user(&ctx, (struct drm_ctx __user *) arg, sizeof(ctx)))
...@@ -475,18 +470,17 @@ int drm_newctx(struct inode *inode, struct file *filp, ...@@ -475,18 +470,17 @@ int drm_newctx(struct inode *inode, struct file *filp,
* Remove context. * Remove context.
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg user argument pointing to a drm_ctx structure. * \param arg user argument pointing to a drm_ctx structure.
* \return zero on success or a negative number on failure. * \return zero on success or a negative number on failure.
* *
* If not the special kernel context, calls ctxbitmap_free() to free the specified context. * If not the special kernel context, calls ctxbitmap_free() to free the specified context.
*/ */
int drm_rmctx(struct inode *inode, struct file *filp, int drm_rmctx(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_ctx ctx; struct drm_ctx ctx;
if (copy_from_user(&ctx, (struct drm_ctx __user *) arg, sizeof(ctx))) if (copy_from_user(&ctx, (struct drm_ctx __user *) arg, sizeof(ctx)))
...@@ -494,7 +488,7 @@ int drm_rmctx(struct inode *inode, struct file *filp, ...@@ -494,7 +488,7 @@ int drm_rmctx(struct inode *inode, struct file *filp,
DRM_DEBUG("%d\n", ctx.handle); DRM_DEBUG("%d\n", ctx.handle);
if (ctx.handle == DRM_KERNEL_CONTEXT + 1) { if (ctx.handle == DRM_KERNEL_CONTEXT + 1) {
priv->remove_auth_on_close = 1; file_priv->remove_auth_on_close = 1;
} }
if (ctx.handle != DRM_KERNEL_CONTEXT) { if (ctx.handle != DRM_KERNEL_CONTEXT) {
if (dev->driver->context_dtor) if (dev->driver->context_dtor)
......
...@@ -136,7 +136,7 @@ void drm_free_buffer(struct drm_device *dev, struct drm_buf * buf) ...@@ -136,7 +136,7 @@ void drm_free_buffer(struct drm_device *dev, struct drm_buf * buf)
buf->waiting = 0; buf->waiting = 0;
buf->pending = 0; buf->pending = 0;
buf->filp = NULL; buf->file_priv = NULL;
buf->used = 0; buf->used = 0;
if (drm_core_check_feature(dev, DRIVER_DMA_QUEUE) if (drm_core_check_feature(dev, DRIVER_DMA_QUEUE)
...@@ -148,11 +148,12 @@ void drm_free_buffer(struct drm_device *dev, struct drm_buf * buf) ...@@ -148,11 +148,12 @@ void drm_free_buffer(struct drm_device *dev, struct drm_buf * buf)
/** /**
* Reclaim the buffers. * Reclaim the buffers.
* *
* \param filp file pointer. * \param file_priv DRM file private.
* *
* Frees each buffer associated with \p filp not already on the hardware. * Frees each buffer associated with \p file_priv not already on the hardware.
*/ */
void drm_core_reclaim_buffers(struct drm_device *dev, struct file *filp) void drm_core_reclaim_buffers(struct drm_device *dev,
struct drm_file *file_priv)
{ {
struct drm_device_dma *dma = dev->dma; struct drm_device_dma *dma = dev->dma;
int i; int i;
...@@ -160,7 +161,7 @@ void drm_core_reclaim_buffers(struct drm_device *dev, struct file *filp) ...@@ -160,7 +161,7 @@ void drm_core_reclaim_buffers(struct drm_device *dev, struct file *filp)
if (!dma) if (!dma)
return; return;
for (i = 0; i < dma->buf_count; i++) { for (i = 0; i < dma->buf_count; i++) {
if (dma->buflist[i]->filp == filp) { if (dma->buflist[i]->file_priv == file_priv) {
switch (dma->buflist[i]->list) { switch (dma->buflist[i]->list) {
case DRM_LIST_NONE: case DRM_LIST_NONE:
drm_free_buffer(dev, dma->buflist[i]); drm_free_buffer(dev, dma->buflist[i]);
......
...@@ -49,7 +49,7 @@ ...@@ -49,7 +49,7 @@
#include "drmP.h" #include "drmP.h"
#include "drm_core.h" #include "drm_core.h"
static int drm_version(struct inode *inode, struct file *filp, static int drm_version(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
/** Ioctl table */ /** Ioctl table */
...@@ -224,7 +224,7 @@ int drm_lastclose(struct drm_device * dev) ...@@ -224,7 +224,7 @@ int drm_lastclose(struct drm_device * dev)
if (dev->lock.hw_lock) { if (dev->lock.hw_lock) {
dev->sigdata.lock = dev->lock.hw_lock = NULL; /* SHM removed */ dev->sigdata.lock = dev->lock.hw_lock = NULL; /* SHM removed */
dev->lock.filp = NULL; dev->lock.file_priv = NULL;
wake_up_interruptible(&dev->lock.lock_queue); wake_up_interruptible(&dev->lock.lock_queue);
} }
mutex_unlock(&dev->struct_mutex); mutex_unlock(&dev->struct_mutex);
...@@ -418,11 +418,10 @@ module_exit(drm_core_exit); ...@@ -418,11 +418,10 @@ module_exit(drm_core_exit);
* *
* Fills in the version information in \p arg. * Fills in the version information in \p arg.
*/ */
static int drm_version(struct inode *inode, struct file *filp, static int drm_version(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_version __user *argp = (void __user *)arg; struct drm_version __user *argp = (void __user *)arg;
struct drm_version version; struct drm_version version;
int len; int len;
...@@ -446,7 +445,7 @@ static int drm_version(struct inode *inode, struct file *filp, ...@@ -446,7 +445,7 @@ static int drm_version(struct inode *inode, struct file *filp,
* Called whenever a process performs an ioctl on /dev/drm. * Called whenever a process performs an ioctl on /dev/drm.
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg user argument. * \param arg user argument.
* \return zero on success or negative number on failure. * \return zero on success or negative number on failure.
...@@ -457,8 +456,8 @@ static int drm_version(struct inode *inode, struct file *filp, ...@@ -457,8 +456,8 @@ static int drm_version(struct inode *inode, struct file *filp,
int drm_ioctl(struct inode *inode, struct file *filp, int drm_ioctl(struct inode *inode, struct file *filp,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_file *file_priv = filp->private_data;
struct drm_device *dev = priv->head->dev; struct drm_device *dev = file_priv->head->dev;
drm_ioctl_desc_t *ioctl; drm_ioctl_desc_t *ioctl;
drm_ioctl_t *func; drm_ioctl_t *func;
unsigned int nr = DRM_IOCTL_NR(cmd); unsigned int nr = DRM_IOCTL_NR(cmd);
...@@ -466,12 +465,12 @@ int drm_ioctl(struct inode *inode, struct file *filp, ...@@ -466,12 +465,12 @@ int drm_ioctl(struct inode *inode, struct file *filp,
atomic_inc(&dev->ioctl_count); atomic_inc(&dev->ioctl_count);
atomic_inc(&dev->counts[_DRM_STAT_IOCTLS]); atomic_inc(&dev->counts[_DRM_STAT_IOCTLS]);
++priv->ioctl_count; ++file_priv->ioctl_count;
DRM_DEBUG("pid=%d, cmd=0x%02x, nr=0x%02x, dev 0x%lx, auth=%d\n", DRM_DEBUG("pid=%d, cmd=0x%02x, nr=0x%02x, dev 0x%lx, auth=%d\n",
current->pid, cmd, nr, current->pid, cmd, nr,
(long)old_encode_dev(priv->head->device), (long)old_encode_dev(file_priv->head->device),
priv->authenticated); file_priv->authenticated);
if ((nr >= DRM_CORE_IOCTL_COUNT) && if ((nr >= DRM_CORE_IOCTL_COUNT) &&
((nr < DRM_COMMAND_BASE) || (nr >= DRM_COMMAND_END))) ((nr < DRM_COMMAND_BASE) || (nr >= DRM_COMMAND_END)))
...@@ -493,11 +492,11 @@ int drm_ioctl(struct inode *inode, struct file *filp, ...@@ -493,11 +492,11 @@ int drm_ioctl(struct inode *inode, struct file *filp,
DRM_DEBUG("no function\n"); DRM_DEBUG("no function\n");
retcode = -EINVAL; retcode = -EINVAL;
} else if (((ioctl->flags & DRM_ROOT_ONLY) && !capable(CAP_SYS_ADMIN)) || } else if (((ioctl->flags & DRM_ROOT_ONLY) && !capable(CAP_SYS_ADMIN)) ||
((ioctl->flags & DRM_AUTH) && !priv->authenticated) || ((ioctl->flags & DRM_AUTH) && !file_priv->authenticated) ||
((ioctl->flags & DRM_MASTER) && !priv->master)) { ((ioctl->flags & DRM_MASTER) && !file_priv->master)) {
retcode = -EACCES; retcode = -EACCES;
} else { } else {
retcode = func(inode, filp, cmd, arg); retcode = func(inode, file_priv, cmd, arg);
} }
err_i1: err_i1:
......
...@@ -242,6 +242,7 @@ static int drm_open_helper(struct inode *inode, struct file *filp, ...@@ -242,6 +242,7 @@ static int drm_open_helper(struct inode *inode, struct file *filp,
memset(priv, 0, sizeof(*priv)); memset(priv, 0, sizeof(*priv));
filp->private_data = priv; filp->private_data = priv;
priv->filp = filp;
priv->uid = current->euid; priv->uid = current->euid;
priv->pid = current->pid; priv->pid = current->pid;
priv->minor = minor; priv->minor = minor;
...@@ -312,7 +313,7 @@ EXPORT_SYMBOL(drm_fasync); ...@@ -312,7 +313,7 @@ EXPORT_SYMBOL(drm_fasync);
* Release file. * Release file.
* *
* \param inode device inode * \param inode device inode
* \param filp file pointer. * \param file_priv DRM file private.
* \return zero on success or a negative number on failure. * \return zero on success or a negative number on failure.
* *
* If the hardware lock is held then free it, and take it again for the kernel * If the hardware lock is held then free it, and take it again for the kernel
...@@ -322,29 +323,28 @@ EXPORT_SYMBOL(drm_fasync); ...@@ -322,29 +323,28 @@ EXPORT_SYMBOL(drm_fasync);
*/ */
int drm_release(struct inode *inode, struct file *filp) int drm_release(struct inode *inode, struct file *filp)
{ {
struct drm_file *priv = filp->private_data; struct drm_file *file_priv = filp->private_data;
struct drm_device *dev; struct drm_device *dev = file_priv->head->dev;
int retcode = 0; int retcode = 0;
lock_kernel(); lock_kernel();
dev = priv->head->dev;
DRM_DEBUG("open_count = %d\n", dev->open_count); DRM_DEBUG("open_count = %d\n", dev->open_count);
if (dev->driver->preclose) if (dev->driver->preclose)
dev->driver->preclose(dev, filp); dev->driver->preclose(dev, file_priv);
/* ======================================================== /* ========================================================
* Begin inline drm_release * Begin inline drm_release
*/ */
DRM_DEBUG("pid = %d, device = 0x%lx, open_count = %d\n", DRM_DEBUG("pid = %d, device = 0x%lx, open_count = %d\n",
current->pid, (long)old_encode_dev(priv->head->device), current->pid, (long)old_encode_dev(file_priv->head->device),
dev->open_count); dev->open_count);
if (dev->driver->reclaim_buffers_locked && dev->lock.hw_lock) { if (dev->driver->reclaim_buffers_locked && dev->lock.hw_lock) {
if (drm_i_have_hw_lock(filp)) { if (drm_i_have_hw_lock(file_priv)) {
dev->driver->reclaim_buffers_locked(dev, filp); dev->driver->reclaim_buffers_locked(dev, file_priv);
} else { } else {
unsigned long _end=jiffies + 3*DRM_HZ; unsigned long _end=jiffies + 3*DRM_HZ;
int locked = 0; int locked = 0;
...@@ -370,7 +370,7 @@ int drm_release(struct inode *inode, struct file *filp) ...@@ -370,7 +370,7 @@ int drm_release(struct inode *inode, struct file *filp)
"\tI will go on reclaiming the buffers anyway.\n"); "\tI will go on reclaiming the buffers anyway.\n");
} }
dev->driver->reclaim_buffers_locked(dev, filp); dev->driver->reclaim_buffers_locked(dev, file_priv);
drm_idlelock_release(&dev->lock); drm_idlelock_release(&dev->lock);
} }
} }
...@@ -378,12 +378,12 @@ int drm_release(struct inode *inode, struct file *filp) ...@@ -378,12 +378,12 @@ int drm_release(struct inode *inode, struct file *filp)
if (dev->driver->reclaim_buffers_idlelocked && dev->lock.hw_lock) { if (dev->driver->reclaim_buffers_idlelocked && dev->lock.hw_lock) {
drm_idlelock_take(&dev->lock); drm_idlelock_take(&dev->lock);
dev->driver->reclaim_buffers_idlelocked(dev, filp); dev->driver->reclaim_buffers_idlelocked(dev, file_priv);
drm_idlelock_release(&dev->lock); drm_idlelock_release(&dev->lock);
} }
if (drm_i_have_hw_lock(filp)) { if (drm_i_have_hw_lock(file_priv)) {
DRM_DEBUG("File %p released, freeing lock for context %d\n", DRM_DEBUG("File %p released, freeing lock for context %d\n",
filp, _DRM_LOCKING_CONTEXT(dev->lock.hw_lock->lock)); filp, _DRM_LOCKING_CONTEXT(dev->lock.hw_lock->lock));
...@@ -394,7 +394,7 @@ int drm_release(struct inode *inode, struct file *filp) ...@@ -394,7 +394,7 @@ int drm_release(struct inode *inode, struct file *filp)
if (drm_core_check_feature(dev, DRIVER_HAVE_DMA) && if (drm_core_check_feature(dev, DRIVER_HAVE_DMA) &&
!dev->driver->reclaim_buffers_locked) { !dev->driver->reclaim_buffers_locked) {
dev->driver->reclaim_buffers(dev, filp); dev->driver->reclaim_buffers(dev, file_priv);
} }
drm_fasync(-1, filp, 0); drm_fasync(-1, filp, 0);
...@@ -404,7 +404,7 @@ int drm_release(struct inode *inode, struct file *filp) ...@@ -404,7 +404,7 @@ int drm_release(struct inode *inode, struct file *filp)
struct drm_ctx_list *pos, *n; struct drm_ctx_list *pos, *n;
list_for_each_entry_safe(pos, n, &dev->ctxlist, head) { list_for_each_entry_safe(pos, n, &dev->ctxlist, head) {
if (pos->tag == priv && if (pos->tag == file_priv &&
pos->handle != DRM_KERNEL_CONTEXT) { pos->handle != DRM_KERNEL_CONTEXT) {
if (dev->driver->context_dtor) if (dev->driver->context_dtor)
dev->driver->context_dtor(dev, dev->driver->context_dtor(dev,
...@@ -421,18 +421,18 @@ int drm_release(struct inode *inode, struct file *filp) ...@@ -421,18 +421,18 @@ int drm_release(struct inode *inode, struct file *filp)
mutex_unlock(&dev->ctxlist_mutex); mutex_unlock(&dev->ctxlist_mutex);
mutex_lock(&dev->struct_mutex); mutex_lock(&dev->struct_mutex);
if (priv->remove_auth_on_close == 1) { if (file_priv->remove_auth_on_close == 1) {
struct drm_file *temp; struct drm_file *temp;
list_for_each_entry(temp, &dev->filelist, lhead) list_for_each_entry(temp, &dev->filelist, lhead)
temp->authenticated = 0; temp->authenticated = 0;
} }
list_del(&priv->lhead); list_del(&file_priv->lhead);
mutex_unlock(&dev->struct_mutex); mutex_unlock(&dev->struct_mutex);
if (dev->driver->postclose) if (dev->driver->postclose)
dev->driver->postclose(dev, priv); dev->driver->postclose(dev, file_priv);
drm_free(priv, sizeof(*priv), DRM_MEM_FILES); drm_free(file_priv, sizeof(*file_priv), DRM_MEM_FILES);
/* ======================================================== /* ========================================================
* End inline drm_release * End inline drm_release
......
...@@ -1040,7 +1040,7 @@ drm_ioctl_compat_t *drm_compat_ioctls[] = { ...@@ -1040,7 +1040,7 @@ drm_ioctl_compat_t *drm_compat_ioctls[] = {
* Called whenever a 32-bit process running under a 64-bit kernel * Called whenever a 32-bit process running under a 64-bit kernel
* performs an ioctl on /dev/drm. * performs an ioctl on /dev/drm.
* *
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg user argument. * \param arg user argument.
* \return zero on success or negative number on failure. * \return zero on success or negative number on failure.
......
...@@ -42,18 +42,17 @@ ...@@ -42,18 +42,17 @@
* Get the bus id. * Get the bus id.
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg user argument, pointing to a drm_unique structure. * \param arg user argument, pointing to a drm_unique structure.
* \return zero on success or a negative number on failure. * \return zero on success or a negative number on failure.
* *
* Copies the bus id from drm_device::unique into user space. * Copies the bus id from drm_device::unique into user space.
*/ */
int drm_getunique(struct inode *inode, struct file *filp, int drm_getunique(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_unique __user *argp = (void __user *)arg; struct drm_unique __user *argp = (void __user *)arg;
struct drm_unique u; struct drm_unique u;
...@@ -73,7 +72,7 @@ int drm_getunique(struct inode *inode, struct file *filp, ...@@ -73,7 +72,7 @@ int drm_getunique(struct inode *inode, struct file *filp,
* Set the bus id. * Set the bus id.
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg user argument, pointing to a drm_unique structure. * \param arg user argument, pointing to a drm_unique structure.
* \return zero on success or a negative number on failure. * \return zero on success or a negative number on failure.
...@@ -83,11 +82,10 @@ int drm_getunique(struct inode *inode, struct file *filp, ...@@ -83,11 +82,10 @@ int drm_getunique(struct inode *inode, struct file *filp,
* in interface version 1.1 and will return EBUSY when setversion has requested * in interface version 1.1 and will return EBUSY when setversion has requested
* version 1.1 or greater. * version 1.1 or greater.
*/ */
int drm_setunique(struct inode *inode, struct file *filp, int drm_setunique(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_unique u; struct drm_unique u;
int domain, bus, slot, func, ret; int domain, bus, slot, func, ret;
...@@ -172,7 +170,7 @@ static int drm_set_busid(struct drm_device * dev) ...@@ -172,7 +170,7 @@ static int drm_set_busid(struct drm_device * dev)
* Get a mapping information. * Get a mapping information.
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg user argument, pointing to a drm_map structure. * \param arg user argument, pointing to a drm_map structure.
* *
...@@ -181,11 +179,10 @@ static int drm_set_busid(struct drm_device * dev) ...@@ -181,11 +179,10 @@ static int drm_set_busid(struct drm_device * dev)
* Searches for the mapping with the specified offset and copies its information * Searches for the mapping with the specified offset and copies its information
* into userspace * into userspace
*/ */
int drm_getmap(struct inode *inode, struct file *filp, int drm_getmap(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_map __user *argp = (void __user *)arg; struct drm_map __user *argp = (void __user *)arg;
struct drm_map map; struct drm_map map;
struct drm_map_list *r_list = NULL; struct drm_map_list *r_list = NULL;
...@@ -233,7 +230,7 @@ int drm_getmap(struct inode *inode, struct file *filp, ...@@ -233,7 +230,7 @@ int drm_getmap(struct inode *inode, struct file *filp,
* Get client information. * Get client information.
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg user argument, pointing to a drm_client structure. * \param arg user argument, pointing to a drm_client structure.
* *
...@@ -242,11 +239,10 @@ int drm_getmap(struct inode *inode, struct file *filp, ...@@ -242,11 +239,10 @@ int drm_getmap(struct inode *inode, struct file *filp,
* Searches for the client with the specified index and copies its information * Searches for the client with the specified index and copies its information
* into userspace * into userspace
*/ */
int drm_getclient(struct inode *inode, struct file *filp, int drm_getclient(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_client __user *argp = (struct drm_client __user *)arg; struct drm_client __user *argp = (struct drm_client __user *)arg;
struct drm_client client; struct drm_client client;
struct drm_file *pt; struct drm_file *pt;
...@@ -285,17 +281,16 @@ int drm_getclient(struct inode *inode, struct file *filp, ...@@ -285,17 +281,16 @@ int drm_getclient(struct inode *inode, struct file *filp,
* Get statistics information. * Get statistics information.
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg user argument, pointing to a drm_stats structure. * \param arg user argument, pointing to a drm_stats structure.
* *
* \return zero on success or a negative number on failure. * \return zero on success or a negative number on failure.
*/ */
int drm_getstats(struct inode *inode, struct file *filp, int drm_getstats(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_stats stats; struct drm_stats stats;
int i; int i;
...@@ -325,7 +320,7 @@ int drm_getstats(struct inode *inode, struct file *filp, ...@@ -325,7 +320,7 @@ int drm_getstats(struct inode *inode, struct file *filp,
* Setversion ioctl. * Setversion ioctl.
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg user argument, pointing to a drm_lock structure. * \param arg user argument, pointing to a drm_lock structure.
* \return zero on success or negative number on failure. * \return zero on success or negative number on failure.
...@@ -381,7 +376,7 @@ int drm_setversion(DRM_IOCTL_ARGS) ...@@ -381,7 +376,7 @@ int drm_setversion(DRM_IOCTL_ARGS)
} }
/** No-op ioctl. */ /** No-op ioctl. */
int drm_noop(struct inode *inode, struct file *filp, unsigned int cmd, int drm_noop(struct inode *inode, struct drm_file *file_priv, unsigned int cmd,
unsigned long arg) unsigned long arg)
{ {
DRM_DEBUG("\n"); DRM_DEBUG("\n");
......
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
* Get interrupt from bus id. * Get interrupt from bus id.
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg user argument, pointing to a drm_irq_busid structure. * \param arg user argument, pointing to a drm_irq_busid structure.
* \return zero on success or a negative number on failure. * \return zero on success or a negative number on failure.
...@@ -50,11 +50,10 @@ ...@@ -50,11 +50,10 @@
* This IOCTL is deprecated, and will now return EINVAL for any busid not equal * This IOCTL is deprecated, and will now return EINVAL for any busid not equal
* to that of the device that this DRM instance attached to. * to that of the device that this DRM instance attached to.
*/ */
int drm_irq_by_busid(struct inode *inode, struct file *filp, int drm_irq_by_busid(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_irq_busid __user *argp = (void __user *)arg; struct drm_irq_busid __user *argp = (void __user *)arg;
struct drm_irq_busid p; struct drm_irq_busid p;
...@@ -187,18 +186,17 @@ EXPORT_SYMBOL(drm_irq_uninstall); ...@@ -187,18 +186,17 @@ EXPORT_SYMBOL(drm_irq_uninstall);
* IRQ control ioctl. * IRQ control ioctl.
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg user argument, pointing to a drm_control structure. * \param arg user argument, pointing to a drm_control structure.
* \return zero on success or a negative number on failure. * \return zero on success or a negative number on failure.
* *
* Calls irq_install() or irq_uninstall() according to \p arg. * Calls irq_install() or irq_uninstall() according to \p arg.
*/ */
int drm_control(struct inode *inode, struct file *filp, int drm_control(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_control ctl; struct drm_control ctl;
/* if we haven't irq we fallback for compatibility reasons - this used to be a separate function in drm_dma.h */ /* if we haven't irq we fallback for compatibility reasons - this used to be a separate function in drm_dma.h */
...@@ -227,7 +225,7 @@ int drm_control(struct inode *inode, struct file *filp, ...@@ -227,7 +225,7 @@ int drm_control(struct inode *inode, struct file *filp,
* Wait for VBLANK. * Wait for VBLANK.
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param data user argument, pointing to a drm_wait_vblank structure. * \param data user argument, pointing to a drm_wait_vblank structure.
* \return zero on success or a negative number on failure. * \return zero on success or a negative number on failure.
...@@ -244,8 +242,7 @@ int drm_control(struct inode *inode, struct file *filp, ...@@ -244,8 +242,7 @@ int drm_control(struct inode *inode, struct file *filp,
*/ */
int drm_wait_vblank(DRM_IOCTL_ARGS) int drm_wait_vblank(DRM_IOCTL_ARGS)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
union drm_wait_vblank __user *argp = (void __user *)data; union drm_wait_vblank __user *argp = (void __user *)data;
union drm_wait_vblank vblwait; union drm_wait_vblank vblwait;
struct timeval now; struct timeval now;
......
...@@ -41,23 +41,22 @@ static int drm_notifier(void *priv); ...@@ -41,23 +41,22 @@ static int drm_notifier(void *priv);
* Lock ioctl. * Lock ioctl.
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg user argument, pointing to a drm_lock structure. * \param arg user argument, pointing to a drm_lock structure.
* \return zero on success or negative number on failure. * \return zero on success or negative number on failure.
* *
* Add the current task to the lock wait queue, and attempt to take to lock. * Add the current task to the lock wait queue, and attempt to take to lock.
*/ */
int drm_lock(struct inode *inode, struct file *filp, int drm_lock(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
DECLARE_WAITQUEUE(entry, current); DECLARE_WAITQUEUE(entry, current);
struct drm_lock lock; struct drm_lock lock;
int ret = 0; int ret = 0;
++priv->lock_count; ++file_priv->lock_count;
if (copy_from_user(&lock, (struct drm_lock __user *) arg, sizeof(lock))) if (copy_from_user(&lock, (struct drm_lock __user *) arg, sizeof(lock)))
return -EFAULT; return -EFAULT;
...@@ -88,7 +87,7 @@ int drm_lock(struct inode *inode, struct file *filp, ...@@ -88,7 +87,7 @@ int drm_lock(struct inode *inode, struct file *filp,
break; break;
} }
if (drm_lock_take(&dev->lock, lock.context)) { if (drm_lock_take(&dev->lock, lock.context)) {
dev->lock.filp = filp; dev->lock.file_priv = file_priv;
dev->lock.lock_time = jiffies; dev->lock.lock_time = jiffies;
atomic_inc(&dev->counts[_DRM_STAT_LOCKS]); atomic_inc(&dev->counts[_DRM_STAT_LOCKS]);
break; /* Got lock */ break; /* Got lock */
...@@ -142,18 +141,17 @@ int drm_lock(struct inode *inode, struct file *filp, ...@@ -142,18 +141,17 @@ int drm_lock(struct inode *inode, struct file *filp,
* Unlock ioctl. * Unlock ioctl.
* *
* \param inode device inode. * \param inode device inode.
* \param filp file pointer. * \param file_priv DRM file private.
* \param cmd command. * \param cmd command.
* \param arg user argument, pointing to a drm_lock structure. * \param arg user argument, pointing to a drm_lock structure.
* \return zero on success or negative number on failure. * \return zero on success or negative number on failure.
* *
* Transfer and free the lock. * Transfer and free the lock.
*/ */
int drm_unlock(struct inode *inode, struct file *filp, int drm_unlock(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_lock lock; struct drm_lock lock;
unsigned long irqflags; unsigned long irqflags;
...@@ -257,7 +255,7 @@ static int drm_lock_transfer(struct drm_lock_data *lock_data, ...@@ -257,7 +255,7 @@ static int drm_lock_transfer(struct drm_lock_data *lock_data,
unsigned int old, new, prev; unsigned int old, new, prev;
volatile unsigned int *lock = &lock_data->hw_lock->lock; volatile unsigned int *lock = &lock_data->hw_lock->lock;
lock_data->filp = NULL; lock_data->file_priv = NULL;
do { do {
old = *lock; old = *lock;
new = context | _DRM_LOCK_HELD; new = context | _DRM_LOCK_HELD;
...@@ -390,13 +388,13 @@ void drm_idlelock_release(struct drm_lock_data *lock_data) ...@@ -390,13 +388,13 @@ void drm_idlelock_release(struct drm_lock_data *lock_data)
EXPORT_SYMBOL(drm_idlelock_release); EXPORT_SYMBOL(drm_idlelock_release);
int drm_i_have_hw_lock(struct file *filp) int drm_i_have_hw_lock(struct drm_file *file_priv)
{ {
DRM_DEVICE; DRM_DEVICE;
return (priv->lock_count && dev->lock.hw_lock && return (file_priv->lock_count && dev->lock.hw_lock &&
_DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock) && _DRM_LOCK_IS_HELD(dev->lock.hw_lock->lock) &&
dev->lock.filp == filp); dev->lock.file_priv == file_priv);
} }
EXPORT_SYMBOL(drm_i_have_hw_lock); EXPORT_SYMBOL(drm_i_have_hw_lock);
...@@ -6,10 +6,8 @@ ...@@ -6,10 +6,8 @@
#include <linux/interrupt.h> /* For task queue support */ #include <linux/interrupt.h> /* For task queue support */
#include <linux/delay.h> #include <linux/delay.h>
/** File pointer type */
#define DRMFILE struct file *
/** Ioctl arguments */ /** Ioctl arguments */
#define DRM_IOCTL_ARGS struct inode *inode, struct file *filp, unsigned int cmd, unsigned long data #define DRM_IOCTL_ARGS struct inode *inode, struct drm_file *file_priv, unsigned int cmd, unsigned long data
/** Current process ID */ /** Current process ID */
#define DRM_CURRENTPID current->pid #define DRM_CURRENTPID current->pid
#define DRM_SUSER(p) capable(CAP_SYS_ADMIN) #define DRM_SUSER(p) capable(CAP_SYS_ADMIN)
...@@ -33,8 +31,7 @@ ...@@ -33,8 +31,7 @@
/** Read/write memory barrier */ /** Read/write memory barrier */
#define DRM_MEMORYBARRIER() mb() #define DRM_MEMORYBARRIER() mb()
/** DRM device local declaration */ /** DRM device local declaration */
#define DRM_DEVICE struct drm_file *priv = filp->private_data; \ #define DRM_DEVICE struct drm_device *dev = file_priv->head->dev
struct drm_device *dev = priv->head->dev
/** IRQ handler arguments and return type and values */ /** IRQ handler arguments and return type and values */
#define DRM_IRQ_ARGS int irq, void *arg #define DRM_IRQ_ARGS int irq, void *arg
...@@ -93,8 +90,6 @@ static __inline__ int mtrr_del(int reg, unsigned long base, unsigned long size) ...@@ -93,8 +90,6 @@ static __inline__ int mtrr_del(int reg, unsigned long base, unsigned long size)
#define DRM_GET_USER_UNCHECKED(val, uaddr) \ #define DRM_GET_USER_UNCHECKED(val, uaddr) \
__get_user(val, uaddr) __get_user(val, uaddr)
#define DRM_GET_PRIV_WITH_RETURN(_priv, _filp) _priv = _filp->private_data
#define DRM_HZ HZ #define DRM_HZ HZ
#define DRM_WAIT_ON( ret, queue, timeout, condition ) \ #define DRM_WAIT_ON( ret, queue, timeout, condition ) \
......
...@@ -62,11 +62,10 @@ void drm_sg_cleanup(struct drm_sg_mem * entry) ...@@ -62,11 +62,10 @@ void drm_sg_cleanup(struct drm_sg_mem * entry)
# define ScatterHandle(x) (unsigned int)(x) # define ScatterHandle(x) (unsigned int)(x)
#endif #endif
int drm_sg_alloc(struct inode *inode, struct file *filp, int drm_sg_alloc(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_scatter_gather __user *argp = (void __user *)arg; struct drm_scatter_gather __user *argp = (void __user *)arg;
struct drm_scatter_gather request; struct drm_scatter_gather request;
struct drm_sg_mem *entry; struct drm_sg_mem *entry;
...@@ -198,11 +197,10 @@ int drm_sg_alloc(struct inode *inode, struct file *filp, ...@@ -198,11 +197,10 @@ int drm_sg_alloc(struct inode *inode, struct file *filp,
return -ENOMEM; return -ENOMEM;
} }
int drm_sg_free(struct inode *inode, struct file *filp, int drm_sg_free(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_scatter_gather request; struct drm_scatter_gather request;
struct drm_sg_mem *entry; struct drm_sg_mem *entry;
......
...@@ -463,7 +463,7 @@ static void drm_vm_close(struct vm_area_struct *vma) ...@@ -463,7 +463,7 @@ static void drm_vm_close(struct vm_area_struct *vma)
/** /**
* mmap DMA memory. * mmap DMA memory.
* *
* \param filp file pointer. * \param file_priv DRM file private.
* \param vma virtual memory area. * \param vma virtual memory area.
* \return zero on success or a negative number on failure. * \return zero on success or a negative number on failure.
* *
...@@ -533,7 +533,7 @@ EXPORT_SYMBOL(drm_core_get_reg_ofs); ...@@ -533,7 +533,7 @@ EXPORT_SYMBOL(drm_core_get_reg_ofs);
/** /**
* mmap DMA memory. * mmap DMA memory.
* *
* \param filp file pointer. * \param file_priv DRM file private.
* \param vma virtual memory area. * \param vma virtual memory area.
* \return zero on success or a negative number on failure. * \return zero on success or a negative number on failure.
* *
......
...@@ -120,10 +120,9 @@ static const struct file_operations i810_buffer_fops = { ...@@ -120,10 +120,9 @@ static const struct file_operations i810_buffer_fops = {
.fasync = drm_fasync, .fasync = drm_fasync,
}; };
static int i810_map_buffer(struct drm_buf * buf, struct file *filp) static int i810_map_buffer(struct drm_buf * buf, struct drm_file *file_priv)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
drm_i810_buf_priv_t *buf_priv = buf->dev_private; drm_i810_buf_priv_t *buf_priv = buf->dev_private;
drm_i810_private_t *dev_priv = dev->dev_private; drm_i810_private_t *dev_priv = dev->dev_private;
const struct file_operations *old_fops; const struct file_operations *old_fops;
...@@ -133,14 +132,14 @@ static int i810_map_buffer(struct drm_buf * buf, struct file *filp) ...@@ -133,14 +132,14 @@ static int i810_map_buffer(struct drm_buf * buf, struct file *filp)
return -EINVAL; return -EINVAL;
down_write(&current->mm->mmap_sem); down_write(&current->mm->mmap_sem);
old_fops = filp->f_op; old_fops = file_priv->filp->f_op;
filp->f_op = &i810_buffer_fops; file_priv->filp->f_op = &i810_buffer_fops;
dev_priv->mmap_buffer = buf; dev_priv->mmap_buffer = buf;
buf_priv->virtual = (void *)do_mmap(filp, 0, buf->total, buf_priv->virtual = (void *)do_mmap(file_priv->filp, 0, buf->total,
PROT_READ | PROT_WRITE, PROT_READ | PROT_WRITE,
MAP_SHARED, buf->bus_address); MAP_SHARED, buf->bus_address);
dev_priv->mmap_buffer = NULL; dev_priv->mmap_buffer = NULL;
filp->f_op = old_fops; file_priv->filp->f_op = old_fops;
if (IS_ERR(buf_priv->virtual)) { if (IS_ERR(buf_priv->virtual)) {
/* Real error */ /* Real error */
DRM_ERROR("mmap error\n"); DRM_ERROR("mmap error\n");
...@@ -173,7 +172,7 @@ static int i810_unmap_buffer(struct drm_buf * buf) ...@@ -173,7 +172,7 @@ static int i810_unmap_buffer(struct drm_buf * buf)
} }
static int i810_dma_get_buffer(struct drm_device * dev, drm_i810_dma_t * d, static int i810_dma_get_buffer(struct drm_device * dev, drm_i810_dma_t * d,
struct file *filp) struct drm_file *file_priv)
{ {
struct drm_buf *buf; struct drm_buf *buf;
drm_i810_buf_priv_t *buf_priv; drm_i810_buf_priv_t *buf_priv;
...@@ -186,13 +185,13 @@ static int i810_dma_get_buffer(struct drm_device * dev, drm_i810_dma_t * d, ...@@ -186,13 +185,13 @@ static int i810_dma_get_buffer(struct drm_device * dev, drm_i810_dma_t * d,
return retcode; return retcode;
} }
retcode = i810_map_buffer(buf, filp); retcode = i810_map_buffer(buf, file_priv);
if (retcode) { if (retcode) {
i810_freelist_put(dev, buf); i810_freelist_put(dev, buf);
DRM_ERROR("mapbuf failed, retcode %d\n", retcode); DRM_ERROR("mapbuf failed, retcode %d\n", retcode);
return retcode; return retcode;
} }
buf->filp = filp; buf->file_priv = file_priv;
buf_priv = buf->dev_private; buf_priv = buf->dev_private;
d->granted = 1; d->granted = 1;
d->request_idx = buf->idx; d->request_idx = buf->idx;
...@@ -473,11 +472,10 @@ static int i810_dma_init_compat(drm_i810_init_t * init, unsigned long arg) ...@@ -473,11 +472,10 @@ static int i810_dma_init_compat(drm_i810_init_t * init, unsigned long arg)
return 0; return 0;
} }
static int i810_dma_init(struct inode *inode, struct file *filp, static int i810_dma_init(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
drm_i810_private_t *dev_priv; drm_i810_private_t *dev_priv;
drm_i810_init_t init; drm_i810_init_t init;
int retcode = 0; int retcode = 0;
...@@ -968,7 +966,8 @@ static int i810_flush_queue(struct drm_device * dev) ...@@ -968,7 +966,8 @@ static int i810_flush_queue(struct drm_device * dev)
} }
/* Must be called with the lock held */ /* Must be called with the lock held */
static void i810_reclaim_buffers(struct drm_device * dev, struct file *filp) static void i810_reclaim_buffers(struct drm_device * dev,
struct drm_file *file_priv)
{ {
struct drm_device_dma *dma = dev->dma; struct drm_device_dma *dma = dev->dma;
int i; int i;
...@@ -986,7 +985,7 @@ static void i810_reclaim_buffers(struct drm_device * dev, struct file *filp) ...@@ -986,7 +985,7 @@ static void i810_reclaim_buffers(struct drm_device * dev, struct file *filp)
struct drm_buf *buf = dma->buflist[i]; struct drm_buf *buf = dma->buflist[i];
drm_i810_buf_priv_t *buf_priv = buf->dev_private; drm_i810_buf_priv_t *buf_priv = buf->dev_private;
if (buf->filp == filp && buf_priv) { if (buf->file_priv == file_priv && buf_priv) {
int used = cmpxchg(buf_priv->in_use, I810_BUF_CLIENT, int used = cmpxchg(buf_priv->in_use, I810_BUF_CLIENT,
I810_BUF_FREE); I810_BUF_FREE);
...@@ -998,23 +997,21 @@ static void i810_reclaim_buffers(struct drm_device * dev, struct file *filp) ...@@ -998,23 +997,21 @@ static void i810_reclaim_buffers(struct drm_device * dev, struct file *filp)
} }
} }
static int i810_flush_ioctl(struct inode *inode, struct file *filp, static int i810_flush_ioctl(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
i810_flush_queue(dev); i810_flush_queue(dev);
return 0; return 0;
} }
static int i810_dma_vertex(struct inode *inode, struct file *filp, static int i810_dma_vertex(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_device_dma *dma = dev->dma; struct drm_device_dma *dma = dev->dma;
drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private; drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private;
u32 *hw_status = dev_priv->hw_status_page; u32 *hw_status = dev_priv->hw_status_page;
...@@ -1026,7 +1023,7 @@ static int i810_dma_vertex(struct inode *inode, struct file *filp, ...@@ -1026,7 +1023,7 @@ static int i810_dma_vertex(struct inode *inode, struct file *filp,
(&vertex, (drm_i810_vertex_t __user *) arg, sizeof(vertex))) (&vertex, (drm_i810_vertex_t __user *) arg, sizeof(vertex)))
return -EFAULT; return -EFAULT;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_DEBUG("i810 dma vertex, idx %d used %d discard %d\n", DRM_DEBUG("i810 dma vertex, idx %d used %d discard %d\n",
vertex.idx, vertex.used, vertex.discard); vertex.idx, vertex.used, vertex.discard);
...@@ -1046,18 +1043,17 @@ static int i810_dma_vertex(struct inode *inode, struct file *filp, ...@@ -1046,18 +1043,17 @@ static int i810_dma_vertex(struct inode *inode, struct file *filp,
return 0; return 0;
} }
static int i810_clear_bufs(struct inode *inode, struct file *filp, static int i810_clear_bufs(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
drm_i810_clear_t clear; drm_i810_clear_t clear;
if (copy_from_user if (copy_from_user
(&clear, (drm_i810_clear_t __user *) arg, sizeof(clear))) (&clear, (drm_i810_clear_t __user *) arg, sizeof(clear)))
return -EFAULT; return -EFAULT;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
/* GH: Someone's doing nasty things... */ /* GH: Someone's doing nasty things... */
if (!dev->dev_private) { if (!dev->dev_private) {
...@@ -1069,25 +1065,24 @@ static int i810_clear_bufs(struct inode *inode, struct file *filp, ...@@ -1069,25 +1065,24 @@ static int i810_clear_bufs(struct inode *inode, struct file *filp,
return 0; return 0;
} }
static int i810_swap_bufs(struct inode *inode, struct file *filp, static int i810_swap_bufs(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
DRM_DEBUG("i810_swap_bufs\n"); DRM_DEBUG("i810_swap_bufs\n");
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
i810_dma_dispatch_swap(dev); i810_dma_dispatch_swap(dev);
return 0; return 0;
} }
static int i810_getage(struct inode *inode, struct file *filp, unsigned int cmd, static int i810_getage(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd,
unsigned long arg) unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private; drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private;
u32 *hw_status = dev_priv->hw_status_page; u32 *hw_status = dev_priv->hw_status_page;
drm_i810_sarea_t *sarea_priv = (drm_i810_sarea_t *) drm_i810_sarea_t *sarea_priv = (drm_i810_sarea_t *)
...@@ -1097,11 +1092,10 @@ static int i810_getage(struct inode *inode, struct file *filp, unsigned int cmd, ...@@ -1097,11 +1092,10 @@ static int i810_getage(struct inode *inode, struct file *filp, unsigned int cmd,
return 0; return 0;
} }
static int i810_getbuf(struct inode *inode, struct file *filp, unsigned int cmd, static int i810_getbuf(struct inode *inode, struct drm_file *file_priv,
unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
int retcode = 0; int retcode = 0;
drm_i810_dma_t d; drm_i810_dma_t d;
drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private; drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private;
...@@ -1112,11 +1106,11 @@ static int i810_getbuf(struct inode *inode, struct file *filp, unsigned int cmd, ...@@ -1112,11 +1106,11 @@ static int i810_getbuf(struct inode *inode, struct file *filp, unsigned int cmd,
if (copy_from_user(&d, (drm_i810_dma_t __user *) arg, sizeof(d))) if (copy_from_user(&d, (drm_i810_dma_t __user *) arg, sizeof(d)))
return -EFAULT; return -EFAULT;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
d.granted = 0; d.granted = 0;
retcode = i810_dma_get_buffer(dev, &d, filp); retcode = i810_dma_get_buffer(dev, &d, file_priv);
DRM_DEBUG("i810_dma: %d returning %d, granted = %d\n", DRM_DEBUG("i810_dma: %d returning %d, granted = %d\n",
current->pid, retcode, d.granted); current->pid, retcode, d.granted);
...@@ -1128,15 +1122,15 @@ static int i810_getbuf(struct inode *inode, struct file *filp, unsigned int cmd, ...@@ -1128,15 +1122,15 @@ static int i810_getbuf(struct inode *inode, struct file *filp, unsigned int cmd,
return retcode; return retcode;
} }
static int i810_copybuf(struct inode *inode, static int i810_copybuf(struct inode *inode, struct drm_file *file_priv,
struct file *filp, unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
/* Never copy - 2.4.x doesn't need it */ /* Never copy - 2.4.x doesn't need it */
return 0; return 0;
} }
static int i810_docopy(struct inode *inode, struct file *filp, unsigned int cmd, static int i810_docopy(struct inode *inode, struct drm_file *file_priv,
unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
/* Never copy - 2.4.x doesn't need it */ /* Never copy - 2.4.x doesn't need it */
return 0; return 0;
...@@ -1202,11 +1196,10 @@ static void i810_dma_dispatch_mc(struct drm_device * dev, struct drm_buf * buf, ...@@ -1202,11 +1196,10 @@ static void i810_dma_dispatch_mc(struct drm_device * dev, struct drm_buf * buf,
ADVANCE_LP_RING(); ADVANCE_LP_RING();
} }
static int i810_dma_mc(struct inode *inode, struct file *filp, static int i810_dma_mc(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_device_dma *dma = dev->dma; struct drm_device_dma *dma = dev->dma;
drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private; drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private;
u32 *hw_status = dev_priv->hw_status_page; u32 *hw_status = dev_priv->hw_status_page;
...@@ -1217,7 +1210,7 @@ static int i810_dma_mc(struct inode *inode, struct file *filp, ...@@ -1217,7 +1210,7 @@ static int i810_dma_mc(struct inode *inode, struct file *filp,
if (copy_from_user(&mc, (drm_i810_mc_t __user *) arg, sizeof(mc))) if (copy_from_user(&mc, (drm_i810_mc_t __user *) arg, sizeof(mc)))
return -EFAULT; return -EFAULT;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
if (mc.idx >= dma->buf_count || mc.idx < 0) if (mc.idx >= dma->buf_count || mc.idx < 0)
return -EINVAL; return -EINVAL;
...@@ -1233,21 +1226,19 @@ static int i810_dma_mc(struct inode *inode, struct file *filp, ...@@ -1233,21 +1226,19 @@ static int i810_dma_mc(struct inode *inode, struct file *filp,
return 0; return 0;
} }
static int i810_rstatus(struct inode *inode, struct file *filp, static int i810_rstatus(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private; drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private;
return (int)(((u32 *) (dev_priv->hw_status_page))[4]); return (int)(((u32 *) (dev_priv->hw_status_page))[4]);
} }
static int i810_ov0_info(struct inode *inode, struct file *filp, static int i810_ov0_info(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private; drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private;
drm_i810_overlay_t data; drm_i810_overlay_t data;
...@@ -1259,26 +1250,24 @@ static int i810_ov0_info(struct inode *inode, struct file *filp, ...@@ -1259,26 +1250,24 @@ static int i810_ov0_info(struct inode *inode, struct file *filp,
return 0; return 0;
} }
static int i810_fstatus(struct inode *inode, struct file *filp, static int i810_fstatus(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private; drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
return I810_READ(0x30008); return I810_READ(0x30008);
} }
static int i810_ov0_flip(struct inode *inode, struct file *filp, static int i810_ov0_flip(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private; drm_i810_private_t *dev_priv = (drm_i810_private_t *) dev->dev_private;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
//Tell the overlay to update //Tell the overlay to update
I810_WRITE(0x30000, dev_priv->overlay_physical | 0x80000000); I810_WRITE(0x30000, dev_priv->overlay_physical | 0x80000000);
...@@ -1310,16 +1299,15 @@ static int i810_do_cleanup_pageflip(struct drm_device * dev) ...@@ -1310,16 +1299,15 @@ static int i810_do_cleanup_pageflip(struct drm_device * dev)
return 0; return 0;
} }
static int i810_flip_bufs(struct inode *inode, struct file *filp, static int i810_flip_bufs(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
drm_i810_private_t *dev_priv = dev->dev_private; drm_i810_private_t *dev_priv = dev->dev_private;
DRM_DEBUG("%s\n", __FUNCTION__); DRM_DEBUG("%s\n", __FUNCTION__);
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
if (!dev_priv->page_flipping) if (!dev_priv->page_flipping)
i810_do_init_pageflip(dev); i810_do_init_pageflip(dev);
...@@ -1345,7 +1333,7 @@ void i810_driver_lastclose(struct drm_device * dev) ...@@ -1345,7 +1333,7 @@ void i810_driver_lastclose(struct drm_device * dev)
i810_dma_cleanup(dev); i810_dma_cleanup(dev);
} }
void i810_driver_preclose(struct drm_device * dev, DRMFILE filp) void i810_driver_preclose(struct drm_device * dev, struct drm_file *file_priv)
{ {
if (dev->dev_private) { if (dev->dev_private) {
drm_i810_private_t *dev_priv = dev->dev_private; drm_i810_private_t *dev_priv = dev->dev_private;
...@@ -1355,9 +1343,10 @@ void i810_driver_preclose(struct drm_device * dev, DRMFILE filp) ...@@ -1355,9 +1343,10 @@ void i810_driver_preclose(struct drm_device * dev, DRMFILE filp)
} }
} }
void i810_driver_reclaim_buffers_locked(struct drm_device * dev, struct file *filp) void i810_driver_reclaim_buffers_locked(struct drm_device * dev,
struct drm_file *file_priv)
{ {
i810_reclaim_buffers(dev, filp); i810_reclaim_buffers(dev, file_priv);
} }
int i810_driver_dma_quiescent(struct drm_device * dev) int i810_driver_dma_quiescent(struct drm_device * dev)
......
...@@ -117,12 +117,13 @@ typedef struct drm_i810_private { ...@@ -117,12 +117,13 @@ typedef struct drm_i810_private {
/* i810_dma.c */ /* i810_dma.c */
extern int i810_driver_dma_quiescent(struct drm_device * dev); extern int i810_driver_dma_quiescent(struct drm_device * dev);
extern void i810_driver_reclaim_buffers_locked(struct drm_device * dev, extern void i810_driver_reclaim_buffers_locked(struct drm_device * dev,
struct file *filp); struct drm_file *file_priv);
extern int i810_driver_load(struct drm_device *, unsigned long flags); extern int i810_driver_load(struct drm_device *, unsigned long flags);
extern void i810_driver_lastclose(struct drm_device * dev); extern void i810_driver_lastclose(struct drm_device * dev);
extern void i810_driver_preclose(struct drm_device * dev, DRMFILE filp); extern void i810_driver_preclose(struct drm_device * dev,
struct drm_file *file_priv);
extern void i810_driver_reclaim_buffers_locked(struct drm_device * dev, extern void i810_driver_reclaim_buffers_locked(struct drm_device * dev,
struct file *filp); struct drm_file *file_priv);
extern int i810_driver_device_is_agp(struct drm_device * dev); extern int i810_driver_device_is_agp(struct drm_device * dev);
extern drm_ioctl_desc_t i810_ioctls[]; extern drm_ioctl_desc_t i810_ioctls[];
......
...@@ -122,10 +122,9 @@ static const struct file_operations i830_buffer_fops = { ...@@ -122,10 +122,9 @@ static const struct file_operations i830_buffer_fops = {
.fasync = drm_fasync, .fasync = drm_fasync,
}; };
static int i830_map_buffer(struct drm_buf * buf, struct file *filp) static int i830_map_buffer(struct drm_buf * buf, struct drm_file *file_priv)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
drm_i830_buf_priv_t *buf_priv = buf->dev_private; drm_i830_buf_priv_t *buf_priv = buf->dev_private;
drm_i830_private_t *dev_priv = dev->dev_private; drm_i830_private_t *dev_priv = dev->dev_private;
const struct file_operations *old_fops; const struct file_operations *old_fops;
...@@ -136,13 +135,13 @@ static int i830_map_buffer(struct drm_buf * buf, struct file *filp) ...@@ -136,13 +135,13 @@ static int i830_map_buffer(struct drm_buf * buf, struct file *filp)
return -EINVAL; return -EINVAL;
down_write(&current->mm->mmap_sem); down_write(&current->mm->mmap_sem);
old_fops = filp->f_op; old_fops = file_priv->filp->f_op;
filp->f_op = &i830_buffer_fops; file_priv->filp->f_op = &i830_buffer_fops;
dev_priv->mmap_buffer = buf; dev_priv->mmap_buffer = buf;
virtual = do_mmap(filp, 0, buf->total, PROT_READ | PROT_WRITE, virtual = do_mmap(file_priv->filp, 0, buf->total, PROT_READ | PROT_WRITE,
MAP_SHARED, buf->bus_address); MAP_SHARED, buf->bus_address);
dev_priv->mmap_buffer = NULL; dev_priv->mmap_buffer = NULL;
filp->f_op = old_fops; file_priv->filp->f_op = old_fops;
if (IS_ERR((void *)virtual)) { /* ugh */ if (IS_ERR((void *)virtual)) { /* ugh */
/* Real error */ /* Real error */
DRM_ERROR("mmap error\n"); DRM_ERROR("mmap error\n");
...@@ -177,7 +176,7 @@ static int i830_unmap_buffer(struct drm_buf * buf) ...@@ -177,7 +176,7 @@ static int i830_unmap_buffer(struct drm_buf * buf)
} }
static int i830_dma_get_buffer(struct drm_device * dev, drm_i830_dma_t * d, static int i830_dma_get_buffer(struct drm_device * dev, drm_i830_dma_t * d,
struct file *filp) struct drm_file *file_priv)
{ {
struct drm_buf *buf; struct drm_buf *buf;
drm_i830_buf_priv_t *buf_priv; drm_i830_buf_priv_t *buf_priv;
...@@ -190,13 +189,13 @@ static int i830_dma_get_buffer(struct drm_device * dev, drm_i830_dma_t * d, ...@@ -190,13 +189,13 @@ static int i830_dma_get_buffer(struct drm_device * dev, drm_i830_dma_t * d,
return retcode; return retcode;
} }
retcode = i830_map_buffer(buf, filp); retcode = i830_map_buffer(buf, file_priv);
if (retcode) { if (retcode) {
i830_freelist_put(dev, buf); i830_freelist_put(dev, buf);
DRM_ERROR("mapbuf failed, retcode %d\n", retcode); DRM_ERROR("mapbuf failed, retcode %d\n", retcode);
return retcode; return retcode;
} }
buf->filp = filp; buf->file_priv = file_priv;
buf_priv = buf->dev_private; buf_priv = buf->dev_private;
d->granted = 1; d->granted = 1;
d->request_idx = buf->idx; d->request_idx = buf->idx;
...@@ -451,11 +450,10 @@ static int i830_dma_initialize(struct drm_device * dev, ...@@ -451,11 +450,10 @@ static int i830_dma_initialize(struct drm_device * dev,
return 0; return 0;
} }
static int i830_dma_init(struct inode *inode, struct file *filp, static int i830_dma_init(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
drm_i830_private_t *dev_priv; drm_i830_private_t *dev_priv;
drm_i830_init_t init; drm_i830_init_t init;
int retcode = 0; int retcode = 0;
...@@ -1248,7 +1246,7 @@ static int i830_flush_queue(struct drm_device * dev) ...@@ -1248,7 +1246,7 @@ static int i830_flush_queue(struct drm_device * dev)
} }
/* Must be called with the lock held */ /* Must be called with the lock held */
static void i830_reclaim_buffers(struct drm_device * dev, struct file *filp) static void i830_reclaim_buffers(struct drm_device * dev, struct drm_file *file_priv)
{ {
struct drm_device_dma *dma = dev->dma; struct drm_device_dma *dma = dev->dma;
int i; int i;
...@@ -1266,7 +1264,7 @@ static void i830_reclaim_buffers(struct drm_device * dev, struct file *filp) ...@@ -1266,7 +1264,7 @@ static void i830_reclaim_buffers(struct drm_device * dev, struct file *filp)
struct drm_buf *buf = dma->buflist[i]; struct drm_buf *buf = dma->buflist[i];
drm_i830_buf_priv_t *buf_priv = buf->dev_private; drm_i830_buf_priv_t *buf_priv = buf->dev_private;
if (buf->filp == filp && buf_priv) { if (buf->file_priv == file_priv && buf_priv) {
int used = cmpxchg(buf_priv->in_use, I830_BUF_CLIENT, int used = cmpxchg(buf_priv->in_use, I830_BUF_CLIENT,
I830_BUF_FREE); I830_BUF_FREE);
...@@ -1278,23 +1276,21 @@ static void i830_reclaim_buffers(struct drm_device * dev, struct file *filp) ...@@ -1278,23 +1276,21 @@ static void i830_reclaim_buffers(struct drm_device * dev, struct file *filp)
} }
} }
static int i830_flush_ioctl(struct inode *inode, struct file *filp, static int i830_flush_ioctl(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
i830_flush_queue(dev); i830_flush_queue(dev);
return 0; return 0;
} }
static int i830_dma_vertex(struct inode *inode, struct file *filp, static int i830_dma_vertex(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
struct drm_device_dma *dma = dev->dma; struct drm_device_dma *dma = dev->dma;
drm_i830_private_t *dev_priv = (drm_i830_private_t *) dev->dev_private; drm_i830_private_t *dev_priv = (drm_i830_private_t *) dev->dev_private;
u32 *hw_status = dev_priv->hw_status_page; u32 *hw_status = dev_priv->hw_status_page;
...@@ -1306,7 +1302,7 @@ static int i830_dma_vertex(struct inode *inode, struct file *filp, ...@@ -1306,7 +1302,7 @@ static int i830_dma_vertex(struct inode *inode, struct file *filp,
(&vertex, (drm_i830_vertex_t __user *) arg, sizeof(vertex))) (&vertex, (drm_i830_vertex_t __user *) arg, sizeof(vertex)))
return -EFAULT; return -EFAULT;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_DEBUG("i830 dma vertex, idx %d used %d discard %d\n", DRM_DEBUG("i830 dma vertex, idx %d used %d discard %d\n",
vertex.idx, vertex.used, vertex.discard); vertex.idx, vertex.used, vertex.discard);
...@@ -1324,18 +1320,17 @@ static int i830_dma_vertex(struct inode *inode, struct file *filp, ...@@ -1324,18 +1320,17 @@ static int i830_dma_vertex(struct inode *inode, struct file *filp,
return 0; return 0;
} }
static int i830_clear_bufs(struct inode *inode, struct file *filp, static int i830_clear_bufs(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
drm_i830_clear_t clear; drm_i830_clear_t clear;
if (copy_from_user if (copy_from_user
(&clear, (drm_i830_clear_t __user *) arg, sizeof(clear))) (&clear, (drm_i830_clear_t __user *) arg, sizeof(clear)))
return -EFAULT; return -EFAULT;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
/* GH: Someone's doing nasty things... */ /* GH: Someone's doing nasty things... */
if (!dev->dev_private) { if (!dev->dev_private) {
...@@ -1348,15 +1343,14 @@ static int i830_clear_bufs(struct inode *inode, struct file *filp, ...@@ -1348,15 +1343,14 @@ static int i830_clear_bufs(struct inode *inode, struct file *filp,
return 0; return 0;
} }
static int i830_swap_bufs(struct inode *inode, struct file *filp, static int i830_swap_bufs(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
DRM_DEBUG("i830_swap_bufs\n"); DRM_DEBUG("i830_swap_bufs\n");
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
i830_dma_dispatch_swap(dev); i830_dma_dispatch_swap(dev);
return 0; return 0;
...@@ -1386,16 +1380,15 @@ static int i830_do_cleanup_pageflip(struct drm_device * dev) ...@@ -1386,16 +1380,15 @@ static int i830_do_cleanup_pageflip(struct drm_device * dev)
return 0; return 0;
} }
static int i830_flip_bufs(struct inode *inode, struct file *filp, static int i830_flip_bufs(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
drm_i830_private_t *dev_priv = dev->dev_private; drm_i830_private_t *dev_priv = dev->dev_private;
DRM_DEBUG("%s\n", __FUNCTION__); DRM_DEBUG("%s\n", __FUNCTION__);
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
if (!dev_priv->page_flipping) if (!dev_priv->page_flipping)
i830_do_init_pageflip(dev); i830_do_init_pageflip(dev);
...@@ -1404,11 +1397,10 @@ static int i830_flip_bufs(struct inode *inode, struct file *filp, ...@@ -1404,11 +1397,10 @@ static int i830_flip_bufs(struct inode *inode, struct file *filp,
return 0; return 0;
} }
static int i830_getage(struct inode *inode, struct file *filp, unsigned int cmd, static int i830_getage(struct inode *inode, struct drm_file *file_priv, unsigned int cmd,
unsigned long arg) unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
drm_i830_private_t *dev_priv = (drm_i830_private_t *) dev->dev_private; drm_i830_private_t *dev_priv = (drm_i830_private_t *) dev->dev_private;
u32 *hw_status = dev_priv->hw_status_page; u32 *hw_status = dev_priv->hw_status_page;
drm_i830_sarea_t *sarea_priv = (drm_i830_sarea_t *) drm_i830_sarea_t *sarea_priv = (drm_i830_sarea_t *)
...@@ -1418,11 +1410,10 @@ static int i830_getage(struct inode *inode, struct file *filp, unsigned int cmd, ...@@ -1418,11 +1410,10 @@ static int i830_getage(struct inode *inode, struct file *filp, unsigned int cmd,
return 0; return 0;
} }
static int i830_getbuf(struct inode *inode, struct file *filp, unsigned int cmd, static int i830_getbuf(struct inode *inode, struct drm_file *file_priv,
unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
int retcode = 0; int retcode = 0;
drm_i830_dma_t d; drm_i830_dma_t d;
drm_i830_private_t *dev_priv = (drm_i830_private_t *) dev->dev_private; drm_i830_private_t *dev_priv = (drm_i830_private_t *) dev->dev_private;
...@@ -1434,11 +1425,11 @@ static int i830_getbuf(struct inode *inode, struct file *filp, unsigned int cmd, ...@@ -1434,11 +1425,11 @@ static int i830_getbuf(struct inode *inode, struct file *filp, unsigned int cmd,
if (copy_from_user(&d, (drm_i830_dma_t __user *) arg, sizeof(d))) if (copy_from_user(&d, (drm_i830_dma_t __user *) arg, sizeof(d)))
return -EFAULT; return -EFAULT;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
d.granted = 0; d.granted = 0;
retcode = i830_dma_get_buffer(dev, &d, filp); retcode = i830_dma_get_buffer(dev, &d, file_priv);
DRM_DEBUG("i830_dma: %d returning %d, granted = %d\n", DRM_DEBUG("i830_dma: %d returning %d, granted = %d\n",
current->pid, retcode, d.granted); current->pid, retcode, d.granted);
...@@ -1451,23 +1442,22 @@ static int i830_getbuf(struct inode *inode, struct file *filp, unsigned int cmd, ...@@ -1451,23 +1442,22 @@ static int i830_getbuf(struct inode *inode, struct file *filp, unsigned int cmd,
} }
static int i830_copybuf(struct inode *inode, static int i830_copybuf(struct inode *inode,
struct file *filp, unsigned int cmd, unsigned long arg) struct drm_file *file_priv, unsigned int cmd, unsigned long arg)
{ {
/* Never copy - 2.4.x doesn't need it */ /* Never copy - 2.4.x doesn't need it */
return 0; return 0;
} }
static int i830_docopy(struct inode *inode, struct file *filp, unsigned int cmd, static int i830_docopy(struct inode *inode, struct drm_file *file_priv, unsigned int cmd,
unsigned long arg) unsigned long arg)
{ {
return 0; return 0;
} }
static int i830_getparam(struct inode *inode, struct file *filp, static int i830_getparam(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
drm_i830_private_t *dev_priv = dev->dev_private; drm_i830_private_t *dev_priv = dev->dev_private;
drm_i830_getparam_t param; drm_i830_getparam_t param;
int value; int value;
...@@ -1497,11 +1487,10 @@ static int i830_getparam(struct inode *inode, struct file *filp, ...@@ -1497,11 +1487,10 @@ static int i830_getparam(struct inode *inode, struct file *filp,
return 0; return 0;
} }
static int i830_setparam(struct inode *inode, struct file *filp, static int i830_setparam(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
drm_i830_private_t *dev_priv = dev->dev_private; drm_i830_private_t *dev_priv = dev->dev_private;
drm_i830_setparam_t param; drm_i830_setparam_t param;
...@@ -1542,7 +1531,7 @@ void i830_driver_lastclose(struct drm_device * dev) ...@@ -1542,7 +1531,7 @@ void i830_driver_lastclose(struct drm_device * dev)
i830_dma_cleanup(dev); i830_dma_cleanup(dev);
} }
void i830_driver_preclose(struct drm_device * dev, DRMFILE filp) void i830_driver_preclose(struct drm_device * dev, struct drm_file *file_priv)
{ {
if (dev->dev_private) { if (dev->dev_private) {
drm_i830_private_t *dev_priv = dev->dev_private; drm_i830_private_t *dev_priv = dev->dev_private;
...@@ -1552,9 +1541,9 @@ void i830_driver_preclose(struct drm_device * dev, DRMFILE filp) ...@@ -1552,9 +1541,9 @@ void i830_driver_preclose(struct drm_device * dev, DRMFILE filp)
} }
} }
void i830_driver_reclaim_buffers_locked(struct drm_device * dev, struct file *filp) void i830_driver_reclaim_buffers_locked(struct drm_device * dev, struct drm_file *file_priv)
{ {
i830_reclaim_buffers(dev, filp); i830_reclaim_buffers(dev, file_priv);
} }
int i830_driver_dma_quiescent(struct drm_device * dev) int i830_driver_dma_quiescent(struct drm_device * dev)
......
...@@ -126,9 +126,9 @@ extern drm_ioctl_desc_t i830_ioctls[]; ...@@ -126,9 +126,9 @@ extern drm_ioctl_desc_t i830_ioctls[];
extern int i830_max_ioctl; extern int i830_max_ioctl;
/* i830_irq.c */ /* i830_irq.c */
extern int i830_irq_emit(struct inode *inode, struct file *filp, extern int i830_irq_emit(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern int i830_irq_wait(struct inode *inode, struct file *filp, extern int i830_irq_wait(struct inode *inode, struct drm_file *file_priv,
unsigned int cmd, unsigned long arg); unsigned int cmd, unsigned long arg);
extern irqreturn_t i830_driver_irq_handler(DRM_IRQ_ARGS); extern irqreturn_t i830_driver_irq_handler(DRM_IRQ_ARGS);
...@@ -136,10 +136,11 @@ extern void i830_driver_irq_preinstall(struct drm_device * dev); ...@@ -136,10 +136,11 @@ extern void i830_driver_irq_preinstall(struct drm_device * dev);
extern void i830_driver_irq_postinstall(struct drm_device * dev); extern void i830_driver_irq_postinstall(struct drm_device * dev);
extern void i830_driver_irq_uninstall(struct drm_device * dev); extern void i830_driver_irq_uninstall(struct drm_device * dev);
extern int i830_driver_load(struct drm_device *, unsigned long flags); extern int i830_driver_load(struct drm_device *, unsigned long flags);
extern void i830_driver_preclose(struct drm_device * dev, DRMFILE filp); extern void i830_driver_preclose(struct drm_device * dev,
struct drm_file *file_priv);
extern void i830_driver_lastclose(struct drm_device * dev); extern void i830_driver_lastclose(struct drm_device * dev);
extern void i830_driver_reclaim_buffers_locked(struct drm_device * dev, extern void i830_driver_reclaim_buffers_locked(struct drm_device * dev,
struct file *filp); struct drm_file *file_priv);
extern int i830_driver_dma_quiescent(struct drm_device * dev); extern int i830_driver_dma_quiescent(struct drm_device * dev);
extern int i830_driver_device_is_agp(struct drm_device * dev); extern int i830_driver_device_is_agp(struct drm_device * dev);
......
...@@ -114,16 +114,15 @@ static int i830_wait_irq(struct drm_device * dev, int irq_nr) ...@@ -114,16 +114,15 @@ static int i830_wait_irq(struct drm_device * dev, int irq_nr)
/* Needs the lock as it touches the ring. /* Needs the lock as it touches the ring.
*/ */
int i830_irq_emit(struct inode *inode, struct file *filp, unsigned int cmd, int i830_irq_emit(struct inode *inode, struct drm_file *file_priv,
unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
drm_i830_private_t *dev_priv = dev->dev_private; drm_i830_private_t *dev_priv = dev->dev_private;
drm_i830_irq_emit_t emit; drm_i830_irq_emit_t emit;
int result; int result;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
if (!dev_priv) { if (!dev_priv) {
DRM_ERROR("%s called with no initialization\n", __FUNCTION__); DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
...@@ -146,11 +145,10 @@ int i830_irq_emit(struct inode *inode, struct file *filp, unsigned int cmd, ...@@ -146,11 +145,10 @@ int i830_irq_emit(struct inode *inode, struct file *filp, unsigned int cmd,
/* Doesn't need the hardware lock. /* Doesn't need the hardware lock.
*/ */
int i830_irq_wait(struct inode *inode, struct file *filp, unsigned int cmd, int i830_irq_wait(struct inode *inode, struct drm_file *file_priv,
unsigned long arg) unsigned int cmd, unsigned long arg)
{ {
struct drm_file *priv = filp->private_data; struct drm_device *dev = file_priv->head->dev;
struct drm_device *dev = priv->head->dev;
drm_i830_private_t *dev_priv = dev->dev_private; drm_i830_private_t *dev_priv = dev->dev_private;
drm_i830_irq_wait_t irqwait; drm_i830_irq_wait_t irqwait;
......
...@@ -602,7 +602,7 @@ static int i915_flush_ioctl(DRM_IOCTL_ARGS) ...@@ -602,7 +602,7 @@ static int i915_flush_ioctl(DRM_IOCTL_ARGS)
{ {
DRM_DEVICE; DRM_DEVICE;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
return i915_quiescent(dev); return i915_quiescent(dev);
} }
...@@ -628,7 +628,7 @@ static int i915_batchbuffer(DRM_IOCTL_ARGS) ...@@ -628,7 +628,7 @@ static int i915_batchbuffer(DRM_IOCTL_ARGS)
DRM_DEBUG("i915 batchbuffer, start %x used %d cliprects %d\n", DRM_DEBUG("i915 batchbuffer, start %x used %d cliprects %d\n",
batch.start, batch.used, batch.num_cliprects); batch.start, batch.used, batch.num_cliprects);
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
if (batch.num_cliprects && DRM_VERIFYAREA_READ(batch.cliprects, if (batch.num_cliprects && DRM_VERIFYAREA_READ(batch.cliprects,
batch.num_cliprects * batch.num_cliprects *
...@@ -657,7 +657,7 @@ static int i915_cmdbuffer(DRM_IOCTL_ARGS) ...@@ -657,7 +657,7 @@ static int i915_cmdbuffer(DRM_IOCTL_ARGS)
DRM_DEBUG("i915 cmdbuffer, buf %p sz %d cliprects %d\n", DRM_DEBUG("i915 cmdbuffer, buf %p sz %d cliprects %d\n",
cmdbuf.buf, cmdbuf.sz, cmdbuf.num_cliprects); cmdbuf.buf, cmdbuf.sz, cmdbuf.num_cliprects);
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
if (cmdbuf.num_cliprects && if (cmdbuf.num_cliprects &&
DRM_VERIFYAREA_READ(cmdbuf.cliprects, DRM_VERIFYAREA_READ(cmdbuf.cliprects,
...@@ -683,7 +683,7 @@ static int i915_flip_bufs(DRM_IOCTL_ARGS) ...@@ -683,7 +683,7 @@ static int i915_flip_bufs(DRM_IOCTL_ARGS)
DRM_DEBUG("%s\n", __FUNCTION__); DRM_DEBUG("%s\n", __FUNCTION__);
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
return i915_dispatch_flip(dev); return i915_dispatch_flip(dev);
} }
...@@ -821,11 +821,11 @@ void i915_driver_lastclose(struct drm_device * dev) ...@@ -821,11 +821,11 @@ void i915_driver_lastclose(struct drm_device * dev)
i915_dma_cleanup(dev); i915_dma_cleanup(dev);
} }
void i915_driver_preclose(struct drm_device * dev, DRMFILE filp) void i915_driver_preclose(struct drm_device * dev, struct drm_file *file_priv)
{ {
if (dev->dev_private) { if (dev->dev_private) {
drm_i915_private_t *dev_priv = dev->dev_private; drm_i915_private_t *dev_priv = dev->dev_private;
i915_mem_release(dev, filp, dev_priv->agp_heap); i915_mem_release(dev, file_priv, dev_priv->agp_heap);
} }
} }
......
...@@ -70,7 +70,7 @@ struct mem_block { ...@@ -70,7 +70,7 @@ struct mem_block {
struct mem_block *prev; struct mem_block *prev;
int start; int start;
int size; int size;
DRMFILE filp; /* 0: free, -1: heap, other: real files */ struct drm_file *file_priv; /* NULL: free, -1: heap, other: real files */
}; };
typedef struct _drm_i915_vbl_swap { typedef struct _drm_i915_vbl_swap {
...@@ -123,7 +123,8 @@ extern int i915_max_ioctl; ...@@ -123,7 +123,8 @@ extern int i915_max_ioctl;
extern void i915_kernel_lost_context(struct drm_device * dev); extern void i915_kernel_lost_context(struct drm_device * dev);
extern int i915_driver_load(struct drm_device *, unsigned long flags); extern int i915_driver_load(struct drm_device *, unsigned long flags);
extern void i915_driver_lastclose(struct drm_device * dev); extern void i915_driver_lastclose(struct drm_device * dev);
extern void i915_driver_preclose(struct drm_device * dev, DRMFILE filp); extern void i915_driver_preclose(struct drm_device *dev,
struct drm_file *file_priv);
extern int i915_driver_device_is_agp(struct drm_device * dev); extern int i915_driver_device_is_agp(struct drm_device * dev);
extern long i915_compat_ioctl(struct file *filp, unsigned int cmd, extern long i915_compat_ioctl(struct file *filp, unsigned int cmd,
unsigned long arg); unsigned long arg);
...@@ -149,7 +150,7 @@ extern int i915_mem_init_heap(DRM_IOCTL_ARGS); ...@@ -149,7 +150,7 @@ extern int i915_mem_init_heap(DRM_IOCTL_ARGS);
extern int i915_mem_destroy_heap(DRM_IOCTL_ARGS); extern int i915_mem_destroy_heap(DRM_IOCTL_ARGS);
extern void i915_mem_takedown(struct mem_block **heap); extern void i915_mem_takedown(struct mem_block **heap);
extern void i915_mem_release(struct drm_device * dev, extern void i915_mem_release(struct drm_device * dev,
DRMFILE filp, struct mem_block *heap); struct drm_file *file_priv, struct mem_block *heap);
#define I915_READ(reg) DRM_READ32(dev_priv->mmio_map, (reg)) #define I915_READ(reg) DRM_READ32(dev_priv->mmio_map, (reg))
#define I915_WRITE(reg,val) DRM_WRITE32(dev_priv->mmio_map, (reg), (val)) #define I915_WRITE(reg,val) DRM_WRITE32(dev_priv->mmio_map, (reg), (val))
......
...@@ -362,7 +362,7 @@ int i915_irq_emit(DRM_IOCTL_ARGS) ...@@ -362,7 +362,7 @@ int i915_irq_emit(DRM_IOCTL_ARGS)
drm_i915_irq_emit_t emit; drm_i915_irq_emit_t emit;
int result; int result;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
if (!dev_priv) { if (!dev_priv) {
DRM_ERROR("%s called with no initialization\n", __FUNCTION__); DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
......
...@@ -89,7 +89,7 @@ static void mark_block(struct drm_device * dev, struct mem_block *p, int in_use) ...@@ -89,7 +89,7 @@ static void mark_block(struct drm_device * dev, struct mem_block *p, int in_use)
*/ */
static struct mem_block *split_block(struct mem_block *p, int start, int size, static struct mem_block *split_block(struct mem_block *p, int start, int size,
DRMFILE filp) struct drm_file *file_priv)
{ {
/* Maybe cut off the start of an existing block */ /* Maybe cut off the start of an existing block */
if (start > p->start) { if (start > p->start) {
...@@ -99,7 +99,7 @@ static struct mem_block *split_block(struct mem_block *p, int start, int size, ...@@ -99,7 +99,7 @@ static struct mem_block *split_block(struct mem_block *p, int start, int size,
goto out; goto out;
newblock->start = start; newblock->start = start;
newblock->size = p->size - (start - p->start); newblock->size = p->size - (start - p->start);
newblock->filp = NULL; newblock->file_priv = NULL;
newblock->next = p->next; newblock->next = p->next;
newblock->prev = p; newblock->prev = p;
p->next->prev = newblock; p->next->prev = newblock;
...@@ -116,7 +116,7 @@ static struct mem_block *split_block(struct mem_block *p, int start, int size, ...@@ -116,7 +116,7 @@ static struct mem_block *split_block(struct mem_block *p, int start, int size,
goto out; goto out;
newblock->start = start + size; newblock->start = start + size;
newblock->size = p->size - size; newblock->size = p->size - size;
newblock->filp = NULL; newblock->file_priv = NULL;
newblock->next = p->next; newblock->next = p->next;
newblock->prev = p; newblock->prev = p;
p->next->prev = newblock; p->next->prev = newblock;
...@@ -126,20 +126,20 @@ static struct mem_block *split_block(struct mem_block *p, int start, int size, ...@@ -126,20 +126,20 @@ static struct mem_block *split_block(struct mem_block *p, int start, int size,
out: out:
/* Our block is in the middle */ /* Our block is in the middle */
p->filp = filp; p->file_priv = file_priv;
return p; return p;
} }
static struct mem_block *alloc_block(struct mem_block *heap, int size, static struct mem_block *alloc_block(struct mem_block *heap, int size,
int align2, DRMFILE filp) int align2, struct drm_file *file_priv)
{ {
struct mem_block *p; struct mem_block *p;
int mask = (1 << align2) - 1; int mask = (1 << align2) - 1;
for (p = heap->next; p != heap; p = p->next) { for (p = heap->next; p != heap; p = p->next) {
int start = (p->start + mask) & ~mask; int start = (p->start + mask) & ~mask;
if (p->filp == NULL && start + size <= p->start + p->size) if (p->file_priv == NULL && start + size <= p->start + p->size)
return split_block(p, start, size, filp); return split_block(p, start, size, file_priv);
} }
return NULL; return NULL;
...@@ -158,12 +158,12 @@ static struct mem_block *find_block(struct mem_block *heap, int start) ...@@ -158,12 +158,12 @@ static struct mem_block *find_block(struct mem_block *heap, int start)
static void free_block(struct mem_block *p) static void free_block(struct mem_block *p)
{ {
p->filp = NULL; p->file_priv = NULL;
/* Assumes a single contiguous range. Needs a special filp in /* Assumes a single contiguous range. Needs a special file_priv in
* 'heap' to stop it being subsumed. * 'heap' to stop it being subsumed.
*/ */
if (p->next->filp == NULL) { if (p->next->file_priv == NULL) {
struct mem_block *q = p->next; struct mem_block *q = p->next;
p->size += q->size; p->size += q->size;
p->next = q->next; p->next = q->next;
...@@ -171,7 +171,7 @@ static void free_block(struct mem_block *p) ...@@ -171,7 +171,7 @@ static void free_block(struct mem_block *p)
drm_free(q, sizeof(*q), DRM_MEM_BUFLISTS); drm_free(q, sizeof(*q), DRM_MEM_BUFLISTS);
} }
if (p->prev->filp == NULL) { if (p->prev->file_priv == NULL) {
struct mem_block *q = p->prev; struct mem_block *q = p->prev;
q->size += p->size; q->size += p->size;
q->next = p->next; q->next = p->next;
...@@ -197,18 +197,19 @@ static int init_heap(struct mem_block **heap, int start, int size) ...@@ -197,18 +197,19 @@ static int init_heap(struct mem_block **heap, int start, int size)
blocks->start = start; blocks->start = start;
blocks->size = size; blocks->size = size;
blocks->filp = NULL; blocks->file_priv = NULL;
blocks->next = blocks->prev = *heap; blocks->next = blocks->prev = *heap;
memset(*heap, 0, sizeof(**heap)); memset(*heap, 0, sizeof(**heap));
(*heap)->filp = (DRMFILE) - 1; (*heap)->file_priv = (struct drm_file *) - 1;
(*heap)->next = (*heap)->prev = blocks; (*heap)->next = (*heap)->prev = blocks;
return 0; return 0;
} }
/* Free all blocks associated with the releasing file. /* Free all blocks associated with the releasing file.
*/ */
void i915_mem_release(struct drm_device * dev, DRMFILE filp, struct mem_block *heap) void i915_mem_release(struct drm_device * dev, struct drm_file *file_priv,
struct mem_block *heap)
{ {
struct mem_block *p; struct mem_block *p;
...@@ -216,17 +217,17 @@ void i915_mem_release(struct drm_device * dev, DRMFILE filp, struct mem_block *h ...@@ -216,17 +217,17 @@ void i915_mem_release(struct drm_device * dev, DRMFILE filp, struct mem_block *h
return; return;
for (p = heap->next; p != heap; p = p->next) { for (p = heap->next; p != heap; p = p->next) {
if (p->filp == filp) { if (p->file_priv == file_priv) {
p->filp = NULL; p->file_priv = NULL;
mark_block(dev, p, 0); mark_block(dev, p, 0);
} }
} }
/* Assumes a single contiguous range. Needs a special filp in /* Assumes a single contiguous range. Needs a special file_priv in
* 'heap' to stop it being subsumed. * 'heap' to stop it being subsumed.
*/ */
for (p = heap->next; p != heap; p = p->next) { for (p = heap->next; p != heap; p = p->next) {
while (p->filp == NULL && p->next->filp == NULL) { while (p->file_priv == NULL && p->next->file_priv == NULL) {
struct mem_block *q = p->next; struct mem_block *q = p->next;
p->size += q->size; p->size += q->size;
p->next = q->next; p->next = q->next;
...@@ -292,7 +293,7 @@ int i915_mem_alloc(DRM_IOCTL_ARGS) ...@@ -292,7 +293,7 @@ int i915_mem_alloc(DRM_IOCTL_ARGS)
if (alloc.alignment < 12) if (alloc.alignment < 12)
alloc.alignment = 12; alloc.alignment = 12;
block = alloc_block(*heap, alloc.size, alloc.alignment, filp); block = alloc_block(*heap, alloc.size, alloc.alignment, file_priv);
if (!block) if (!block)
return -ENOMEM; return -ENOMEM;
...@@ -330,7 +331,7 @@ int i915_mem_free(DRM_IOCTL_ARGS) ...@@ -330,7 +331,7 @@ int i915_mem_free(DRM_IOCTL_ARGS)
if (!block) if (!block)
return -EFAULT; return -EFAULT;
if (block->filp != filp) if (block->file_priv != file_priv)
return -EPERM; return -EPERM;
mark_block(dev, block, 0); mark_block(dev, block, 0);
......
...@@ -1013,7 +1013,7 @@ int mga_dma_init(DRM_IOCTL_ARGS) ...@@ -1013,7 +1013,7 @@ int mga_dma_init(DRM_IOCTL_ARGS)
drm_mga_init_t init; drm_mga_init_t init;
int err; int err;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_COPY_FROM_USER_IOCTL(init, (drm_mga_init_t __user *) data, DRM_COPY_FROM_USER_IOCTL(init, (drm_mga_init_t __user *) data,
sizeof(init)); sizeof(init));
...@@ -1042,7 +1042,7 @@ int mga_dma_flush(DRM_IOCTL_ARGS) ...@@ -1042,7 +1042,7 @@ int mga_dma_flush(DRM_IOCTL_ARGS)
drm_mga_private_t *dev_priv = (drm_mga_private_t *) dev->dev_private; drm_mga_private_t *dev_priv = (drm_mga_private_t *) dev->dev_private;
struct drm_lock lock; struct drm_lock lock;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_COPY_FROM_USER_IOCTL(lock, (struct drm_lock __user *) data, DRM_COPY_FROM_USER_IOCTL(lock, (struct drm_lock __user *) data,
sizeof(lock)); sizeof(lock));
...@@ -1077,7 +1077,7 @@ int mga_dma_reset(DRM_IOCTL_ARGS) ...@@ -1077,7 +1077,7 @@ int mga_dma_reset(DRM_IOCTL_ARGS)
DRM_DEVICE; DRM_DEVICE;
drm_mga_private_t *dev_priv = (drm_mga_private_t *) dev->dev_private; drm_mga_private_t *dev_priv = (drm_mga_private_t *) dev->dev_private;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
return mga_do_dma_reset(dev_priv); return mga_do_dma_reset(dev_priv);
} }
...@@ -1086,7 +1086,8 @@ int mga_dma_reset(DRM_IOCTL_ARGS) ...@@ -1086,7 +1086,8 @@ int mga_dma_reset(DRM_IOCTL_ARGS)
* DMA buffer management * DMA buffer management
*/ */
static int mga_dma_get_buffers(DRMFILE filp, struct drm_device * dev, struct drm_dma * d) static int mga_dma_get_buffers(struct drm_device * dev,
struct drm_file *file_priv, struct drm_dma * d)
{ {
struct drm_buf *buf; struct drm_buf *buf;
int i; int i;
...@@ -1096,7 +1097,7 @@ static int mga_dma_get_buffers(DRMFILE filp, struct drm_device * dev, struct drm ...@@ -1096,7 +1097,7 @@ static int mga_dma_get_buffers(DRMFILE filp, struct drm_device * dev, struct drm
if (!buf) if (!buf)
return -EAGAIN; return -EAGAIN;
buf->filp = filp; buf->file_priv = file_priv;
if (DRM_COPY_TO_USER(&d->request_indices[i], if (DRM_COPY_TO_USER(&d->request_indices[i],
&buf->idx, sizeof(buf->idx))) &buf->idx, sizeof(buf->idx)))
...@@ -1119,7 +1120,7 @@ int mga_dma_buffers(DRM_IOCTL_ARGS) ...@@ -1119,7 +1120,7 @@ int mga_dma_buffers(DRM_IOCTL_ARGS)
struct drm_dma d; struct drm_dma d;
int ret = 0; int ret = 0;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_COPY_FROM_USER_IOCTL(d, argp, sizeof(d)); DRM_COPY_FROM_USER_IOCTL(d, argp, sizeof(d));
...@@ -1144,7 +1145,7 @@ int mga_dma_buffers(DRM_IOCTL_ARGS) ...@@ -1144,7 +1145,7 @@ int mga_dma_buffers(DRM_IOCTL_ARGS)
d.granted_count = 0; d.granted_count = 0;
if (d.request_count) { if (d.request_count) {
ret = mga_dma_get_buffers(filp, dev, &d); ret = mga_dma_get_buffers(dev, file_priv, &d);
} }
DRM_COPY_TO_USER_IOCTL(argp, d, sizeof(d)); DRM_COPY_TO_USER_IOCTL(argp, d, sizeof(d));
......
...@@ -835,7 +835,7 @@ static int mga_dma_clear(DRM_IOCTL_ARGS) ...@@ -835,7 +835,7 @@ static int mga_dma_clear(DRM_IOCTL_ARGS)
drm_mga_sarea_t *sarea_priv = dev_priv->sarea_priv; drm_mga_sarea_t *sarea_priv = dev_priv->sarea_priv;
drm_mga_clear_t clear; drm_mga_clear_t clear;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_COPY_FROM_USER_IOCTL(clear, (drm_mga_clear_t __user *) data, DRM_COPY_FROM_USER_IOCTL(clear, (drm_mga_clear_t __user *) data,
sizeof(clear)); sizeof(clear));
...@@ -860,7 +860,7 @@ static int mga_dma_swap(DRM_IOCTL_ARGS) ...@@ -860,7 +860,7 @@ static int mga_dma_swap(DRM_IOCTL_ARGS)
drm_mga_private_t *dev_priv = dev->dev_private; drm_mga_private_t *dev_priv = dev->dev_private;
drm_mga_sarea_t *sarea_priv = dev_priv->sarea_priv; drm_mga_sarea_t *sarea_priv = dev_priv->sarea_priv;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
if (sarea_priv->nbox > MGA_NR_SAREA_CLIPRECTS) if (sarea_priv->nbox > MGA_NR_SAREA_CLIPRECTS)
sarea_priv->nbox = MGA_NR_SAREA_CLIPRECTS; sarea_priv->nbox = MGA_NR_SAREA_CLIPRECTS;
...@@ -885,7 +885,7 @@ static int mga_dma_vertex(DRM_IOCTL_ARGS) ...@@ -885,7 +885,7 @@ static int mga_dma_vertex(DRM_IOCTL_ARGS)
drm_mga_buf_priv_t *buf_priv; drm_mga_buf_priv_t *buf_priv;
drm_mga_vertex_t vertex; drm_mga_vertex_t vertex;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_COPY_FROM_USER_IOCTL(vertex, DRM_COPY_FROM_USER_IOCTL(vertex,
(drm_mga_vertex_t __user *) data, (drm_mga_vertex_t __user *) data,
...@@ -925,7 +925,7 @@ static int mga_dma_indices(DRM_IOCTL_ARGS) ...@@ -925,7 +925,7 @@ static int mga_dma_indices(DRM_IOCTL_ARGS)
drm_mga_buf_priv_t *buf_priv; drm_mga_buf_priv_t *buf_priv;
drm_mga_indices_t indices; drm_mga_indices_t indices;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_COPY_FROM_USER_IOCTL(indices, DRM_COPY_FROM_USER_IOCTL(indices,
(drm_mga_indices_t __user *) data, (drm_mga_indices_t __user *) data,
...@@ -966,7 +966,7 @@ static int mga_dma_iload(DRM_IOCTL_ARGS) ...@@ -966,7 +966,7 @@ static int mga_dma_iload(DRM_IOCTL_ARGS)
drm_mga_iload_t iload; drm_mga_iload_t iload;
DRM_DEBUG("\n"); DRM_DEBUG("\n");
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_COPY_FROM_USER_IOCTL(iload, (drm_mga_iload_t __user *) data, DRM_COPY_FROM_USER_IOCTL(iload, (drm_mga_iload_t __user *) data,
sizeof(iload)); sizeof(iload));
...@@ -1008,7 +1008,7 @@ static int mga_dma_blit(DRM_IOCTL_ARGS) ...@@ -1008,7 +1008,7 @@ static int mga_dma_blit(DRM_IOCTL_ARGS)
drm_mga_blit_t blit; drm_mga_blit_t blit;
DRM_DEBUG("\n"); DRM_DEBUG("\n");
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_COPY_FROM_USER_IOCTL(blit, (drm_mga_blit_t __user *) data, DRM_COPY_FROM_USER_IOCTL(blit, (drm_mga_blit_t __user *) data,
sizeof(blit)); sizeof(blit));
......
...@@ -632,7 +632,7 @@ int r128_cce_init(DRM_IOCTL_ARGS) ...@@ -632,7 +632,7 @@ int r128_cce_init(DRM_IOCTL_ARGS)
DRM_DEBUG("\n"); DRM_DEBUG("\n");
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_COPY_FROM_USER_IOCTL(init, (drm_r128_init_t __user *) data, DRM_COPY_FROM_USER_IOCTL(init, (drm_r128_init_t __user *) data,
sizeof(init)); sizeof(init));
...@@ -653,7 +653,7 @@ int r128_cce_start(DRM_IOCTL_ARGS) ...@@ -653,7 +653,7 @@ int r128_cce_start(DRM_IOCTL_ARGS)
drm_r128_private_t *dev_priv = dev->dev_private; drm_r128_private_t *dev_priv = dev->dev_private;
DRM_DEBUG("\n"); DRM_DEBUG("\n");
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
if (dev_priv->cce_running || dev_priv->cce_mode == R128_PM4_NONPM4) { if (dev_priv->cce_running || dev_priv->cce_mode == R128_PM4_NONPM4) {
DRM_DEBUG("%s while CCE running\n", __FUNCTION__); DRM_DEBUG("%s while CCE running\n", __FUNCTION__);
...@@ -676,7 +676,7 @@ int r128_cce_stop(DRM_IOCTL_ARGS) ...@@ -676,7 +676,7 @@ int r128_cce_stop(DRM_IOCTL_ARGS)
int ret; int ret;
DRM_DEBUG("\n"); DRM_DEBUG("\n");
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_COPY_FROM_USER_IOCTL(stop, (drm_r128_cce_stop_t __user *) data, DRM_COPY_FROM_USER_IOCTL(stop, (drm_r128_cce_stop_t __user *) data,
sizeof(stop)); sizeof(stop));
...@@ -717,7 +717,7 @@ int r128_cce_reset(DRM_IOCTL_ARGS) ...@@ -717,7 +717,7 @@ int r128_cce_reset(DRM_IOCTL_ARGS)
drm_r128_private_t *dev_priv = dev->dev_private; drm_r128_private_t *dev_priv = dev->dev_private;
DRM_DEBUG("\n"); DRM_DEBUG("\n");
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
if (!dev_priv) { if (!dev_priv) {
DRM_DEBUG("%s called before init done\n", __FUNCTION__); DRM_DEBUG("%s called before init done\n", __FUNCTION__);
...@@ -738,7 +738,7 @@ int r128_cce_idle(DRM_IOCTL_ARGS) ...@@ -738,7 +738,7 @@ int r128_cce_idle(DRM_IOCTL_ARGS)
drm_r128_private_t *dev_priv = dev->dev_private; drm_r128_private_t *dev_priv = dev->dev_private;
DRM_DEBUG("\n"); DRM_DEBUG("\n");
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
if (dev_priv->cce_running) { if (dev_priv->cce_running) {
r128_do_cce_flush(dev_priv); r128_do_cce_flush(dev_priv);
...@@ -752,7 +752,7 @@ int r128_engine_reset(DRM_IOCTL_ARGS) ...@@ -752,7 +752,7 @@ int r128_engine_reset(DRM_IOCTL_ARGS)
DRM_DEVICE; DRM_DEVICE;
DRM_DEBUG("\n"); DRM_DEBUG("\n");
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
return r128_do_engine_reset(dev); return r128_do_engine_reset(dev);
} }
...@@ -828,7 +828,7 @@ static struct drm_buf *r128_freelist_get(struct drm_device * dev) ...@@ -828,7 +828,7 @@ static struct drm_buf *r128_freelist_get(struct drm_device * dev)
for (i = 0; i < dma->buf_count; i++) { for (i = 0; i < dma->buf_count; i++) {
buf = dma->buflist[i]; buf = dma->buflist[i];
buf_priv = buf->dev_private; buf_priv = buf->dev_private;
if (buf->filp == 0) if (buf->file_priv == 0)
return buf; return buf;
} }
...@@ -886,7 +886,9 @@ int r128_wait_ring(drm_r128_private_t * dev_priv, int n) ...@@ -886,7 +886,9 @@ int r128_wait_ring(drm_r128_private_t * dev_priv, int n)
return -EBUSY; return -EBUSY;
} }
static int r128_cce_get_buffers(DRMFILE filp, struct drm_device * dev, struct drm_dma * d) static int r128_cce_get_buffers(struct drm_device * dev,
struct drm_file *file_priv,
struct drm_dma * d)
{ {
int i; int i;
struct drm_buf *buf; struct drm_buf *buf;
...@@ -896,7 +898,7 @@ static int r128_cce_get_buffers(DRMFILE filp, struct drm_device * dev, struct dr ...@@ -896,7 +898,7 @@ static int r128_cce_get_buffers(DRMFILE filp, struct drm_device * dev, struct dr
if (!buf) if (!buf)
return -EAGAIN; return -EAGAIN;
buf->filp = filp; buf->file_priv = file_priv;
if (DRM_COPY_TO_USER(&d->request_indices[i], &buf->idx, if (DRM_COPY_TO_USER(&d->request_indices[i], &buf->idx,
sizeof(buf->idx))) sizeof(buf->idx)))
...@@ -918,7 +920,7 @@ int r128_cce_buffers(DRM_IOCTL_ARGS) ...@@ -918,7 +920,7 @@ int r128_cce_buffers(DRM_IOCTL_ARGS)
struct drm_dma __user *argp = (void __user *)data; struct drm_dma __user *argp = (void __user *)data;
struct drm_dma d; struct drm_dma d;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_COPY_FROM_USER_IOCTL(d, argp, sizeof(d)); DRM_COPY_FROM_USER_IOCTL(d, argp, sizeof(d));
...@@ -941,7 +943,7 @@ int r128_cce_buffers(DRM_IOCTL_ARGS) ...@@ -941,7 +943,7 @@ int r128_cce_buffers(DRM_IOCTL_ARGS)
d.granted_count = 0; d.granted_count = 0;
if (d.request_count) { if (d.request_count) {
ret = r128_cce_get_buffers(filp, dev, &d); ret = r128_cce_get_buffers(dev, file_priv, &d);
} }
DRM_COPY_TO_USER_IOCTL(argp, d, sizeof(d)); DRM_COPY_TO_USER_IOCTL(argp, d, sizeof(d));
......
...@@ -156,7 +156,8 @@ extern void r128_driver_irq_preinstall(struct drm_device * dev); ...@@ -156,7 +156,8 @@ extern void r128_driver_irq_preinstall(struct drm_device * dev);
extern void r128_driver_irq_postinstall(struct drm_device * dev); extern void r128_driver_irq_postinstall(struct drm_device * dev);
extern void r128_driver_irq_uninstall(struct drm_device * dev); extern void r128_driver_irq_uninstall(struct drm_device * dev);
extern void r128_driver_lastclose(struct drm_device * dev); extern void r128_driver_lastclose(struct drm_device * dev);
extern void r128_driver_preclose(struct drm_device * dev, DRMFILE filp); extern void r128_driver_preclose(struct drm_device * dev,
struct drm_file *file_priv);
extern long r128_compat_ioctl(struct file *filp, unsigned int cmd, extern long r128_compat_ioctl(struct file *filp, unsigned int cmd,
unsigned long arg); unsigned long arg);
......
...@@ -776,8 +776,9 @@ static void r128_cce_dispatch_indices(struct drm_device * dev, ...@@ -776,8 +776,9 @@ static void r128_cce_dispatch_indices(struct drm_device * dev,
sarea_priv->nbox = 0; sarea_priv->nbox = 0;
} }
static int r128_cce_dispatch_blit(DRMFILE filp, static int r128_cce_dispatch_blit(struct drm_device * dev,
struct drm_device * dev, drm_r128_blit_t * blit) struct drm_file *file_priv,
drm_r128_blit_t * blit)
{ {
drm_r128_private_t *dev_priv = dev->dev_private; drm_r128_private_t *dev_priv = dev->dev_private;
struct drm_device_dma *dma = dev->dma; struct drm_device_dma *dma = dev->dma;
...@@ -829,9 +830,9 @@ static int r128_cce_dispatch_blit(DRMFILE filp, ...@@ -829,9 +830,9 @@ static int r128_cce_dispatch_blit(DRMFILE filp,
buf = dma->buflist[blit->idx]; buf = dma->buflist[blit->idx];
buf_priv = buf->dev_private; buf_priv = buf->dev_private;
if (buf->filp != filp) { if (buf->file_priv != file_priv) {
DRM_ERROR("process %d using buffer owned by %p\n", DRM_ERROR("process %d using buffer owned by %p\n",
DRM_CURRENTPID, buf->filp); DRM_CURRENTPID, buf->file_priv);
return -EINVAL; return -EINVAL;
} }
if (buf->pending) { if (buf->pending) {
...@@ -1249,7 +1250,7 @@ static int r128_cce_clear(DRM_IOCTL_ARGS) ...@@ -1249,7 +1250,7 @@ static int r128_cce_clear(DRM_IOCTL_ARGS)
drm_r128_clear_t clear; drm_r128_clear_t clear;
DRM_DEBUG("\n"); DRM_DEBUG("\n");
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_COPY_FROM_USER_IOCTL(clear, (drm_r128_clear_t __user *) data, DRM_COPY_FROM_USER_IOCTL(clear, (drm_r128_clear_t __user *) data,
sizeof(clear)); sizeof(clear));
...@@ -1315,7 +1316,7 @@ static int r128_cce_flip(DRM_IOCTL_ARGS) ...@@ -1315,7 +1316,7 @@ static int r128_cce_flip(DRM_IOCTL_ARGS)
drm_r128_private_t *dev_priv = dev->dev_private; drm_r128_private_t *dev_priv = dev->dev_private;
DRM_DEBUG("%s\n", __FUNCTION__); DRM_DEBUG("%s\n", __FUNCTION__);
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
RING_SPACE_TEST_WITH_RETURN(dev_priv); RING_SPACE_TEST_WITH_RETURN(dev_priv);
...@@ -1335,7 +1336,7 @@ static int r128_cce_swap(DRM_IOCTL_ARGS) ...@@ -1335,7 +1336,7 @@ static int r128_cce_swap(DRM_IOCTL_ARGS)
drm_r128_sarea_t *sarea_priv = dev_priv->sarea_priv; drm_r128_sarea_t *sarea_priv = dev_priv->sarea_priv;
DRM_DEBUG("%s\n", __FUNCTION__); DRM_DEBUG("%s\n", __FUNCTION__);
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
RING_SPACE_TEST_WITH_RETURN(dev_priv); RING_SPACE_TEST_WITH_RETURN(dev_priv);
...@@ -1359,7 +1360,7 @@ static int r128_cce_vertex(DRM_IOCTL_ARGS) ...@@ -1359,7 +1360,7 @@ static int r128_cce_vertex(DRM_IOCTL_ARGS)
drm_r128_buf_priv_t *buf_priv; drm_r128_buf_priv_t *buf_priv;
drm_r128_vertex_t vertex; drm_r128_vertex_t vertex;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
if (!dev_priv) { if (!dev_priv) {
DRM_ERROR("%s called with no initialization\n", __FUNCTION__); DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
...@@ -1389,9 +1390,9 @@ static int r128_cce_vertex(DRM_IOCTL_ARGS) ...@@ -1389,9 +1390,9 @@ static int r128_cce_vertex(DRM_IOCTL_ARGS)
buf = dma->buflist[vertex.idx]; buf = dma->buflist[vertex.idx];
buf_priv = buf->dev_private; buf_priv = buf->dev_private;
if (buf->filp != filp) { if (buf->file_priv != file_priv) {
DRM_ERROR("process %d using buffer owned by %p\n", DRM_ERROR("process %d using buffer owned by %p\n",
DRM_CURRENTPID, buf->filp); DRM_CURRENTPID, buf->file_priv);
return -EINVAL; return -EINVAL;
} }
if (buf->pending) { if (buf->pending) {
...@@ -1419,7 +1420,7 @@ static int r128_cce_indices(DRM_IOCTL_ARGS) ...@@ -1419,7 +1420,7 @@ static int r128_cce_indices(DRM_IOCTL_ARGS)
drm_r128_indices_t elts; drm_r128_indices_t elts;
int count; int count;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
if (!dev_priv) { if (!dev_priv) {
DRM_ERROR("%s called with no initialization\n", __FUNCTION__); DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
...@@ -1448,9 +1449,9 @@ static int r128_cce_indices(DRM_IOCTL_ARGS) ...@@ -1448,9 +1449,9 @@ static int r128_cce_indices(DRM_IOCTL_ARGS)
buf = dma->buflist[elts.idx]; buf = dma->buflist[elts.idx];
buf_priv = buf->dev_private; buf_priv = buf->dev_private;
if (buf->filp != filp) { if (buf->file_priv != file_priv) {
DRM_ERROR("process %d using buffer owned by %p\n", DRM_ERROR("process %d using buffer owned by %p\n",
DRM_CURRENTPID, buf->filp); DRM_CURRENTPID, buf->file_priv);
return -EINVAL; return -EINVAL;
} }
if (buf->pending) { if (buf->pending) {
...@@ -1488,7 +1489,7 @@ static int r128_cce_blit(DRM_IOCTL_ARGS) ...@@ -1488,7 +1489,7 @@ static int r128_cce_blit(DRM_IOCTL_ARGS)
drm_r128_blit_t blit; drm_r128_blit_t blit;
int ret; int ret;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_COPY_FROM_USER_IOCTL(blit, (drm_r128_blit_t __user *) data, DRM_COPY_FROM_USER_IOCTL(blit, (drm_r128_blit_t __user *) data,
sizeof(blit)); sizeof(blit));
...@@ -1504,7 +1505,7 @@ static int r128_cce_blit(DRM_IOCTL_ARGS) ...@@ -1504,7 +1505,7 @@ static int r128_cce_blit(DRM_IOCTL_ARGS)
RING_SPACE_TEST_WITH_RETURN(dev_priv); RING_SPACE_TEST_WITH_RETURN(dev_priv);
VB_AGE_TEST_WITH_RETURN(dev_priv); VB_AGE_TEST_WITH_RETURN(dev_priv);
ret = r128_cce_dispatch_blit(filp, dev, &blit); ret = r128_cce_dispatch_blit(dev, file_priv, &blit);
COMMIT_RING(); COMMIT_RING();
return ret; return ret;
...@@ -1517,7 +1518,7 @@ static int r128_cce_depth(DRM_IOCTL_ARGS) ...@@ -1517,7 +1518,7 @@ static int r128_cce_depth(DRM_IOCTL_ARGS)
drm_r128_depth_t depth; drm_r128_depth_t depth;
int ret; int ret;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_COPY_FROM_USER_IOCTL(depth, (drm_r128_depth_t __user *) data, DRM_COPY_FROM_USER_IOCTL(depth, (drm_r128_depth_t __user *) data,
sizeof(depth)); sizeof(depth));
...@@ -1551,7 +1552,7 @@ static int r128_cce_stipple(DRM_IOCTL_ARGS) ...@@ -1551,7 +1552,7 @@ static int r128_cce_stipple(DRM_IOCTL_ARGS)
drm_r128_stipple_t stipple; drm_r128_stipple_t stipple;
u32 mask[32]; u32 mask[32];
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_COPY_FROM_USER_IOCTL(stipple, (drm_r128_stipple_t __user *) data, DRM_COPY_FROM_USER_IOCTL(stipple, (drm_r128_stipple_t __user *) data,
sizeof(stipple)); sizeof(stipple));
...@@ -1579,7 +1580,7 @@ static int r128_cce_indirect(DRM_IOCTL_ARGS) ...@@ -1579,7 +1580,7 @@ static int r128_cce_indirect(DRM_IOCTL_ARGS)
RING_LOCALS; RING_LOCALS;
#endif #endif
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
if (!dev_priv) { if (!dev_priv) {
DRM_ERROR("%s called with no initialization\n", __FUNCTION__); DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
...@@ -1601,9 +1602,9 @@ static int r128_cce_indirect(DRM_IOCTL_ARGS) ...@@ -1601,9 +1602,9 @@ static int r128_cce_indirect(DRM_IOCTL_ARGS)
buf = dma->buflist[indirect.idx]; buf = dma->buflist[indirect.idx];
buf_priv = buf->dev_private; buf_priv = buf->dev_private;
if (buf->filp != filp) { if (buf->file_priv != file_priv) {
DRM_ERROR("process %d using buffer owned by %p\n", DRM_ERROR("process %d using buffer owned by %p\n",
DRM_CURRENTPID, buf->filp); DRM_CURRENTPID, buf->file_priv);
return -EINVAL; return -EINVAL;
} }
if (buf->pending) { if (buf->pending) {
...@@ -1675,7 +1676,7 @@ static int r128_getparam(DRM_IOCTL_ARGS) ...@@ -1675,7 +1676,7 @@ static int r128_getparam(DRM_IOCTL_ARGS)
return 0; return 0;
} }
void r128_driver_preclose(struct drm_device * dev, DRMFILE filp) void r128_driver_preclose(struct drm_device * dev, struct drm_file *file_priv)
{ {
if (dev->dev_private) { if (dev->dev_private) {
drm_r128_private_t *dev_priv = dev->dev_private; drm_r128_private_t *dev_priv = dev->dev_private;
......
...@@ -780,8 +780,7 @@ static int r300_scratch(drm_radeon_private_t *dev_priv, ...@@ -780,8 +780,7 @@ static int r300_scratch(drm_radeon_private_t *dev_priv,
* Called by the ioctl handler function radeon_cp_cmdbuf. * Called by the ioctl handler function radeon_cp_cmdbuf.
*/ */
int r300_do_cp_cmdbuf(struct drm_device *dev, int r300_do_cp_cmdbuf(struct drm_device *dev,
DRMFILE filp, struct drm_file *file_priv,
struct drm_file *filp_priv,
drm_radeon_kcmd_buffer_t *cmdbuf) drm_radeon_kcmd_buffer_t *cmdbuf)
{ {
drm_radeon_private_t *dev_priv = dev->dev_private; drm_radeon_private_t *dev_priv = dev->dev_private;
...@@ -884,9 +883,10 @@ int r300_do_cp_cmdbuf(struct drm_device *dev, ...@@ -884,9 +883,10 @@ int r300_do_cp_cmdbuf(struct drm_device *dev,
} }
buf = dma->buflist[idx]; buf = dma->buflist[idx];
if (buf->filp != filp || buf->pending) { if (buf->file_priv != file_priv || buf->pending) {
DRM_ERROR("bad buffer %p %p %d\n", DRM_ERROR("bad buffer %p %p %d\n",
buf->filp, filp, buf->pending); buf->file_priv, file_priv,
buf->pending);
ret = -EINVAL; ret = -EINVAL;
goto cleanup; goto cleanup;
} }
......
...@@ -1828,7 +1828,7 @@ int radeon_cp_init(DRM_IOCTL_ARGS) ...@@ -1828,7 +1828,7 @@ int radeon_cp_init(DRM_IOCTL_ARGS)
DRM_DEVICE; DRM_DEVICE;
drm_radeon_init_t init; drm_radeon_init_t init;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_COPY_FROM_USER_IOCTL(init, (drm_radeon_init_t __user *) data, DRM_COPY_FROM_USER_IOCTL(init, (drm_radeon_init_t __user *) data,
sizeof(init)); sizeof(init));
...@@ -1854,7 +1854,7 @@ int radeon_cp_start(DRM_IOCTL_ARGS) ...@@ -1854,7 +1854,7 @@ int radeon_cp_start(DRM_IOCTL_ARGS)
drm_radeon_private_t *dev_priv = dev->dev_private; drm_radeon_private_t *dev_priv = dev->dev_private;
DRM_DEBUG("\n"); DRM_DEBUG("\n");
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
if (dev_priv->cp_running) { if (dev_priv->cp_running) {
DRM_DEBUG("%s while CP running\n", __FUNCTION__); DRM_DEBUG("%s while CP running\n", __FUNCTION__);
...@@ -1882,7 +1882,7 @@ int radeon_cp_stop(DRM_IOCTL_ARGS) ...@@ -1882,7 +1882,7 @@ int radeon_cp_stop(DRM_IOCTL_ARGS)
int ret; int ret;
DRM_DEBUG("\n"); DRM_DEBUG("\n");
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_COPY_FROM_USER_IOCTL(stop, (drm_radeon_cp_stop_t __user *) data, DRM_COPY_FROM_USER_IOCTL(stop, (drm_radeon_cp_stop_t __user *) data,
sizeof(stop)); sizeof(stop));
...@@ -1969,7 +1969,7 @@ int radeon_cp_reset(DRM_IOCTL_ARGS) ...@@ -1969,7 +1969,7 @@ int radeon_cp_reset(DRM_IOCTL_ARGS)
drm_radeon_private_t *dev_priv = dev->dev_private; drm_radeon_private_t *dev_priv = dev->dev_private;
DRM_DEBUG("\n"); DRM_DEBUG("\n");
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
if (!dev_priv) { if (!dev_priv) {
DRM_DEBUG("%s called before init done\n", __FUNCTION__); DRM_DEBUG("%s called before init done\n", __FUNCTION__);
...@@ -1990,7 +1990,7 @@ int radeon_cp_idle(DRM_IOCTL_ARGS) ...@@ -1990,7 +1990,7 @@ int radeon_cp_idle(DRM_IOCTL_ARGS)
drm_radeon_private_t *dev_priv = dev->dev_private; drm_radeon_private_t *dev_priv = dev->dev_private;
DRM_DEBUG("\n"); DRM_DEBUG("\n");
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
return radeon_do_cp_idle(dev_priv); return radeon_do_cp_idle(dev_priv);
} }
...@@ -2009,7 +2009,7 @@ int radeon_engine_reset(DRM_IOCTL_ARGS) ...@@ -2009,7 +2009,7 @@ int radeon_engine_reset(DRM_IOCTL_ARGS)
DRM_DEVICE; DRM_DEVICE;
DRM_DEBUG("\n"); DRM_DEBUG("\n");
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
return radeon_do_engine_reset(dev); return radeon_do_engine_reset(dev);
} }
...@@ -2066,8 +2066,9 @@ struct drm_buf *radeon_freelist_get(struct drm_device * dev) ...@@ -2066,8 +2066,9 @@ struct drm_buf *radeon_freelist_get(struct drm_device * dev)
for (i = start; i < dma->buf_count; i++) { for (i = start; i < dma->buf_count; i++) {
buf = dma->buflist[i]; buf = dma->buflist[i];
buf_priv = buf->dev_private; buf_priv = buf->dev_private;
if (buf->filp == 0 || (buf->pending && if (buf->file_priv == NULL || (buf->pending &&
buf_priv->age <= done_age)) { buf_priv->age <=
done_age)) {
dev_priv->stats.requested_bufs++; dev_priv->stats.requested_bufs++;
buf->pending = 0; buf->pending = 0;
return buf; return buf;
...@@ -2106,8 +2107,9 @@ struct drm_buf *radeon_freelist_get(struct drm_device * dev) ...@@ -2106,8 +2107,9 @@ struct drm_buf *radeon_freelist_get(struct drm_device * dev)
for (i = start; i < dma->buf_count; i++) { for (i = start; i < dma->buf_count; i++) {
buf = dma->buflist[i]; buf = dma->buflist[i];
buf_priv = buf->dev_private; buf_priv = buf->dev_private;
if (buf->filp == 0 || (buf->pending && if (buf->file_priv == 0 || (buf->pending &&
buf_priv->age <= done_age)) { buf_priv->age <=
done_age)) {
dev_priv->stats.requested_bufs++; dev_priv->stats.requested_bufs++;
buf->pending = 0; buf->pending = 0;
return buf; return buf;
...@@ -2170,7 +2172,8 @@ int radeon_wait_ring(drm_radeon_private_t * dev_priv, int n) ...@@ -2170,7 +2172,8 @@ int radeon_wait_ring(drm_radeon_private_t * dev_priv, int n)
return -EBUSY; return -EBUSY;
} }
static int radeon_cp_get_buffers(DRMFILE filp, struct drm_device * dev, static int radeon_cp_get_buffers(struct drm_device *dev,
struct drm_file *file_priv,
struct drm_dma * d) struct drm_dma * d)
{ {
int i; int i;
...@@ -2181,7 +2184,7 @@ static int radeon_cp_get_buffers(DRMFILE filp, struct drm_device * dev, ...@@ -2181,7 +2184,7 @@ static int radeon_cp_get_buffers(DRMFILE filp, struct drm_device * dev,
if (!buf) if (!buf)
return -EBUSY; /* NOTE: broken client */ return -EBUSY; /* NOTE: broken client */
buf->filp = filp; buf->file_priv = file_priv;
if (DRM_COPY_TO_USER(&d->request_indices[i], &buf->idx, if (DRM_COPY_TO_USER(&d->request_indices[i], &buf->idx,
sizeof(buf->idx))) sizeof(buf->idx)))
...@@ -2203,7 +2206,7 @@ int radeon_cp_buffers(DRM_IOCTL_ARGS) ...@@ -2203,7 +2206,7 @@ int radeon_cp_buffers(DRM_IOCTL_ARGS)
struct drm_dma __user *argp = (void __user *)data; struct drm_dma __user *argp = (void __user *)data;
struct drm_dma d; struct drm_dma d;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_COPY_FROM_USER_IOCTL(d, argp, sizeof(d)); DRM_COPY_FROM_USER_IOCTL(d, argp, sizeof(d));
...@@ -2226,7 +2229,7 @@ int radeon_cp_buffers(DRM_IOCTL_ARGS) ...@@ -2226,7 +2229,7 @@ int radeon_cp_buffers(DRM_IOCTL_ARGS)
d.granted_count = 0; d.granted_count = 0;
if (d.request_count) { if (d.request_count) {
ret = radeon_cp_get_buffers(filp, dev, &d); ret = radeon_cp_get_buffers(dev, file_priv, &d);
} }
DRM_COPY_TO_USER_IOCTL(argp, d, sizeof(d)); DRM_COPY_TO_USER_IOCTL(argp, d, sizeof(d));
......
...@@ -188,7 +188,7 @@ struct mem_block { ...@@ -188,7 +188,7 @@ struct mem_block {
struct mem_block *prev; struct mem_block *prev;
int start; int start;
int size; int size;
DRMFILE filp; /* 0: free, -1: heap, other: real files */ struct drm_file *file_priv; /* NULL: free, -1: heap, other: real files */
}; };
struct radeon_surface { struct radeon_surface {
...@@ -203,7 +203,7 @@ struct radeon_virt_surface { ...@@ -203,7 +203,7 @@ struct radeon_virt_surface {
u32 lower; u32 lower;
u32 upper; u32 upper;
u32 flags; u32 flags;
DRMFILE filp; struct drm_file *file_priv;
}; };
typedef struct drm_radeon_private { typedef struct drm_radeon_private {
...@@ -351,7 +351,8 @@ extern int radeon_mem_alloc(DRM_IOCTL_ARGS); ...@@ -351,7 +351,8 @@ extern int radeon_mem_alloc(DRM_IOCTL_ARGS);
extern int radeon_mem_free(DRM_IOCTL_ARGS); extern int radeon_mem_free(DRM_IOCTL_ARGS);
extern int radeon_mem_init_heap(DRM_IOCTL_ARGS); extern int radeon_mem_init_heap(DRM_IOCTL_ARGS);
extern void radeon_mem_takedown(struct mem_block **heap); extern void radeon_mem_takedown(struct mem_block **heap);
extern void radeon_mem_release(DRMFILE filp, struct mem_block *heap); extern void radeon_mem_release(struct drm_file *file_priv,
struct mem_block *heap);
/* radeon_irq.c */ /* radeon_irq.c */
extern int radeon_irq_emit(DRM_IOCTL_ARGS); extern int radeon_irq_emit(DRM_IOCTL_ARGS);
...@@ -372,7 +373,7 @@ extern int radeon_vblank_crtc_set(struct drm_device *dev, int64_t value); ...@@ -372,7 +373,7 @@ extern int radeon_vblank_crtc_set(struct drm_device *dev, int64_t value);
extern int radeon_driver_load(struct drm_device *dev, unsigned long flags); extern int radeon_driver_load(struct drm_device *dev, unsigned long flags);
extern int radeon_driver_unload(struct drm_device *dev); extern int radeon_driver_unload(struct drm_device *dev);
extern int radeon_driver_firstopen(struct drm_device *dev); extern int radeon_driver_firstopen(struct drm_device *dev);
extern void radeon_driver_preclose(struct drm_device * dev, DRMFILE filp); extern void radeon_driver_preclose(struct drm_device * dev, struct drm_file *file_priv);
extern void radeon_driver_postclose(struct drm_device * dev, struct drm_file * filp); extern void radeon_driver_postclose(struct drm_device * dev, struct drm_file * filp);
extern void radeon_driver_lastclose(struct drm_device * dev); extern void radeon_driver_lastclose(struct drm_device * dev);
extern int radeon_driver_open(struct drm_device * dev, struct drm_file * filp_priv); extern int radeon_driver_open(struct drm_device * dev, struct drm_file * filp_priv);
...@@ -382,8 +383,8 @@ extern long radeon_compat_ioctl(struct file *filp, unsigned int cmd, ...@@ -382,8 +383,8 @@ extern long radeon_compat_ioctl(struct file *filp, unsigned int cmd,
/* r300_cmdbuf.c */ /* r300_cmdbuf.c */
extern void r300_init_reg_flags(void); extern void r300_init_reg_flags(void);
extern int r300_do_cp_cmdbuf(struct drm_device * dev, DRMFILE filp, extern int r300_do_cp_cmdbuf(struct drm_device * dev,
struct drm_file * filp_priv, struct drm_file *file_priv,
drm_radeon_kcmd_buffer_t * cmdbuf); drm_radeon_kcmd_buffer_t * cmdbuf);
/* Flags for stats.boxes /* Flags for stats.boxes
......
...@@ -203,7 +203,7 @@ int radeon_irq_emit(DRM_IOCTL_ARGS) ...@@ -203,7 +203,7 @@ int radeon_irq_emit(DRM_IOCTL_ARGS)
drm_radeon_irq_emit_t emit; drm_radeon_irq_emit_t emit;
int result; int result;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
if (!dev_priv) { if (!dev_priv) {
DRM_ERROR("%s called with no initialization\n", __FUNCTION__); DRM_ERROR("%s called with no initialization\n", __FUNCTION__);
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
*/ */
static struct mem_block *split_block(struct mem_block *p, int start, int size, static struct mem_block *split_block(struct mem_block *p, int start, int size,
DRMFILE filp) struct drm_file *file_priv)
{ {
/* Maybe cut off the start of an existing block */ /* Maybe cut off the start of an existing block */
if (start > p->start) { if (start > p->start) {
...@@ -49,7 +49,7 @@ static struct mem_block *split_block(struct mem_block *p, int start, int size, ...@@ -49,7 +49,7 @@ static struct mem_block *split_block(struct mem_block *p, int start, int size,
goto out; goto out;
newblock->start = start; newblock->start = start;
newblock->size = p->size - (start - p->start); newblock->size = p->size - (start - p->start);
newblock->filp = NULL; newblock->file_priv = NULL;
newblock->next = p->next; newblock->next = p->next;
newblock->prev = p; newblock->prev = p;
p->next->prev = newblock; p->next->prev = newblock;
...@@ -66,7 +66,7 @@ static struct mem_block *split_block(struct mem_block *p, int start, int size, ...@@ -66,7 +66,7 @@ static struct mem_block *split_block(struct mem_block *p, int start, int size,
goto out; goto out;
newblock->start = start + size; newblock->start = start + size;
newblock->size = p->size - size; newblock->size = p->size - size;
newblock->filp = NULL; newblock->file_priv = NULL;
newblock->next = p->next; newblock->next = p->next;
newblock->prev = p; newblock->prev = p;
p->next->prev = newblock; p->next->prev = newblock;
...@@ -76,20 +76,20 @@ static struct mem_block *split_block(struct mem_block *p, int start, int size, ...@@ -76,20 +76,20 @@ static struct mem_block *split_block(struct mem_block *p, int start, int size,
out: out:
/* Our block is in the middle */ /* Our block is in the middle */
p->filp = filp; p->file_priv = file_priv;
return p; return p;
} }
static struct mem_block *alloc_block(struct mem_block *heap, int size, static struct mem_block *alloc_block(struct mem_block *heap, int size,
int align2, DRMFILE filp) int align2, struct drm_file *file_priv)
{ {
struct mem_block *p; struct mem_block *p;
int mask = (1 << align2) - 1; int mask = (1 << align2) - 1;
list_for_each(p, heap) { list_for_each(p, heap) {
int start = (p->start + mask) & ~mask; int start = (p->start + mask) & ~mask;
if (p->filp == 0 && start + size <= p->start + p->size) if (p->file_priv == 0 && start + size <= p->start + p->size)
return split_block(p, start, size, filp); return split_block(p, start, size, file_priv);
} }
return NULL; return NULL;
...@@ -108,12 +108,12 @@ static struct mem_block *find_block(struct mem_block *heap, int start) ...@@ -108,12 +108,12 @@ static struct mem_block *find_block(struct mem_block *heap, int start)
static void free_block(struct mem_block *p) static void free_block(struct mem_block *p)
{ {
p->filp = NULL; p->file_priv = NULL;
/* Assumes a single contiguous range. Needs a special filp in /* Assumes a single contiguous range. Needs a special file_priv in
* 'heap' to stop it being subsumed. * 'heap' to stop it being subsumed.
*/ */
if (p->next->filp == 0) { if (p->next->file_priv == 0) {
struct mem_block *q = p->next; struct mem_block *q = p->next;
p->size += q->size; p->size += q->size;
p->next = q->next; p->next = q->next;
...@@ -121,7 +121,7 @@ static void free_block(struct mem_block *p) ...@@ -121,7 +121,7 @@ static void free_block(struct mem_block *p)
drm_free(q, sizeof(*q), DRM_MEM_BUFS); drm_free(q, sizeof(*q), DRM_MEM_BUFS);
} }
if (p->prev->filp == 0) { if (p->prev->file_priv == 0) {
struct mem_block *q = p->prev; struct mem_block *q = p->prev;
q->size += p->size; q->size += p->size;
q->next = p->next; q->next = p->next;
...@@ -147,18 +147,18 @@ static int init_heap(struct mem_block **heap, int start, int size) ...@@ -147,18 +147,18 @@ static int init_heap(struct mem_block **heap, int start, int size)
blocks->start = start; blocks->start = start;
blocks->size = size; blocks->size = size;
blocks->filp = NULL; blocks->file_priv = NULL;
blocks->next = blocks->prev = *heap; blocks->next = blocks->prev = *heap;
memset(*heap, 0, sizeof(**heap)); memset(*heap, 0, sizeof(**heap));
(*heap)->filp = (DRMFILE) - 1; (*heap)->file_priv = (struct drm_file *) - 1;
(*heap)->next = (*heap)->prev = blocks; (*heap)->next = (*heap)->prev = blocks;
return 0; return 0;
} }
/* Free all blocks associated with the releasing file. /* Free all blocks associated with the releasing file.
*/ */
void radeon_mem_release(DRMFILE filp, struct mem_block *heap) void radeon_mem_release(struct drm_file *file_priv, struct mem_block *heap)
{ {
struct mem_block *p; struct mem_block *p;
...@@ -166,15 +166,15 @@ void radeon_mem_release(DRMFILE filp, struct mem_block *heap) ...@@ -166,15 +166,15 @@ void radeon_mem_release(DRMFILE filp, struct mem_block *heap)
return; return;
list_for_each(p, heap) { list_for_each(p, heap) {
if (p->filp == filp) if (p->file_priv == file_priv)
p->filp = NULL; p->file_priv = NULL;
} }
/* Assumes a single contiguous range. Needs a special filp in /* Assumes a single contiguous range. Needs a special file_priv in
* 'heap' to stop it being subsumed. * 'heap' to stop it being subsumed.
*/ */
list_for_each(p, heap) { list_for_each(p, heap) {
while (p->filp == 0 && p->next->filp == 0) { while (p->file_priv == 0 && p->next->file_priv == 0) {
struct mem_block *q = p->next; struct mem_block *q = p->next;
p->size += q->size; p->size += q->size;
p->next = q->next; p->next = q->next;
...@@ -242,7 +242,7 @@ int radeon_mem_alloc(DRM_IOCTL_ARGS) ...@@ -242,7 +242,7 @@ int radeon_mem_alloc(DRM_IOCTL_ARGS)
if (alloc.alignment < 12) if (alloc.alignment < 12)
alloc.alignment = 12; alloc.alignment = 12;
block = alloc_block(*heap, alloc.size, alloc.alignment, filp); block = alloc_block(*heap, alloc.size, alloc.alignment, file_priv);
if (!block) if (!block)
return -ENOMEM; return -ENOMEM;
...@@ -278,7 +278,7 @@ int radeon_mem_free(DRM_IOCTL_ARGS) ...@@ -278,7 +278,7 @@ int radeon_mem_free(DRM_IOCTL_ARGS)
if (!block) if (!block)
return -EFAULT; return -EFAULT;
if (block->filp != filp) if (block->file_priv != file_priv)
return -EPERM; return -EPERM;
free_block(block); free_block(block);
......
...@@ -39,7 +39,7 @@ ...@@ -39,7 +39,7 @@
static __inline__ int radeon_check_and_fixup_offset(drm_radeon_private_t * static __inline__ int radeon_check_and_fixup_offset(drm_radeon_private_t *
dev_priv, dev_priv,
struct drm_file * filp_priv, struct drm_file * file_priv,
u32 *offset) u32 *offset)
{ {
u64 off = *offset; u64 off = *offset;
...@@ -71,7 +71,7 @@ static __inline__ int radeon_check_and_fixup_offset(drm_radeon_private_t * ...@@ -71,7 +71,7 @@ static __inline__ int radeon_check_and_fixup_offset(drm_radeon_private_t *
* magic offset we get from SETPARAM or calculated from fb_location * magic offset we get from SETPARAM or calculated from fb_location
*/ */
if (off < (dev_priv->fb_size + dev_priv->gart_size)) { if (off < (dev_priv->fb_size + dev_priv->gart_size)) {
radeon_priv = filp_priv->driver_priv; radeon_priv = file_priv->driver_priv;
off += radeon_priv->radeon_fb_delta; off += radeon_priv->radeon_fb_delta;
} }
...@@ -90,13 +90,13 @@ static __inline__ int radeon_check_and_fixup_offset(drm_radeon_private_t * ...@@ -90,13 +90,13 @@ static __inline__ int radeon_check_and_fixup_offset(drm_radeon_private_t *
static __inline__ int radeon_check_and_fixup_packets(drm_radeon_private_t * static __inline__ int radeon_check_and_fixup_packets(drm_radeon_private_t *
dev_priv, dev_priv,
struct drm_file * filp_priv, struct drm_file *file_priv,
int id, u32 *data) int id, u32 *data)
{ {
switch (id) { switch (id) {
case RADEON_EMIT_PP_MISC: case RADEON_EMIT_PP_MISC:
if (radeon_check_and_fixup_offset(dev_priv, filp_priv, if (radeon_check_and_fixup_offset(dev_priv, file_priv,
&data[(RADEON_RB3D_DEPTHOFFSET - RADEON_PP_MISC) / 4])) { &data[(RADEON_RB3D_DEPTHOFFSET - RADEON_PP_MISC) / 4])) {
DRM_ERROR("Invalid depth buffer offset\n"); DRM_ERROR("Invalid depth buffer offset\n");
return -EINVAL; return -EINVAL;
...@@ -104,7 +104,7 @@ static __inline__ int radeon_check_and_fixup_packets(drm_radeon_private_t * ...@@ -104,7 +104,7 @@ static __inline__ int radeon_check_and_fixup_packets(drm_radeon_private_t *
break; break;
case RADEON_EMIT_PP_CNTL: case RADEON_EMIT_PP_CNTL:
if (radeon_check_and_fixup_offset(dev_priv, filp_priv, if (radeon_check_and_fixup_offset(dev_priv, file_priv,
&data[(RADEON_RB3D_COLOROFFSET - RADEON_PP_CNTL) / 4])) { &data[(RADEON_RB3D_COLOROFFSET - RADEON_PP_CNTL) / 4])) {
DRM_ERROR("Invalid colour buffer offset\n"); DRM_ERROR("Invalid colour buffer offset\n");
return -EINVAL; return -EINVAL;
...@@ -117,7 +117,7 @@ static __inline__ int radeon_check_and_fixup_packets(drm_radeon_private_t * ...@@ -117,7 +117,7 @@ static __inline__ int radeon_check_and_fixup_packets(drm_radeon_private_t *
case R200_EMIT_PP_TXOFFSET_3: case R200_EMIT_PP_TXOFFSET_3:
case R200_EMIT_PP_TXOFFSET_4: case R200_EMIT_PP_TXOFFSET_4:
case R200_EMIT_PP_TXOFFSET_5: case R200_EMIT_PP_TXOFFSET_5:
if (radeon_check_and_fixup_offset(dev_priv, filp_priv, if (radeon_check_and_fixup_offset(dev_priv, file_priv,
&data[0])) { &data[0])) {
DRM_ERROR("Invalid R200 texture offset\n"); DRM_ERROR("Invalid R200 texture offset\n");
return -EINVAL; return -EINVAL;
...@@ -127,7 +127,7 @@ static __inline__ int radeon_check_and_fixup_packets(drm_radeon_private_t * ...@@ -127,7 +127,7 @@ static __inline__ int radeon_check_and_fixup_packets(drm_radeon_private_t *
case RADEON_EMIT_PP_TXFILTER_0: case RADEON_EMIT_PP_TXFILTER_0:
case RADEON_EMIT_PP_TXFILTER_1: case RADEON_EMIT_PP_TXFILTER_1:
case RADEON_EMIT_PP_TXFILTER_2: case RADEON_EMIT_PP_TXFILTER_2:
if (radeon_check_and_fixup_offset(dev_priv, filp_priv, if (radeon_check_and_fixup_offset(dev_priv, file_priv,
&data[(RADEON_PP_TXOFFSET_0 - RADEON_PP_TXFILTER_0) / 4])) { &data[(RADEON_PP_TXOFFSET_0 - RADEON_PP_TXFILTER_0) / 4])) {
DRM_ERROR("Invalid R100 texture offset\n"); DRM_ERROR("Invalid R100 texture offset\n");
return -EINVAL; return -EINVAL;
...@@ -143,7 +143,7 @@ static __inline__ int radeon_check_and_fixup_packets(drm_radeon_private_t * ...@@ -143,7 +143,7 @@ static __inline__ int radeon_check_and_fixup_packets(drm_radeon_private_t *
int i; int i;
for (i = 0; i < 5; i++) { for (i = 0; i < 5; i++) {
if (radeon_check_and_fixup_offset(dev_priv, if (radeon_check_and_fixup_offset(dev_priv,
filp_priv, file_priv,
&data[i])) { &data[i])) {
DRM_ERROR DRM_ERROR
("Invalid R200 cubic texture offset\n"); ("Invalid R200 cubic texture offset\n");
...@@ -159,7 +159,7 @@ static __inline__ int radeon_check_and_fixup_packets(drm_radeon_private_t * ...@@ -159,7 +159,7 @@ static __inline__ int radeon_check_and_fixup_packets(drm_radeon_private_t *
int i; int i;
for (i = 0; i < 5; i++) { for (i = 0; i < 5; i++) {
if (radeon_check_and_fixup_offset(dev_priv, if (radeon_check_and_fixup_offset(dev_priv,
filp_priv, file_priv,
&data[i])) { &data[i])) {
DRM_ERROR DRM_ERROR
("Invalid R100 cubic texture offset\n"); ("Invalid R100 cubic texture offset\n");
...@@ -264,7 +264,7 @@ static __inline__ int radeon_check_and_fixup_packets(drm_radeon_private_t * ...@@ -264,7 +264,7 @@ static __inline__ int radeon_check_and_fixup_packets(drm_radeon_private_t *
static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t * static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t *
dev_priv, dev_priv,
struct drm_file *filp_priv, struct drm_file *file_priv,
drm_radeon_kcmd_buffer_t * drm_radeon_kcmd_buffer_t *
cmdbuf, cmdbuf,
unsigned int *cmdsz) unsigned int *cmdsz)
...@@ -326,7 +326,8 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t * ...@@ -326,7 +326,8 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t *
i = 2; i = 2;
while ((k < narrays) && (i < (count + 2))) { while ((k < narrays) && (i < (count + 2))) {
i++; /* skip attribute field */ i++; /* skip attribute field */
if (radeon_check_and_fixup_offset(dev_priv, filp_priv, &cmd[i])) { if (radeon_check_and_fixup_offset(dev_priv, file_priv,
&cmd[i])) {
DRM_ERROR DRM_ERROR
("Invalid offset (k=%d i=%d) in 3D_LOAD_VBPNTR packet.\n", ("Invalid offset (k=%d i=%d) in 3D_LOAD_VBPNTR packet.\n",
k, i); k, i);
...@@ -337,7 +338,9 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t * ...@@ -337,7 +338,9 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t *
if (k == narrays) if (k == narrays)
break; break;
/* have one more to process, they come in pairs */ /* have one more to process, they come in pairs */
if (radeon_check_and_fixup_offset(dev_priv, filp_priv, &cmd[i])) { if (radeon_check_and_fixup_offset(dev_priv,
file_priv, &cmd[i]))
{
DRM_ERROR DRM_ERROR
("Invalid offset (k=%d i=%d) in 3D_LOAD_VBPNTR packet.\n", ("Invalid offset (k=%d i=%d) in 3D_LOAD_VBPNTR packet.\n",
k, i); k, i);
...@@ -360,7 +363,7 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t * ...@@ -360,7 +363,7 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t *
DRM_ERROR("Invalid 3d packet for r200-class chip\n"); DRM_ERROR("Invalid 3d packet for r200-class chip\n");
return -EINVAL; return -EINVAL;
} }
if (radeon_check_and_fixup_offset(dev_priv, filp_priv, &cmd[1])) { if (radeon_check_and_fixup_offset(dev_priv, file_priv, &cmd[1])) {
DRM_ERROR("Invalid rndr_gen_indx offset\n"); DRM_ERROR("Invalid rndr_gen_indx offset\n");
return -EINVAL; return -EINVAL;
} }
...@@ -375,7 +378,7 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t * ...@@ -375,7 +378,7 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t *
DRM_ERROR("Invalid indx_buffer reg address %08X\n", cmd[1]); DRM_ERROR("Invalid indx_buffer reg address %08X\n", cmd[1]);
return -EINVAL; return -EINVAL;
} }
if (radeon_check_and_fixup_offset(dev_priv, filp_priv, &cmd[2])) { if (radeon_check_and_fixup_offset(dev_priv, file_priv, &cmd[2])) {
DRM_ERROR("Invalid indx_buffer offset is %08X\n", cmd[2]); DRM_ERROR("Invalid indx_buffer offset is %08X\n", cmd[2]);
return -EINVAL; return -EINVAL;
} }
...@@ -389,7 +392,7 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t * ...@@ -389,7 +392,7 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t *
| RADEON_GMC_DST_PITCH_OFFSET_CNTL)) { | RADEON_GMC_DST_PITCH_OFFSET_CNTL)) {
offset = cmd[2] << 10; offset = cmd[2] << 10;
if (radeon_check_and_fixup_offset if (radeon_check_and_fixup_offset
(dev_priv, filp_priv, &offset)) { (dev_priv, file_priv, &offset)) {
DRM_ERROR("Invalid first packet offset\n"); DRM_ERROR("Invalid first packet offset\n");
return -EINVAL; return -EINVAL;
} }
...@@ -400,7 +403,7 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t * ...@@ -400,7 +403,7 @@ static __inline__ int radeon_check_and_fixup_packet3(drm_radeon_private_t *
(cmd[1] & RADEON_GMC_DST_PITCH_OFFSET_CNTL)) { (cmd[1] & RADEON_GMC_DST_PITCH_OFFSET_CNTL)) {
offset = cmd[3] << 10; offset = cmd[3] << 10;
if (radeon_check_and_fixup_offset if (radeon_check_and_fixup_offset
(dev_priv, filp_priv, &offset)) { (dev_priv, file_priv, &offset)) {
DRM_ERROR("Invalid second packet offset\n"); DRM_ERROR("Invalid second packet offset\n");
return -EINVAL; return -EINVAL;
} }
...@@ -439,7 +442,7 @@ static __inline__ void radeon_emit_clip_rect(drm_radeon_private_t * dev_priv, ...@@ -439,7 +442,7 @@ static __inline__ void radeon_emit_clip_rect(drm_radeon_private_t * dev_priv,
/* Emit 1.1 state /* Emit 1.1 state
*/ */
static int radeon_emit_state(drm_radeon_private_t * dev_priv, static int radeon_emit_state(drm_radeon_private_t * dev_priv,
struct drm_file * filp_priv, struct drm_file *file_priv,
drm_radeon_context_regs_t * ctx, drm_radeon_context_regs_t * ctx,
drm_radeon_texture_regs_t * tex, drm_radeon_texture_regs_t * tex,
unsigned int dirty) unsigned int dirty)
...@@ -448,13 +451,13 @@ static int radeon_emit_state(drm_radeon_private_t * dev_priv, ...@@ -448,13 +451,13 @@ static int radeon_emit_state(drm_radeon_private_t * dev_priv,
DRM_DEBUG("dirty=0x%08x\n", dirty); DRM_DEBUG("dirty=0x%08x\n", dirty);
if (dirty & RADEON_UPLOAD_CONTEXT) { if (dirty & RADEON_UPLOAD_CONTEXT) {
if (radeon_check_and_fixup_offset(dev_priv, filp_priv, if (radeon_check_and_fixup_offset(dev_priv, file_priv,
&ctx->rb3d_depthoffset)) { &ctx->rb3d_depthoffset)) {
DRM_ERROR("Invalid depth buffer offset\n"); DRM_ERROR("Invalid depth buffer offset\n");
return -EINVAL; return -EINVAL;
} }
if (radeon_check_and_fixup_offset(dev_priv, filp_priv, if (radeon_check_and_fixup_offset(dev_priv, file_priv,
&ctx->rb3d_coloroffset)) { &ctx->rb3d_coloroffset)) {
DRM_ERROR("Invalid depth buffer offset\n"); DRM_ERROR("Invalid depth buffer offset\n");
return -EINVAL; return -EINVAL;
...@@ -543,7 +546,7 @@ static int radeon_emit_state(drm_radeon_private_t * dev_priv, ...@@ -543,7 +546,7 @@ static int radeon_emit_state(drm_radeon_private_t * dev_priv,
} }
if (dirty & RADEON_UPLOAD_TEX0) { if (dirty & RADEON_UPLOAD_TEX0) {
if (radeon_check_and_fixup_offset(dev_priv, filp_priv, if (radeon_check_and_fixup_offset(dev_priv, file_priv,
&tex[0].pp_txoffset)) { &tex[0].pp_txoffset)) {
DRM_ERROR("Invalid texture offset for unit 0\n"); DRM_ERROR("Invalid texture offset for unit 0\n");
return -EINVAL; return -EINVAL;
...@@ -563,7 +566,7 @@ static int radeon_emit_state(drm_radeon_private_t * dev_priv, ...@@ -563,7 +566,7 @@ static int radeon_emit_state(drm_radeon_private_t * dev_priv,
} }
if (dirty & RADEON_UPLOAD_TEX1) { if (dirty & RADEON_UPLOAD_TEX1) {
if (radeon_check_and_fixup_offset(dev_priv, filp_priv, if (radeon_check_and_fixup_offset(dev_priv, file_priv,
&tex[1].pp_txoffset)) { &tex[1].pp_txoffset)) {
DRM_ERROR("Invalid texture offset for unit 1\n"); DRM_ERROR("Invalid texture offset for unit 1\n");
return -EINVAL; return -EINVAL;
...@@ -583,7 +586,7 @@ static int radeon_emit_state(drm_radeon_private_t * dev_priv, ...@@ -583,7 +586,7 @@ static int radeon_emit_state(drm_radeon_private_t * dev_priv,
} }
if (dirty & RADEON_UPLOAD_TEX2) { if (dirty & RADEON_UPLOAD_TEX2) {
if (radeon_check_and_fixup_offset(dev_priv, filp_priv, if (radeon_check_and_fixup_offset(dev_priv, file_priv,
&tex[2].pp_txoffset)) { &tex[2].pp_txoffset)) {
DRM_ERROR("Invalid texture offset for unit 2\n"); DRM_ERROR("Invalid texture offset for unit 2\n");
return -EINVAL; return -EINVAL;
...@@ -608,7 +611,7 @@ static int radeon_emit_state(drm_radeon_private_t * dev_priv, ...@@ -608,7 +611,7 @@ static int radeon_emit_state(drm_radeon_private_t * dev_priv,
/* Emit 1.2 state /* Emit 1.2 state
*/ */
static int radeon_emit_state2(drm_radeon_private_t * dev_priv, static int radeon_emit_state2(drm_radeon_private_t * dev_priv,
struct drm_file * filp_priv, struct drm_file *file_priv,
drm_radeon_state_t * state) drm_radeon_state_t * state)
{ {
RING_LOCALS; RING_LOCALS;
...@@ -621,7 +624,7 @@ static int radeon_emit_state2(drm_radeon_private_t * dev_priv, ...@@ -621,7 +624,7 @@ static int radeon_emit_state2(drm_radeon_private_t * dev_priv,
ADVANCE_RING(); ADVANCE_RING();
} }
return radeon_emit_state(dev_priv, filp_priv, &state->context, return radeon_emit_state(dev_priv, file_priv, &state->context,
state->tex, state->dirty); state->tex, state->dirty);
} }
...@@ -1646,13 +1649,12 @@ static void radeon_cp_dispatch_indices(struct drm_device * dev, ...@@ -1646,13 +1649,12 @@ static void radeon_cp_dispatch_indices(struct drm_device * dev,
#define RADEON_MAX_TEXTURE_SIZE RADEON_BUFFER_SIZE #define RADEON_MAX_TEXTURE_SIZE RADEON_BUFFER_SIZE
static int radeon_cp_dispatch_texture(DRMFILE filp, static int radeon_cp_dispatch_texture(struct drm_device * dev,
struct drm_device * dev, struct drm_file *file_priv,
drm_radeon_texture_t * tex, drm_radeon_texture_t * tex,
drm_radeon_tex_image_t * image) drm_radeon_tex_image_t * image)
{ {
drm_radeon_private_t *dev_priv = dev->dev_private; drm_radeon_private_t *dev_priv = dev->dev_private;
struct drm_file *filp_priv;
struct drm_buf *buf; struct drm_buf *buf;
u32 format; u32 format;
u32 *buffer; u32 *buffer;
...@@ -1664,9 +1666,7 @@ static int radeon_cp_dispatch_texture(DRMFILE filp, ...@@ -1664,9 +1666,7 @@ static int radeon_cp_dispatch_texture(DRMFILE filp,
u32 offset; u32 offset;
RING_LOCALS; RING_LOCALS;
DRM_GET_PRIV_WITH_RETURN(filp_priv, filp); if (radeon_check_and_fixup_offset(dev_priv, file_priv, &tex->offset)) {
if (radeon_check_and_fixup_offset(dev_priv, filp_priv, &tex->offset)) {
DRM_ERROR("Invalid destination offset\n"); DRM_ERROR("Invalid destination offset\n");
return -EINVAL; return -EINVAL;
} }
...@@ -1841,7 +1841,7 @@ static int radeon_cp_dispatch_texture(DRMFILE filp, ...@@ -1841,7 +1841,7 @@ static int radeon_cp_dispatch_texture(DRMFILE filp,
} }
#undef RADEON_COPY_MT #undef RADEON_COPY_MT
buf->filp = filp; buf->file_priv = file_priv;
buf->used = size; buf->used = size;
offset = dev_priv->gart_buffers_offset + buf->offset; offset = dev_priv->gart_buffers_offset + buf->offset;
BEGIN_RING(9); BEGIN_RING(9);
...@@ -1929,7 +1929,8 @@ static void radeon_apply_surface_regs(int surf_index, ...@@ -1929,7 +1929,8 @@ static void radeon_apply_surface_regs(int surf_index,
* not always be available. * not always be available.
*/ */
static int alloc_surface(drm_radeon_surface_alloc_t *new, static int alloc_surface(drm_radeon_surface_alloc_t *new,
drm_radeon_private_t *dev_priv, DRMFILE filp) drm_radeon_private_t *dev_priv,
struct drm_file *file_priv)
{ {
struct radeon_virt_surface *s; struct radeon_virt_surface *s;
int i; int i;
...@@ -1959,7 +1960,7 @@ static int alloc_surface(drm_radeon_surface_alloc_t *new, ...@@ -1959,7 +1960,7 @@ static int alloc_surface(drm_radeon_surface_alloc_t *new,
/* find a virtual surface */ /* find a virtual surface */
for (i = 0; i < 2 * RADEON_MAX_SURFACES; i++) for (i = 0; i < 2 * RADEON_MAX_SURFACES; i++)
if (dev_priv->virt_surfaces[i].filp == 0) if (dev_priv->virt_surfaces[i].file_priv == 0)
break; break;
if (i == 2 * RADEON_MAX_SURFACES) { if (i == 2 * RADEON_MAX_SURFACES) {
return -1; return -1;
...@@ -1977,7 +1978,7 @@ static int alloc_surface(drm_radeon_surface_alloc_t *new, ...@@ -1977,7 +1978,7 @@ static int alloc_surface(drm_radeon_surface_alloc_t *new,
s->lower = new_lower; s->lower = new_lower;
s->upper = new_upper; s->upper = new_upper;
s->flags = new->flags; s->flags = new->flags;
s->filp = filp; s->file_priv = file_priv;
dev_priv->surfaces[i].refcount++; dev_priv->surfaces[i].refcount++;
dev_priv->surfaces[i].lower = s->lower; dev_priv->surfaces[i].lower = s->lower;
radeon_apply_surface_regs(s->surface_index, dev_priv); radeon_apply_surface_regs(s->surface_index, dev_priv);
...@@ -1993,7 +1994,7 @@ static int alloc_surface(drm_radeon_surface_alloc_t *new, ...@@ -1993,7 +1994,7 @@ static int alloc_surface(drm_radeon_surface_alloc_t *new,
s->lower = new_lower; s->lower = new_lower;
s->upper = new_upper; s->upper = new_upper;
s->flags = new->flags; s->flags = new->flags;
s->filp = filp; s->file_priv = file_priv;
dev_priv->surfaces[i].refcount++; dev_priv->surfaces[i].refcount++;
dev_priv->surfaces[i].upper = s->upper; dev_priv->surfaces[i].upper = s->upper;
radeon_apply_surface_regs(s->surface_index, dev_priv); radeon_apply_surface_regs(s->surface_index, dev_priv);
...@@ -2009,7 +2010,7 @@ static int alloc_surface(drm_radeon_surface_alloc_t *new, ...@@ -2009,7 +2010,7 @@ static int alloc_surface(drm_radeon_surface_alloc_t *new,
s->lower = new_lower; s->lower = new_lower;
s->upper = new_upper; s->upper = new_upper;
s->flags = new->flags; s->flags = new->flags;
s->filp = filp; s->file_priv = file_priv;
dev_priv->surfaces[i].refcount = 1; dev_priv->surfaces[i].refcount = 1;
dev_priv->surfaces[i].lower = s->lower; dev_priv->surfaces[i].lower = s->lower;
dev_priv->surfaces[i].upper = s->upper; dev_priv->surfaces[i].upper = s->upper;
...@@ -2023,7 +2024,8 @@ static int alloc_surface(drm_radeon_surface_alloc_t *new, ...@@ -2023,7 +2024,8 @@ static int alloc_surface(drm_radeon_surface_alloc_t *new,
return -1; return -1;
} }
static int free_surface(DRMFILE filp, drm_radeon_private_t * dev_priv, static int free_surface(struct drm_file *file_priv,
drm_radeon_private_t * dev_priv,
int lower) int lower)
{ {
struct radeon_virt_surface *s; struct radeon_virt_surface *s;
...@@ -2031,8 +2033,9 @@ static int free_surface(DRMFILE filp, drm_radeon_private_t * dev_priv, ...@@ -2031,8 +2033,9 @@ static int free_surface(DRMFILE filp, drm_radeon_private_t * dev_priv,
/* find the virtual surface */ /* find the virtual surface */
for (i = 0; i < 2 * RADEON_MAX_SURFACES; i++) { for (i = 0; i < 2 * RADEON_MAX_SURFACES; i++) {
s = &(dev_priv->virt_surfaces[i]); s = &(dev_priv->virt_surfaces[i]);
if (s->filp) { if (s->file_priv) {
if ((lower == s->lower) && (filp == s->filp)) { if ((lower == s->lower) && (file_priv == s->file_priv))
{
if (dev_priv->surfaces[s->surface_index]. if (dev_priv->surfaces[s->surface_index].
lower == s->lower) lower == s->lower)
dev_priv->surfaces[s->surface_index]. dev_priv->surfaces[s->surface_index].
...@@ -2048,7 +2051,7 @@ static int free_surface(DRMFILE filp, drm_radeon_private_t * dev_priv, ...@@ -2048,7 +2051,7 @@ static int free_surface(DRMFILE filp, drm_radeon_private_t * dev_priv,
refcount == 0) refcount == 0)
dev_priv->surfaces[s->surface_index]. dev_priv->surfaces[s->surface_index].
flags = 0; flags = 0;
s->filp = NULL; s->file_priv = NULL;
radeon_apply_surface_regs(s->surface_index, radeon_apply_surface_regs(s->surface_index,
dev_priv); dev_priv);
return 0; return 0;
...@@ -2058,13 +2061,13 @@ static int free_surface(DRMFILE filp, drm_radeon_private_t * dev_priv, ...@@ -2058,13 +2061,13 @@ static int free_surface(DRMFILE filp, drm_radeon_private_t * dev_priv,
return 1; return 1;
} }
static void radeon_surfaces_release(DRMFILE filp, static void radeon_surfaces_release(struct drm_file *file_priv,
drm_radeon_private_t * dev_priv) drm_radeon_private_t * dev_priv)
{ {
int i; int i;
for (i = 0; i < 2 * RADEON_MAX_SURFACES; i++) { for (i = 0; i < 2 * RADEON_MAX_SURFACES; i++) {
if (dev_priv->virt_surfaces[i].filp == filp) if (dev_priv->virt_surfaces[i].file_priv == file_priv)
free_surface(filp, dev_priv, free_surface(file_priv, dev_priv,
dev_priv->virt_surfaces[i].lower); dev_priv->virt_surfaces[i].lower);
} }
} }
...@@ -2082,7 +2085,7 @@ static int radeon_surface_alloc(DRM_IOCTL_ARGS) ...@@ -2082,7 +2085,7 @@ static int radeon_surface_alloc(DRM_IOCTL_ARGS)
(drm_radeon_surface_alloc_t __user *) data, (drm_radeon_surface_alloc_t __user *) data,
sizeof(alloc)); sizeof(alloc));
if (alloc_surface(&alloc, dev_priv, filp) == -1) if (alloc_surface(&alloc, dev_priv, file_priv) == -1)
return -EINVAL; return -EINVAL;
else else
return 0; return 0;
...@@ -2097,7 +2100,7 @@ static int radeon_surface_free(DRM_IOCTL_ARGS) ...@@ -2097,7 +2100,7 @@ static int radeon_surface_free(DRM_IOCTL_ARGS)
DRM_COPY_FROM_USER_IOCTL(memfree, (drm_radeon_surface_free_t __user *) data, DRM_COPY_FROM_USER_IOCTL(memfree, (drm_radeon_surface_free_t __user *) data,
sizeof(memfree)); sizeof(memfree));
if (free_surface(filp, dev_priv, memfree.address)) if (free_surface(file_priv, dev_priv, memfree.address))
return -EINVAL; return -EINVAL;
else else
return 0; return 0;
...@@ -2112,7 +2115,7 @@ static int radeon_cp_clear(DRM_IOCTL_ARGS) ...@@ -2112,7 +2115,7 @@ static int radeon_cp_clear(DRM_IOCTL_ARGS)
drm_radeon_clear_rect_t depth_boxes[RADEON_NR_SAREA_CLIPRECTS]; drm_radeon_clear_rect_t depth_boxes[RADEON_NR_SAREA_CLIPRECTS];
DRM_DEBUG("\n"); DRM_DEBUG("\n");
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_COPY_FROM_USER_IOCTL(clear, (drm_radeon_clear_t __user *) data, DRM_COPY_FROM_USER_IOCTL(clear, (drm_radeon_clear_t __user *) data,
sizeof(clear)); sizeof(clear));
...@@ -2168,7 +2171,7 @@ static int radeon_cp_flip(DRM_IOCTL_ARGS) ...@@ -2168,7 +2171,7 @@ static int radeon_cp_flip(DRM_IOCTL_ARGS)
drm_radeon_private_t *dev_priv = dev->dev_private; drm_radeon_private_t *dev_priv = dev->dev_private;
DRM_DEBUG("\n"); DRM_DEBUG("\n");
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
RING_SPACE_TEST_WITH_RETURN(dev_priv); RING_SPACE_TEST_WITH_RETURN(dev_priv);
...@@ -2188,7 +2191,7 @@ static int radeon_cp_swap(DRM_IOCTL_ARGS) ...@@ -2188,7 +2191,7 @@ static int radeon_cp_swap(DRM_IOCTL_ARGS)
drm_radeon_sarea_t *sarea_priv = dev_priv->sarea_priv; drm_radeon_sarea_t *sarea_priv = dev_priv->sarea_priv;
DRM_DEBUG("\n"); DRM_DEBUG("\n");
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
RING_SPACE_TEST_WITH_RETURN(dev_priv); RING_SPACE_TEST_WITH_RETURN(dev_priv);
...@@ -2206,16 +2209,13 @@ static int radeon_cp_vertex(DRM_IOCTL_ARGS) ...@@ -2206,16 +2209,13 @@ static int radeon_cp_vertex(DRM_IOCTL_ARGS)
{ {
DRM_DEVICE; DRM_DEVICE;
drm_radeon_private_t *dev_priv = dev->dev_private; drm_radeon_private_t *dev_priv = dev->dev_private;
struct drm_file *filp_priv;
drm_radeon_sarea_t *sarea_priv = dev_priv->sarea_priv; drm_radeon_sarea_t *sarea_priv = dev_priv->sarea_priv;
struct drm_device_dma *dma = dev->dma; struct drm_device_dma *dma = dev->dma;
struct drm_buf *buf; struct drm_buf *buf;
drm_radeon_vertex_t vertex; drm_radeon_vertex_t vertex;
drm_radeon_tcl_prim_t prim; drm_radeon_tcl_prim_t prim;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_GET_PRIV_WITH_RETURN(filp_priv, filp);
DRM_COPY_FROM_USER_IOCTL(vertex, (drm_radeon_vertex_t __user *) data, DRM_COPY_FROM_USER_IOCTL(vertex, (drm_radeon_vertex_t __user *) data,
sizeof(vertex)); sizeof(vertex));
...@@ -2238,9 +2238,9 @@ static int radeon_cp_vertex(DRM_IOCTL_ARGS) ...@@ -2238,9 +2238,9 @@ static int radeon_cp_vertex(DRM_IOCTL_ARGS)
buf = dma->buflist[vertex.idx]; buf = dma->buflist[vertex.idx];
if (buf->filp != filp) { if (buf->file_priv != file_priv) {
DRM_ERROR("process %d using buffer owned by %p\n", DRM_ERROR("process %d using buffer owned by %p\n",
DRM_CURRENTPID, buf->filp); DRM_CURRENTPID, buf->file_priv);
return -EINVAL; return -EINVAL;
} }
if (buf->pending) { if (buf->pending) {
...@@ -2254,7 +2254,7 @@ static int radeon_cp_vertex(DRM_IOCTL_ARGS) ...@@ -2254,7 +2254,7 @@ static int radeon_cp_vertex(DRM_IOCTL_ARGS)
buf->used = vertex.count; /* not used? */ buf->used = vertex.count; /* not used? */
if (sarea_priv->dirty & ~RADEON_UPLOAD_CLIPRECTS) { if (sarea_priv->dirty & ~RADEON_UPLOAD_CLIPRECTS) {
if (radeon_emit_state(dev_priv, filp_priv, if (radeon_emit_state(dev_priv, file_priv,
&sarea_priv->context_state, &sarea_priv->context_state,
sarea_priv->tex_state, sarea_priv->tex_state,
sarea_priv->dirty)) { sarea_priv->dirty)) {
...@@ -2289,7 +2289,6 @@ static int radeon_cp_indices(DRM_IOCTL_ARGS) ...@@ -2289,7 +2289,6 @@ static int radeon_cp_indices(DRM_IOCTL_ARGS)
{ {
DRM_DEVICE; DRM_DEVICE;
drm_radeon_private_t *dev_priv = dev->dev_private; drm_radeon_private_t *dev_priv = dev->dev_private;
struct drm_file *filp_priv;
drm_radeon_sarea_t *sarea_priv = dev_priv->sarea_priv; drm_radeon_sarea_t *sarea_priv = dev_priv->sarea_priv;
struct drm_device_dma *dma = dev->dma; struct drm_device_dma *dma = dev->dma;
struct drm_buf *buf; struct drm_buf *buf;
...@@ -2297,9 +2296,7 @@ static int radeon_cp_indices(DRM_IOCTL_ARGS) ...@@ -2297,9 +2296,7 @@ static int radeon_cp_indices(DRM_IOCTL_ARGS)
drm_radeon_tcl_prim_t prim; drm_radeon_tcl_prim_t prim;
int count; int count;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_GET_PRIV_WITH_RETURN(filp_priv, filp);
DRM_COPY_FROM_USER_IOCTL(elts, (drm_radeon_indices_t __user *) data, DRM_COPY_FROM_USER_IOCTL(elts, (drm_radeon_indices_t __user *) data,
sizeof(elts)); sizeof(elts));
...@@ -2322,9 +2319,9 @@ static int radeon_cp_indices(DRM_IOCTL_ARGS) ...@@ -2322,9 +2319,9 @@ static int radeon_cp_indices(DRM_IOCTL_ARGS)
buf = dma->buflist[elts.idx]; buf = dma->buflist[elts.idx];
if (buf->filp != filp) { if (buf->file_priv != file_priv) {
DRM_ERROR("process %d using buffer owned by %p\n", DRM_ERROR("process %d using buffer owned by %p\n",
DRM_CURRENTPID, buf->filp); DRM_CURRENTPID, buf->file_priv);
return -EINVAL; return -EINVAL;
} }
if (buf->pending) { if (buf->pending) {
...@@ -2347,7 +2344,7 @@ static int radeon_cp_indices(DRM_IOCTL_ARGS) ...@@ -2347,7 +2344,7 @@ static int radeon_cp_indices(DRM_IOCTL_ARGS)
buf->used = elts.end; buf->used = elts.end;
if (sarea_priv->dirty & ~RADEON_UPLOAD_CLIPRECTS) { if (sarea_priv->dirty & ~RADEON_UPLOAD_CLIPRECTS) {
if (radeon_emit_state(dev_priv, filp_priv, if (radeon_emit_state(dev_priv, file_priv,
&sarea_priv->context_state, &sarea_priv->context_state,
sarea_priv->tex_state, sarea_priv->tex_state,
sarea_priv->dirty)) { sarea_priv->dirty)) {
...@@ -2387,7 +2384,7 @@ static int radeon_cp_texture(DRM_IOCTL_ARGS) ...@@ -2387,7 +2384,7 @@ static int radeon_cp_texture(DRM_IOCTL_ARGS)
drm_radeon_tex_image_t image; drm_radeon_tex_image_t image;
int ret; int ret;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_COPY_FROM_USER_IOCTL(tex, (drm_radeon_texture_t __user *) data, DRM_COPY_FROM_USER_IOCTL(tex, (drm_radeon_texture_t __user *) data,
sizeof(tex)); sizeof(tex));
...@@ -2405,7 +2402,7 @@ static int radeon_cp_texture(DRM_IOCTL_ARGS) ...@@ -2405,7 +2402,7 @@ static int radeon_cp_texture(DRM_IOCTL_ARGS)
RING_SPACE_TEST_WITH_RETURN(dev_priv); RING_SPACE_TEST_WITH_RETURN(dev_priv);
VB_AGE_TEST_WITH_RETURN(dev_priv); VB_AGE_TEST_WITH_RETURN(dev_priv);
ret = radeon_cp_dispatch_texture(filp, dev, &tex, &image); ret = radeon_cp_dispatch_texture(dev, file_priv, &tex, &image);
COMMIT_RING(); COMMIT_RING();
return ret; return ret;
...@@ -2418,7 +2415,7 @@ static int radeon_cp_stipple(DRM_IOCTL_ARGS) ...@@ -2418,7 +2415,7 @@ static int radeon_cp_stipple(DRM_IOCTL_ARGS)
drm_radeon_stipple_t stipple; drm_radeon_stipple_t stipple;
u32 mask[32]; u32 mask[32];
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_COPY_FROM_USER_IOCTL(stipple, (drm_radeon_stipple_t __user *) data, DRM_COPY_FROM_USER_IOCTL(stipple, (drm_radeon_stipple_t __user *) data,
sizeof(stipple)); sizeof(stipple));
...@@ -2443,7 +2440,7 @@ static int radeon_cp_indirect(DRM_IOCTL_ARGS) ...@@ -2443,7 +2440,7 @@ static int radeon_cp_indirect(DRM_IOCTL_ARGS)
drm_radeon_indirect_t indirect; drm_radeon_indirect_t indirect;
RING_LOCALS; RING_LOCALS;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_COPY_FROM_USER_IOCTL(indirect, DRM_COPY_FROM_USER_IOCTL(indirect,
(drm_radeon_indirect_t __user *) data, (drm_radeon_indirect_t __user *) data,
...@@ -2460,9 +2457,9 @@ static int radeon_cp_indirect(DRM_IOCTL_ARGS) ...@@ -2460,9 +2457,9 @@ static int radeon_cp_indirect(DRM_IOCTL_ARGS)
buf = dma->buflist[indirect.idx]; buf = dma->buflist[indirect.idx];
if (buf->filp != filp) { if (buf->file_priv != file_priv) {
DRM_ERROR("process %d using buffer owned by %p\n", DRM_ERROR("process %d using buffer owned by %p\n",
DRM_CURRENTPID, buf->filp); DRM_CURRENTPID, buf->file_priv);
return -EINVAL; return -EINVAL;
} }
if (buf->pending) { if (buf->pending) {
...@@ -2507,7 +2504,6 @@ static int radeon_cp_vertex2(DRM_IOCTL_ARGS) ...@@ -2507,7 +2504,6 @@ static int radeon_cp_vertex2(DRM_IOCTL_ARGS)
{ {
DRM_DEVICE; DRM_DEVICE;
drm_radeon_private_t *dev_priv = dev->dev_private; drm_radeon_private_t *dev_priv = dev->dev_private;
struct drm_file *filp_priv;
drm_radeon_sarea_t *sarea_priv = dev_priv->sarea_priv; drm_radeon_sarea_t *sarea_priv = dev_priv->sarea_priv;
struct drm_device_dma *dma = dev->dma; struct drm_device_dma *dma = dev->dma;
struct drm_buf *buf; struct drm_buf *buf;
...@@ -2515,9 +2511,7 @@ static int radeon_cp_vertex2(DRM_IOCTL_ARGS) ...@@ -2515,9 +2511,7 @@ static int radeon_cp_vertex2(DRM_IOCTL_ARGS)
int i; int i;
unsigned char laststate; unsigned char laststate;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_GET_PRIV_WITH_RETURN(filp_priv, filp);
DRM_COPY_FROM_USER_IOCTL(vertex, (drm_radeon_vertex2_t __user *) data, DRM_COPY_FROM_USER_IOCTL(vertex, (drm_radeon_vertex2_t __user *) data,
sizeof(vertex)); sizeof(vertex));
...@@ -2536,9 +2530,9 @@ static int radeon_cp_vertex2(DRM_IOCTL_ARGS) ...@@ -2536,9 +2530,9 @@ static int radeon_cp_vertex2(DRM_IOCTL_ARGS)
buf = dma->buflist[vertex.idx]; buf = dma->buflist[vertex.idx];
if (buf->filp != filp) { if (buf->file_priv != file_priv) {
DRM_ERROR("process %d using buffer owned by %p\n", DRM_ERROR("process %d using buffer owned by %p\n",
DRM_CURRENTPID, buf->filp); DRM_CURRENTPID, buf->file_priv);
return -EINVAL; return -EINVAL;
} }
...@@ -2565,7 +2559,7 @@ static int radeon_cp_vertex2(DRM_IOCTL_ARGS) ...@@ -2565,7 +2559,7 @@ static int radeon_cp_vertex2(DRM_IOCTL_ARGS)
sizeof(state))) sizeof(state)))
return -EFAULT; return -EFAULT;
if (radeon_emit_state2(dev_priv, filp_priv, &state)) { if (radeon_emit_state2(dev_priv, file_priv, &state)) {
DRM_ERROR("radeon_emit_state2 failed\n"); DRM_ERROR("radeon_emit_state2 failed\n");
return -EINVAL; return -EINVAL;
} }
...@@ -2603,7 +2597,7 @@ static int radeon_cp_vertex2(DRM_IOCTL_ARGS) ...@@ -2603,7 +2597,7 @@ static int radeon_cp_vertex2(DRM_IOCTL_ARGS)
} }
static int radeon_emit_packets(drm_radeon_private_t * dev_priv, static int radeon_emit_packets(drm_radeon_private_t * dev_priv,
struct drm_file * filp_priv, struct drm_file *file_priv,
drm_radeon_cmd_header_t header, drm_radeon_cmd_header_t header,
drm_radeon_kcmd_buffer_t *cmdbuf) drm_radeon_kcmd_buffer_t *cmdbuf)
{ {
...@@ -2623,7 +2617,7 @@ static int radeon_emit_packets(drm_radeon_private_t * dev_priv, ...@@ -2623,7 +2617,7 @@ static int radeon_emit_packets(drm_radeon_private_t * dev_priv,
return -EINVAL; return -EINVAL;
} }
if (radeon_check_and_fixup_packets(dev_priv, filp_priv, id, data)) { if (radeon_check_and_fixup_packets(dev_priv, file_priv, id, data)) {
DRM_ERROR("Packet verification failed\n"); DRM_ERROR("Packet verification failed\n");
return -EINVAL; return -EINVAL;
} }
...@@ -2729,7 +2723,7 @@ static __inline__ int radeon_emit_veclinear(drm_radeon_private_t *dev_priv, ...@@ -2729,7 +2723,7 @@ static __inline__ int radeon_emit_veclinear(drm_radeon_private_t *dev_priv,
} }
static int radeon_emit_packet3(struct drm_device * dev, static int radeon_emit_packet3(struct drm_device * dev,
struct drm_file * filp_priv, struct drm_file *file_priv,
drm_radeon_kcmd_buffer_t *cmdbuf) drm_radeon_kcmd_buffer_t *cmdbuf)
{ {
drm_radeon_private_t *dev_priv = dev->dev_private; drm_radeon_private_t *dev_priv = dev->dev_private;
...@@ -2739,7 +2733,7 @@ static int radeon_emit_packet3(struct drm_device * dev, ...@@ -2739,7 +2733,7 @@ static int radeon_emit_packet3(struct drm_device * dev,
DRM_DEBUG("\n"); DRM_DEBUG("\n");
if ((ret = radeon_check_and_fixup_packet3(dev_priv, filp_priv, if ((ret = radeon_check_and_fixup_packet3(dev_priv, file_priv,
cmdbuf, &cmdsz))) { cmdbuf, &cmdsz))) {
DRM_ERROR("Packet verification failed\n"); DRM_ERROR("Packet verification failed\n");
return ret; return ret;
...@@ -2755,7 +2749,7 @@ static int radeon_emit_packet3(struct drm_device * dev, ...@@ -2755,7 +2749,7 @@ static int radeon_emit_packet3(struct drm_device * dev,
} }
static int radeon_emit_packet3_cliprect(struct drm_device *dev, static int radeon_emit_packet3_cliprect(struct drm_device *dev,
struct drm_file *filp_priv, struct drm_file *file_priv,
drm_radeon_kcmd_buffer_t *cmdbuf, drm_radeon_kcmd_buffer_t *cmdbuf,
int orig_nbox) int orig_nbox)
{ {
...@@ -2769,7 +2763,7 @@ static int radeon_emit_packet3_cliprect(struct drm_device *dev, ...@@ -2769,7 +2763,7 @@ static int radeon_emit_packet3_cliprect(struct drm_device *dev,
DRM_DEBUG("\n"); DRM_DEBUG("\n");
if ((ret = radeon_check_and_fixup_packet3(dev_priv, filp_priv, if ((ret = radeon_check_and_fixup_packet3(dev_priv, file_priv,
cmdbuf, &cmdsz))) { cmdbuf, &cmdsz))) {
DRM_ERROR("Packet verification failed\n"); DRM_ERROR("Packet verification failed\n");
return ret; return ret;
...@@ -2849,7 +2843,6 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS) ...@@ -2849,7 +2843,6 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS)
{ {
DRM_DEVICE; DRM_DEVICE;
drm_radeon_private_t *dev_priv = dev->dev_private; drm_radeon_private_t *dev_priv = dev->dev_private;
struct drm_file *filp_priv;
struct drm_device_dma *dma = dev->dma; struct drm_device_dma *dma = dev->dma;
struct drm_buf *buf = NULL; struct drm_buf *buf = NULL;
int idx; int idx;
...@@ -2858,9 +2851,7 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS) ...@@ -2858,9 +2851,7 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS)
int orig_nbox, orig_bufsz; int orig_nbox, orig_bufsz;
char *kbuf = NULL; char *kbuf = NULL;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_GET_PRIV_WITH_RETURN(filp_priv, filp);
DRM_COPY_FROM_USER_IOCTL(cmdbuf, DRM_COPY_FROM_USER_IOCTL(cmdbuf,
(drm_radeon_cmd_buffer_t __user *) data, (drm_radeon_cmd_buffer_t __user *) data,
...@@ -2894,7 +2885,7 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS) ...@@ -2894,7 +2885,7 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS)
if (dev_priv->microcode_version == UCODE_R300) { if (dev_priv->microcode_version == UCODE_R300) {
int temp; int temp;
temp = r300_do_cp_cmdbuf(dev, filp, filp_priv, &cmdbuf); temp = r300_do_cp_cmdbuf(dev, file_priv, &cmdbuf);
if (orig_bufsz != 0) if (orig_bufsz != 0)
drm_free(kbuf, orig_bufsz, DRM_MEM_DRIVER); drm_free(kbuf, orig_bufsz, DRM_MEM_DRIVER);
...@@ -2913,7 +2904,7 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS) ...@@ -2913,7 +2904,7 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS)
case RADEON_CMD_PACKET: case RADEON_CMD_PACKET:
DRM_DEBUG("RADEON_CMD_PACKET\n"); DRM_DEBUG("RADEON_CMD_PACKET\n");
if (radeon_emit_packets if (radeon_emit_packets
(dev_priv, filp_priv, header, &cmdbuf)) { (dev_priv, file_priv, header, &cmdbuf)) {
DRM_ERROR("radeon_emit_packets failed\n"); DRM_ERROR("radeon_emit_packets failed\n");
goto err; goto err;
} }
...@@ -2945,9 +2936,10 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS) ...@@ -2945,9 +2936,10 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS)
} }
buf = dma->buflist[idx]; buf = dma->buflist[idx];
if (buf->filp != filp || buf->pending) { if (buf->file_priv != file_priv || buf->pending) {
DRM_ERROR("bad buffer %p %p %d\n", DRM_ERROR("bad buffer %p %p %d\n",
buf->filp, filp, buf->pending); buf->file_priv, file_priv,
buf->pending);
goto err; goto err;
} }
...@@ -2956,7 +2948,7 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS) ...@@ -2956,7 +2948,7 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS)
case RADEON_CMD_PACKET3: case RADEON_CMD_PACKET3:
DRM_DEBUG("RADEON_CMD_PACKET3\n"); DRM_DEBUG("RADEON_CMD_PACKET3\n");
if (radeon_emit_packet3(dev, filp_priv, &cmdbuf)) { if (radeon_emit_packet3(dev, file_priv, &cmdbuf)) {
DRM_ERROR("radeon_emit_packet3 failed\n"); DRM_ERROR("radeon_emit_packet3 failed\n");
goto err; goto err;
} }
...@@ -2965,7 +2957,7 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS) ...@@ -2965,7 +2957,7 @@ static int radeon_cp_cmdbuf(DRM_IOCTL_ARGS)
case RADEON_CMD_PACKET3_CLIP: case RADEON_CMD_PACKET3_CLIP:
DRM_DEBUG("RADEON_CMD_PACKET3_CLIP\n"); DRM_DEBUG("RADEON_CMD_PACKET3_CLIP\n");
if (radeon_emit_packet3_cliprect if (radeon_emit_packet3_cliprect
(dev, filp_priv, &cmdbuf, orig_nbox)) { (dev, file_priv, &cmdbuf, orig_nbox)) {
DRM_ERROR("radeon_emit_packet3_clip failed\n"); DRM_ERROR("radeon_emit_packet3_clip failed\n");
goto err; goto err;
} }
...@@ -3105,18 +3097,15 @@ static int radeon_cp_setparam(DRM_IOCTL_ARGS) ...@@ -3105,18 +3097,15 @@ static int radeon_cp_setparam(DRM_IOCTL_ARGS)
{ {
DRM_DEVICE; DRM_DEVICE;
drm_radeon_private_t *dev_priv = dev->dev_private; drm_radeon_private_t *dev_priv = dev->dev_private;
struct drm_file *filp_priv;
drm_radeon_setparam_t sp; drm_radeon_setparam_t sp;
struct drm_radeon_driver_file_fields *radeon_priv; struct drm_radeon_driver_file_fields *radeon_priv;
DRM_GET_PRIV_WITH_RETURN(filp_priv, filp);
DRM_COPY_FROM_USER_IOCTL(sp, (drm_radeon_setparam_t __user *) data, DRM_COPY_FROM_USER_IOCTL(sp, (drm_radeon_setparam_t __user *) data,
sizeof(sp)); sizeof(sp));
switch (sp.param) { switch (sp.param) {
case RADEON_SETPARAM_FB_LOCATION: case RADEON_SETPARAM_FB_LOCATION:
radeon_priv = filp_priv->driver_priv; radeon_priv = file_priv->driver_priv;
radeon_priv->radeon_fb_delta = dev_priv->fb_location - sp.value; radeon_priv->radeon_fb_delta = dev_priv->fb_location - sp.value;
break; break;
case RADEON_SETPARAM_SWITCH_TILING: case RADEON_SETPARAM_SWITCH_TILING:
...@@ -3162,14 +3151,14 @@ static int radeon_cp_setparam(DRM_IOCTL_ARGS) ...@@ -3162,14 +3151,14 @@ static int radeon_cp_setparam(DRM_IOCTL_ARGS)
* *
* DRM infrastructure takes care of reclaiming dma buffers. * DRM infrastructure takes care of reclaiming dma buffers.
*/ */
void radeon_driver_preclose(struct drm_device *dev, DRMFILE filp) void radeon_driver_preclose(struct drm_device *dev, struct drm_file *file_priv)
{ {
if (dev->dev_private) { if (dev->dev_private) {
drm_radeon_private_t *dev_priv = dev->dev_private; drm_radeon_private_t *dev_priv = dev->dev_private;
dev_priv->page_flipping = 0; dev_priv->page_flipping = 0;
radeon_mem_release(filp, dev_priv->gart_heap); radeon_mem_release(file_priv, dev_priv->gart_heap);
radeon_mem_release(filp, dev_priv->fb_heap); radeon_mem_release(file_priv, dev_priv->fb_heap);
radeon_surfaces_release(filp, dev_priv); radeon_surfaces_release(file_priv, dev_priv);
} }
} }
...@@ -3186,7 +3175,7 @@ void radeon_driver_lastclose(struct drm_device *dev) ...@@ -3186,7 +3175,7 @@ void radeon_driver_lastclose(struct drm_device *dev)
radeon_do_release(dev); radeon_do_release(dev);
} }
int radeon_driver_open(struct drm_device *dev, struct drm_file *filp_priv) int radeon_driver_open(struct drm_device *dev, struct drm_file *file_priv)
{ {
drm_radeon_private_t *dev_priv = dev->dev_private; drm_radeon_private_t *dev_priv = dev->dev_private;
struct drm_radeon_driver_file_fields *radeon_priv; struct drm_radeon_driver_file_fields *radeon_priv;
...@@ -3199,7 +3188,7 @@ int radeon_driver_open(struct drm_device *dev, struct drm_file *filp_priv) ...@@ -3199,7 +3188,7 @@ int radeon_driver_open(struct drm_device *dev, struct drm_file *filp_priv)
if (!radeon_priv) if (!radeon_priv)
return -ENOMEM; return -ENOMEM;
filp_priv->driver_priv = radeon_priv; file_priv->driver_priv = radeon_priv;
if (dev_priv) if (dev_priv)
radeon_priv->radeon_fb_delta = dev_priv->fb_location; radeon_priv->radeon_fb_delta = dev_priv->fb_location;
...@@ -3208,10 +3197,10 @@ int radeon_driver_open(struct drm_device *dev, struct drm_file *filp_priv) ...@@ -3208,10 +3197,10 @@ int radeon_driver_open(struct drm_device *dev, struct drm_file *filp_priv)
return 0; return 0;
} }
void radeon_driver_postclose(struct drm_device *dev, struct drm_file *filp_priv) void radeon_driver_postclose(struct drm_device *dev, struct drm_file *file_priv)
{ {
struct drm_radeon_driver_file_fields *radeon_priv = struct drm_radeon_driver_file_fields *radeon_priv =
filp_priv->driver_priv; file_priv->driver_priv;
drm_free(radeon_priv, sizeof(*radeon_priv), DRM_MEM_FILES); drm_free(radeon_priv, sizeof(*radeon_priv), DRM_MEM_FILES);
} }
......
...@@ -933,7 +933,7 @@ static int savage_bci_init(DRM_IOCTL_ARGS) ...@@ -933,7 +933,7 @@ static int savage_bci_init(DRM_IOCTL_ARGS)
DRM_DEVICE; DRM_DEVICE;
drm_savage_init_t init; drm_savage_init_t init;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_COPY_FROM_USER_IOCTL(init, (drm_savage_init_t __user *) data, DRM_COPY_FROM_USER_IOCTL(init, (drm_savage_init_t __user *) data,
sizeof(init)); sizeof(init));
...@@ -956,7 +956,7 @@ static int savage_bci_event_emit(DRM_IOCTL_ARGS) ...@@ -956,7 +956,7 @@ static int savage_bci_event_emit(DRM_IOCTL_ARGS)
DRM_DEBUG("\n"); DRM_DEBUG("\n");
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_COPY_FROM_USER_IOCTL(event, (drm_savage_event_emit_t __user *) data, DRM_COPY_FROM_USER_IOCTL(event, (drm_savage_event_emit_t __user *) data,
sizeof(event)); sizeof(event));
...@@ -1007,7 +1007,9 @@ static int savage_bci_event_wait(DRM_IOCTL_ARGS) ...@@ -1007,7 +1007,9 @@ static int savage_bci_event_wait(DRM_IOCTL_ARGS)
* DMA buffer management * DMA buffer management
*/ */
static int savage_bci_get_buffers(DRMFILE filp, struct drm_device *dev, struct drm_dma *d) static int savage_bci_get_buffers(struct drm_device *dev,
struct drm_file *file_priv,
struct drm_dma *d)
{ {
struct drm_buf *buf; struct drm_buf *buf;
int i; int i;
...@@ -1017,7 +1019,7 @@ static int savage_bci_get_buffers(DRMFILE filp, struct drm_device *dev, struct d ...@@ -1017,7 +1019,7 @@ static int savage_bci_get_buffers(DRMFILE filp, struct drm_device *dev, struct d
if (!buf) if (!buf)
return -EAGAIN; return -EAGAIN;
buf->filp = filp; buf->file_priv = file_priv;
if (DRM_COPY_TO_USER(&d->request_indices[i], if (DRM_COPY_TO_USER(&d->request_indices[i],
&buf->idx, sizeof(buf->idx))) &buf->idx, sizeof(buf->idx)))
...@@ -1038,7 +1040,7 @@ int savage_bci_buffers(DRM_IOCTL_ARGS) ...@@ -1038,7 +1040,7 @@ int savage_bci_buffers(DRM_IOCTL_ARGS)
struct drm_dma d; struct drm_dma d;
int ret = 0; int ret = 0;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_COPY_FROM_USER_IOCTL(d, (struct drm_dma __user *) data, sizeof(d)); DRM_COPY_FROM_USER_IOCTL(d, (struct drm_dma __user *) data, sizeof(d));
...@@ -1061,7 +1063,7 @@ int savage_bci_buffers(DRM_IOCTL_ARGS) ...@@ -1061,7 +1063,7 @@ int savage_bci_buffers(DRM_IOCTL_ARGS)
d.granted_count = 0; d.granted_count = 0;
if (d.request_count) { if (d.request_count) {
ret = savage_bci_get_buffers(filp, dev, &d); ret = savage_bci_get_buffers(dev, file_priv, &d);
} }
DRM_COPY_TO_USER_IOCTL((struct drm_dma __user *) data, d, sizeof(d)); DRM_COPY_TO_USER_IOCTL((struct drm_dma __user *) data, d, sizeof(d));
...@@ -1069,7 +1071,7 @@ int savage_bci_buffers(DRM_IOCTL_ARGS) ...@@ -1069,7 +1071,7 @@ int savage_bci_buffers(DRM_IOCTL_ARGS)
return ret; return ret;
} }
void savage_reclaim_buffers(struct drm_device *dev, DRMFILE filp) void savage_reclaim_buffers(struct drm_device *dev, struct drm_file *file_priv)
{ {
struct drm_device_dma *dma = dev->dma; struct drm_device_dma *dma = dev->dma;
drm_savage_private_t *dev_priv = dev->dev_private; drm_savage_private_t *dev_priv = dev->dev_private;
...@@ -1088,7 +1090,7 @@ void savage_reclaim_buffers(struct drm_device *dev, DRMFILE filp) ...@@ -1088,7 +1090,7 @@ void savage_reclaim_buffers(struct drm_device *dev, DRMFILE filp)
struct drm_buf *buf = dma->buflist[i]; struct drm_buf *buf = dma->buflist[i];
drm_savage_buf_priv_t *buf_priv = buf->dev_private; drm_savage_buf_priv_t *buf_priv = buf->dev_private;
if (buf->filp == filp && buf_priv && if (buf->file_priv == file_priv && buf_priv &&
buf_priv->next == NULL && buf_priv->prev == NULL) { buf_priv->next == NULL && buf_priv->prev == NULL) {
uint16_t event; uint16_t event;
DRM_DEBUG("reclaimed from client\n"); DRM_DEBUG("reclaimed from client\n");
...@@ -1098,7 +1100,7 @@ void savage_reclaim_buffers(struct drm_device *dev, DRMFILE filp) ...@@ -1098,7 +1100,7 @@ void savage_reclaim_buffers(struct drm_device *dev, DRMFILE filp)
} }
} }
drm_core_reclaim_buffers(dev, filp); drm_core_reclaim_buffers(dev, file_priv);
} }
drm_ioctl_desc_t savage_ioctls[] = { drm_ioctl_desc_t savage_ioctls[] = {
......
...@@ -212,7 +212,8 @@ extern int savage_driver_load(struct drm_device *dev, unsigned long chipset); ...@@ -212,7 +212,8 @@ extern int savage_driver_load(struct drm_device *dev, unsigned long chipset);
extern int savage_driver_firstopen(struct drm_device *dev); extern int savage_driver_firstopen(struct drm_device *dev);
extern void savage_driver_lastclose(struct drm_device *dev); extern void savage_driver_lastclose(struct drm_device *dev);
extern int savage_driver_unload(struct drm_device *dev); extern int savage_driver_unload(struct drm_device *dev);
extern void savage_reclaim_buffers(struct drm_device * dev, DRMFILE filp); extern void savage_reclaim_buffers(struct drm_device *dev,
struct drm_file *file_priv);
/* state functions */ /* state functions */
extern void savage_emit_clip_rect_s3d(drm_savage_private_t * dev_priv, extern void savage_emit_clip_rect_s3d(drm_savage_private_t * dev_priv,
......
...@@ -969,7 +969,7 @@ int savage_bci_cmdbuf(DRM_IOCTL_ARGS) ...@@ -969,7 +969,7 @@ int savage_bci_cmdbuf(DRM_IOCTL_ARGS)
DRM_DEBUG("\n"); DRM_DEBUG("\n");
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_COPY_FROM_USER_IOCTL(cmdbuf, (drm_savage_cmdbuf_t __user *) data, DRM_COPY_FROM_USER_IOCTL(cmdbuf, (drm_savage_cmdbuf_t __user *) data,
sizeof(cmdbuf)); sizeof(cmdbuf));
......
...@@ -63,7 +63,8 @@ typedef struct drm_sis_private { ...@@ -63,7 +63,8 @@ typedef struct drm_sis_private {
} drm_sis_private_t; } drm_sis_private_t;
extern int sis_idle(struct drm_device *dev); extern int sis_idle(struct drm_device *dev);
extern void sis_reclaim_buffers_locked(struct drm_device *dev, struct file *filp); extern void sis_reclaim_buffers_locked(struct drm_device *dev,
struct drm_file *file_priv);
extern void sis_lastclose(struct drm_device *dev); extern void sis_lastclose(struct drm_device *dev);
extern drm_ioctl_desc_t sis_ioctls[]; extern drm_ioctl_desc_t sis_ioctls[];
......
...@@ -123,7 +123,7 @@ static int sis_fb_init(DRM_IOCTL_ARGS) ...@@ -123,7 +123,7 @@ static int sis_fb_init(DRM_IOCTL_ARGS)
return 0; return 0;
} }
static int sis_drm_alloc(struct drm_device *dev, struct drm_file * priv, static int sis_drm_alloc(struct drm_device *dev, struct drm_file *file_priv,
unsigned long data, int pool) unsigned long data, int pool)
{ {
drm_sis_private_t *dev_priv = dev->dev_private; drm_sis_private_t *dev_priv = dev->dev_private;
...@@ -145,7 +145,7 @@ static int sis_drm_alloc(struct drm_device *dev, struct drm_file * priv, ...@@ -145,7 +145,7 @@ static int sis_drm_alloc(struct drm_device *dev, struct drm_file * priv,
mem.size = (mem.size + SIS_MM_ALIGN_MASK) >> SIS_MM_ALIGN_SHIFT; mem.size = (mem.size + SIS_MM_ALIGN_MASK) >> SIS_MM_ALIGN_SHIFT;
item = drm_sman_alloc(&dev_priv->sman, pool, mem.size, 0, item = drm_sman_alloc(&dev_priv->sman, pool, mem.size, 0,
(unsigned long)priv); (unsigned long)file_priv);
mutex_unlock(&dev->struct_mutex); mutex_unlock(&dev->struct_mutex);
if (item) { if (item) {
...@@ -191,7 +191,7 @@ static int sis_drm_free(DRM_IOCTL_ARGS) ...@@ -191,7 +191,7 @@ static int sis_drm_free(DRM_IOCTL_ARGS)
static int sis_fb_alloc(DRM_IOCTL_ARGS) static int sis_fb_alloc(DRM_IOCTL_ARGS)
{ {
DRM_DEVICE; DRM_DEVICE;
return sis_drm_alloc(dev, priv, data, VIDEO_TYPE); return sis_drm_alloc(dev, file_priv, data, VIDEO_TYPE);
} }
static int sis_ioctl_agp_init(DRM_IOCTL_ARGS) static int sis_ioctl_agp_init(DRM_IOCTL_ARGS)
...@@ -226,7 +226,7 @@ static int sis_ioctl_agp_alloc(DRM_IOCTL_ARGS) ...@@ -226,7 +226,7 @@ static int sis_ioctl_agp_alloc(DRM_IOCTL_ARGS)
{ {
DRM_DEVICE; DRM_DEVICE;
return sis_drm_alloc(dev, priv, data, AGP_TYPE); return sis_drm_alloc(dev, file_priv, data, AGP_TYPE);
} }
static drm_local_map_t *sis_reg_init(struct drm_device *dev) static drm_local_map_t *sis_reg_init(struct drm_device *dev)
...@@ -314,13 +314,13 @@ void sis_lastclose(struct drm_device *dev) ...@@ -314,13 +314,13 @@ void sis_lastclose(struct drm_device *dev)
mutex_unlock(&dev->struct_mutex); mutex_unlock(&dev->struct_mutex);
} }
void sis_reclaim_buffers_locked(struct drm_device * dev, struct file *filp) void sis_reclaim_buffers_locked(struct drm_device * dev,
struct drm_file *file_priv)
{ {
drm_sis_private_t *dev_priv = dev->dev_private; drm_sis_private_t *dev_priv = dev->dev_private;
struct drm_file *priv = filp->private_data;
mutex_lock(&dev->struct_mutex); mutex_lock(&dev->struct_mutex);
if (drm_sman_owner_clean(&dev_priv->sman, (unsigned long)priv)) { if (drm_sman_owner_clean(&dev_priv->sman, (unsigned long)file_priv)) {
mutex_unlock(&dev->struct_mutex); mutex_unlock(&dev->struct_mutex);
return; return;
} }
...@@ -329,7 +329,7 @@ void sis_reclaim_buffers_locked(struct drm_device * dev, struct file *filp) ...@@ -329,7 +329,7 @@ void sis_reclaim_buffers_locked(struct drm_device * dev, struct file *filp)
dev->driver->dma_quiescent(dev); dev->driver->dma_quiescent(dev);
} }
drm_sman_owner_cleanup(&dev_priv->sman, (unsigned long)priv); drm_sman_owner_cleanup(&dev_priv->sman, (unsigned long)file_priv);
mutex_unlock(&dev->struct_mutex); mutex_unlock(&dev->struct_mutex);
return; return;
} }
......
...@@ -330,7 +330,7 @@ static int via_flush_ioctl(DRM_IOCTL_ARGS) ...@@ -330,7 +330,7 @@ static int via_flush_ioctl(DRM_IOCTL_ARGS)
{ {
DRM_DEVICE; DRM_DEVICE;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
return via_driver_dma_quiescent(dev); return via_driver_dma_quiescent(dev);
} }
...@@ -341,7 +341,7 @@ static int via_cmdbuffer(DRM_IOCTL_ARGS) ...@@ -341,7 +341,7 @@ static int via_cmdbuffer(DRM_IOCTL_ARGS)
drm_via_cmdbuffer_t cmdbuf; drm_via_cmdbuffer_t cmdbuf;
int ret; int ret;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_COPY_FROM_USER_IOCTL(cmdbuf, (drm_via_cmdbuffer_t __user *) data, DRM_COPY_FROM_USER_IOCTL(cmdbuf, (drm_via_cmdbuffer_t __user *) data,
sizeof(cmdbuf)); sizeof(cmdbuf));
...@@ -386,7 +386,7 @@ static int via_pci_cmdbuffer(DRM_IOCTL_ARGS) ...@@ -386,7 +386,7 @@ static int via_pci_cmdbuffer(DRM_IOCTL_ARGS)
drm_via_cmdbuffer_t cmdbuf; drm_via_cmdbuffer_t cmdbuf;
int ret; int ret;
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
DRM_COPY_FROM_USER_IOCTL(cmdbuf, (drm_via_cmdbuffer_t __user *) data, DRM_COPY_FROM_USER_IOCTL(cmdbuf, (drm_via_cmdbuffer_t __user *) data,
sizeof(cmdbuf)); sizeof(cmdbuf));
...@@ -662,7 +662,7 @@ static int via_cmdbuf_size(DRM_IOCTL_ARGS) ...@@ -662,7 +662,7 @@ static int via_cmdbuf_size(DRM_IOCTL_ARGS)
drm_via_private_t *dev_priv; drm_via_private_t *dev_priv;
DRM_DEBUG("via cmdbuf_size\n"); DRM_DEBUG("via cmdbuf_size\n");
LOCK_TEST_WITH_RETURN(dev, filp); LOCK_TEST_WITH_RETURN(dev, file_priv);
dev_priv = (drm_via_private_t *) dev->dev_private; dev_priv = (drm_via_private_t *) dev->dev_private;
......
...@@ -144,7 +144,7 @@ extern void via_init_futex(drm_via_private_t * dev_priv); ...@@ -144,7 +144,7 @@ extern void via_init_futex(drm_via_private_t * dev_priv);
extern void via_cleanup_futex(drm_via_private_t * dev_priv); extern void via_cleanup_futex(drm_via_private_t * dev_priv);
extern void via_release_futex(drm_via_private_t * dev_priv, int context); extern void via_release_futex(drm_via_private_t * dev_priv, int context);
extern void via_reclaim_buffers_locked(struct drm_device *dev, struct file *filp); extern void via_reclaim_buffers_locked(struct drm_device *dev, struct drm_file *file_priv);
extern void via_lastclose(struct drm_device *dev); extern void via_lastclose(struct drm_device *dev);
extern void via_dmablit_handler(struct drm_device *dev, int engine, int from_irq); extern void via_dmablit_handler(struct drm_device *dev, int engine, int from_irq);
......
...@@ -149,7 +149,7 @@ int via_mem_alloc(DRM_IOCTL_ARGS) ...@@ -149,7 +149,7 @@ int via_mem_alloc(DRM_IOCTL_ARGS)
tmpSize = (mem.size + VIA_MM_ALIGN_MASK) >> VIA_MM_ALIGN_SHIFT; tmpSize = (mem.size + VIA_MM_ALIGN_MASK) >> VIA_MM_ALIGN_SHIFT;
item = drm_sman_alloc(&dev_priv->sman, mem.type, tmpSize, 0, item = drm_sman_alloc(&dev_priv->sman, mem.type, tmpSize, 0,
(unsigned long)priv); (unsigned long)file_priv);
mutex_unlock(&dev->struct_mutex); mutex_unlock(&dev->struct_mutex);
if (item) { if (item) {
mem.offset = ((mem.type == VIA_MEM_VIDEO) ? mem.offset = ((mem.type == VIA_MEM_VIDEO) ?
...@@ -188,13 +188,13 @@ int via_mem_free(DRM_IOCTL_ARGS) ...@@ -188,13 +188,13 @@ int via_mem_free(DRM_IOCTL_ARGS)
} }
void via_reclaim_buffers_locked(struct drm_device * dev, struct file *filp) void via_reclaim_buffers_locked(struct drm_device * dev,
struct drm_file *file_priv)
{ {
drm_via_private_t *dev_priv = dev->dev_private; drm_via_private_t *dev_priv = dev->dev_private;
struct drm_file *priv = filp->private_data;
mutex_lock(&dev->struct_mutex); mutex_lock(&dev->struct_mutex);
if (drm_sman_owner_clean(&dev_priv->sman, (unsigned long)priv)) { if (drm_sman_owner_clean(&dev_priv->sman, (unsigned long)file_priv)) {
mutex_unlock(&dev->struct_mutex); mutex_unlock(&dev->struct_mutex);
return; return;
} }
...@@ -203,7 +203,7 @@ void via_reclaim_buffers_locked(struct drm_device * dev, struct file *filp) ...@@ -203,7 +203,7 @@ void via_reclaim_buffers_locked(struct drm_device * dev, struct file *filp)
dev->driver->dma_quiescent(dev); dev->driver->dma_quiescent(dev);
} }
drm_sman_owner_cleanup(&dev_priv->sman, (unsigned long)priv); drm_sman_owner_cleanup(&dev_priv->sman, (unsigned long)file_priv);
mutex_unlock(&dev->struct_mutex); mutex_unlock(&dev->struct_mutex);
return; return;
} }
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment