]> git.hungrycats.org Git - linux/commitdiff
Merge from DRI CVS: Use the list_entry() macro instead of depending
authorLinus Torvalds <torvalds@home.transmeta.com>
Wed, 9 Apr 2003 14:45:24 +0000 (07:45 -0700)
committerLinus Torvalds <torvalds@home.transmeta.com>
Wed, 9 Apr 2003 14:45:24 +0000 (07:45 -0700)
on the list-head being at the top of the DRI data structures and
using hard casts.

drivers/char/drm/drmP.h
drivers/char/drm/drm_bufs.h
drivers/char/drm/drm_context.h
drivers/char/drm/drm_dma.h
drivers/char/drm/drm_ioctl.h
drivers/char/drm/drm_os_linux.h
drivers/char/drm/drm_proc.h
drivers/char/drm/drm_vm.h
drivers/char/drm/gamma_dma.c
drivers/char/drm/i810_dma.c
drivers/char/drm/i830_dma.c

index 43099a25c2fcb8b1345b6c1cb92f79f19cb20f02..03959def0efe2bb3bbf235d14c60f1567a5f7131 100644 (file)
@@ -242,17 +242,17 @@ static inline struct page * vmalloc_to_page(void * vmalloc_addr)
                        DRM(ioremapfree)( (map)->handle, (map)->size ); \
        } while (0)
 
-#define DRM_FIND_MAP(_map, _o)                                         \
-do {                                                                   \
-       struct list_head *_list;                                        \
-       list_for_each( _list, &dev->maplist->head ) {                   \
-               drm_map_list_t *_entry = (drm_map_list_t *)_list;       \
-               if ( _entry->map &&                                     \
-                    _entry->map->offset == (_o) ) {                    \
-                       (_map) = _entry->map;                           \
-                       break;                                          \
-               }                                                       \
-       }                                                               \
+#define DRM_FIND_MAP(_map, _o)                                                         \
+do {                                                                                   \
+       struct list_head *_list;                                                        \
+       list_for_each( _list, &dev->maplist->head ) {                                   \
+               drm_map_list_t *_entry = list_entry( _list, drm_map_list_t, head );     \
+               if ( _entry->map &&                                                     \
+                    _entry->map->offset == (_o) ) {                                    \
+                       (_map) = _entry->map;                                           \
+                       break;                                                          \
+               }                                                                       \
+       }                                                                               \
 } while(0)
 #define DRM_DROP_MAP(_map)
 
index 313b3622689b635241af473832ba02cc0f330448..24748a426b6812e72b8b2cc8635f01d24c91bbf6 100644 (file)
@@ -210,7 +210,7 @@ int DRM(rmmap)(struct inode *inode, struct file *filp,
        down(&dev->struct_sem);
        list = &dev->maplist->head;
        list_for_each(list, &dev->maplist->head) {
-               r_list = (drm_map_list_t *) list;
+               r_list = list_entry(list, drm_map_list_t, head);
 
                if(r_list->map &&
                   r_list->map->handle == request.handle &&
index 5a83584885f3d47d0ed058db6f70026fc229e44a..262207a101effadb084ac3e07d4f3c79d294424a 100644 (file)
@@ -194,7 +194,7 @@ int DRM(setsareactx)(struct inode *inode, struct file *filp,
 
        down(&dev->struct_sem);
        list_for_each(list, &dev->maplist->head) {
-               r_list = (drm_map_list_t *)list;
+               r_list = list_entry(list, drm_map_list_t, head);
                if(r_list->map &&
                   r_list->map->handle == request.handle)
                        goto found;
index 30aab1ee69638e3773fbac1afa63f31fc7424c13..5cdf11d1d096d98fb6dc9008b0af394ba071de57 100644 (file)
@@ -444,7 +444,7 @@ static int DRM(dma_get_buffers_of_order)(struct file *filp, drm_dma_t *d,
                                        d->flags & _DRM_DMA_WAIT);
                if (!buf) break;
                if (buf->pending || buf->waiting) {
-                       DRM_ERROR("Free buffer %d in use by %x (w%d, p%d)\n",
+                       DRM_ERROR("Free buffer %d in use: filp %p (w%d, p%d)\n",
                                  buf->idx,
                                  buf->filp,
                                  buf->waiting,
@@ -651,7 +651,7 @@ int DRM(wait_vblank)( DRM_IOCTL_ARGS )
                 * for the same vblank sequence number; nothing to be done in
                 * that case
                 */
-               list_for_each( ( (struct list_head *) vbl_sig ), &dev->vbl_sigs.head ) {
+               list_for_each_entry( vbl_sig, &dev->vbl_sigs.head, head ) {
                        if (vbl_sig->sequence == vblwait.request.sequence
                            && vbl_sig->info.si_signo == vblwait.request.signal
                            && vbl_sig->task == current)
@@ -702,19 +702,20 @@ done:
 
 void DRM(vbl_send_signals)( drm_device_t *dev )
 {
-       struct list_head *tmp;
+       struct list_head *list, *tmp;
        drm_vbl_sig_t *vbl_sig;
        unsigned int vbl_seq = atomic_read( &dev->vbl_received );
        unsigned long flags;
 
        spin_lock_irqsave( &dev->vbl_lock, flags );
 
-       list_for_each_safe( ( (struct list_head *) vbl_sig ), tmp, &dev->vbl_sigs.head ) {
+       list_for_each_safe( list, tmp, &dev->vbl_sigs.head ) {
+               vbl_sig = list_entry( list, drm_vbl_sig_t, head );
                if ( ( vbl_seq - vbl_sig->sequence ) <= (1<<23) ) {
                        vbl_sig->info.si_code = vbl_seq;
                        send_sig_info( vbl_sig->info.si_signo, &vbl_sig->info, vbl_sig->task );
 
-                       list_del( (struct list_head *) vbl_sig );
+                       list_del( list );
 
                        DRM_FREE( vbl_sig, sizeof(*vbl_sig) );
 
index 64e18a1cdb4962fea606faa7903908652f8855e3..e6c3dba50a72e80b8efa8c59e09405da1a9edd3b 100644 (file)
@@ -204,7 +204,7 @@ int DRM(getmap)( struct inode *inode, struct file *filp,
        i = 0;
        list_for_each(list, &dev->maplist->head) {
                if(i == idx) {
-                       r_list = (drm_map_list_t *)list;
+                       r_list = list_entry(list, drm_map_list_t, head);
                        break;
                }
                i++;
index 91094138c1043395d62ba323b3adca2bf553c99a..ef601bdc694acc25d7ca336f8daa08fc0a0b301d 100644 (file)
@@ -46,9 +46,8 @@
 
 #define DRM_GETSAREA()                                                  \
 do {                                                                    \
-       struct list_head *list;                                          \
-       list_for_each( list, &dev->maplist->head ) {                     \
-               drm_map_list_t *entry = (drm_map_list_t *)list;          \
+       drm_map_list_t *entry;                                           \
+       list_for_each_entry( entry, &dev->maplist->head, head ) {        \
                if ( entry->map &&                                       \
                     entry->map->type == _DRM_SHM &&                     \
                     (entry->map->flags & _DRM_CONTAINS_LOCK) ) {        \
@@ -60,28 +59,28 @@ do {                                                                         \
 
 #define DRM_HZ HZ
 
-#define DRM_WAIT_ON( ret, queue, timeout, condition )  \
-do {                                                   \
-       DECLARE_WAITQUEUE(entry, current);              \
-       unsigned long end = jiffies + (timeout);        \
-       add_wait_queue(&(queue), &entry);               \
-                                                       \
-       for (;;) {                                      \
-               current->state = TASK_INTERRUPTIBLE;    \
-               if (condition)                          \
-                       break;                          \
-               if((signed)(end - jiffies) <= 0) {      \
-                       ret = -EBUSY;                   \
-                       break;                          \
-               }                                       \
+#define DRM_WAIT_ON( ret, queue, timeout, condition )          \
+do {                                                           \
+       DECLARE_WAITQUEUE(entry, current);                      \
+       unsigned long end = jiffies + (timeout);                \
+       add_wait_queue(&(queue), &entry);                       \
+                                                               \
+       for (;;) {                                              \
+               current->state = TASK_INTERRUPTIBLE;            \
+               if (condition)                                  \
+                       break;                                  \
+               if (time_after_eq(jiffies, end)) {              \
+                       ret = -EBUSY;                           \
+                       break;                                  \
+               }                                               \
                schedule_timeout((HZ/100 > 1) ? HZ/100 : 1);    \
-               if (signal_pending(current)) {          \
-                       ret = -EINTR;                   \
-                       break;                          \
-               }                                       \
-       }                                               \
-       current->state = TASK_RUNNING;                  \
-       remove_wait_queue(&(queue), &entry);            \
+               if (signal_pending(current)) {                  \
+                       ret = -EINTR;                           \
+                       break;                                  \
+               }                                               \
+       }                                                       \
+       current->state = TASK_RUNNING;                          \
+       remove_wait_queue(&(queue), &entry);                    \
 } while (0)
 
 
index 5f4a3d832db386cda5ce02a2bab0299e99ac8b09..f91b4719cc456b681628624591f3fae525c9788b 100644 (file)
@@ -168,9 +168,9 @@ static int DRM(_vm_info)(char *buf, char **start, off_t offset, int request,
        struct list_head *list;
 
                                /* Hardcoded from _DRM_FRAME_BUFFER,
-                                   _DRM_REGISTERS, _DRM_SHM, and
-                                   _DRM_AGP. */
-       const char   *types[] = { "FB", "REG", "SHM", "AGP" };
+                                   _DRM_REGISTERS, _DRM_SHM, _DRM_AGP, and
+                                   _DRM_SCATTER_GATHER. */
+       const char   *types[] = { "FB", "REG", "SHM", "AGP", "SG" };
        const char   *type;
        int          i;
 
@@ -186,10 +186,10 @@ static int DRM(_vm_info)(char *buf, char **start, off_t offset, int request,
                       "address mtrr\n\n");
        i = 0;
        if (dev->maplist != NULL) list_for_each(list, &dev->maplist->head) {
-               r_list = (drm_map_list_t *)list;
+               r_list = list_entry(list, drm_map_list_t, head);
                map = r_list->map;
                if(!map) continue;
-               if (map->type < 0 || map->type > 3) type = "??";
+               if (map->type < 0 || map->type > 4) type = "??";
                else                                type = types[map->type];
                DRM_PROC_PRINT("%4d 0x%08lx 0x%08lx %4.4s  0x%02x 0x%08lx ",
                               i,
index 317263dd800a6b6eb91bb0d02e8a8b02d5210d60..77116396fc8d504b4d77cd8551a08386d07491ef 100644 (file)
@@ -73,7 +73,7 @@ struct page *DRM(vm_nopage)(struct vm_area_struct *vma,
        if(!dev->agp || !dev->agp->cant_use_aperture) goto vm_nopage_error;
 
        list_for_each(list, &dev->maplist->head) {
-               r_list = (drm_map_list_t *)list;
+               r_list = list_entry(list, drm_map_list_t, head);
                map = r_list->map;
                if (!map) continue;
                if (map->offset == VM_OFFSET(vma)) break;
@@ -189,7 +189,7 @@ void DRM(vm_shm_close)(struct vm_area_struct *vma)
                found_maps = 0;
                list = &dev->maplist->head;
                list_for_each(list, &dev->maplist->head) {
-                       r_list = (drm_map_list_t *) list;
+                       r_list = list_entry(list, drm_map_list_t, head);
                        if (r_list->map == map) found_maps++;
                }
 
@@ -392,7 +392,7 @@ int DRM(mmap)(struct file *filp, struct vm_area_struct *vma)
        list_for_each(list, &dev->maplist->head) {
                unsigned long off;
 
-               r_list = (drm_map_list_t *)list;
+               r_list = list_entry(list, drm_map_list_t, head);
                map = r_list->map;
                if (!map) continue;
                off = DRIVER_GET_MAP_OFS();
index 70b2d9d6f543d256ce6c2db8a9b8e4ce2b4a8567..4c6bf257de39475df62ed0d9214912a8b8dfc62b 100644 (file)
@@ -605,7 +605,7 @@ static int gamma_do_init_dma( drm_device_t *dev, drm_gamma_init_t *init )
        memset( dev_priv, 0, sizeof(drm_gamma_private_t) );
 
        list_for_each(list, &dev->maplist->head) {
-               drm_map_list_t *r_list = (drm_map_list_t *)list;
+               drm_map_list_t *r_list = list_entry(list, drm_map_list_t, head);
                if( r_list->map &&
                    r_list->map->type == _DRM_SHM &&
                    r_list->map->flags & _DRM_CONTAINS_LOCK ) {
@@ -809,7 +809,7 @@ int gamma_setsareactx(struct inode *inode, struct file *filp,
        down(&dev->struct_sem);
        r_list = NULL;
        list_for_each(list, &dev->maplist->head) {
-               r_list = (drm_map_list_t *)list;
+               r_list = list_entry(list, drm_map_list_t, head);
                if(r_list->map &&
                   r_list->map->handle == request.handle) break;
        }
index b3d7ad3e8ad7749bc846e5ad29b9df5798bbefde..1e62f56c1c155fa4bb4149f5858d9c5e01ef751a 100644 (file)
@@ -340,7 +340,7 @@ static int i810_dma_initialize(drm_device_t *dev,
        memset(dev_priv, 0, sizeof(drm_i810_private_t));
 
        list_for_each(list, &dev->maplist->head) {
-               drm_map_list_t *r_list = (drm_map_list_t *)list;
+               drm_map_list_t *r_list = list_entry(list, drm_map_list_t, head);
                if( r_list->map &&
                    r_list->map->type == _DRM_SHM &&
                    r_list->map->flags & _DRM_CONTAINS_LOCK ) {
index c7b2a49d5a2e26eaf3f0a3a298f4edaa46151356..49375d9594c588237c78c15a9cfb699d931cde79 100644 (file)
@@ -363,7 +363,7 @@ static int i830_dma_initialize(drm_device_t *dev,
        memset(dev_priv, 0, sizeof(drm_i830_private_t));
 
        list_for_each(list, &dev->maplist->head) {
-               drm_map_list_t *r_list = (drm_map_list_t *)list;
+               drm_map_list_t *r_list = list_entry(list, drm_map_list_t, head);
                if( r_list->map &&
                    r_list->map->type == _DRM_SHM &&
                    r_list->map->flags & _DRM_CONTAINS_LOCK ) {