--- linux/drivers/char/drm-4.0/i810_dma.c-orig Sun Feb 17 01:16:46 2002 +++ linux/drivers/char/drm-4.0/i810_dma.c Sun Feb 17 01:18:09 2002 @@ -34,6 +34,7 @@ #include "drmP.h" #include "i810_drv.h" #include /* For task queue support */ +#include /* in case we don't have a 2.3.99-pre6 kernel or later: */ #ifndef VM_DONTCOPY @@ -288,14 +289,14 @@ static void i810_free_page(drm_device_t *dev, unsigned long page) { - if(page == 0UL) - return; - - atomic_dec(&virt_to_page(page)->count); - clear_bit(PG_locked, &virt_to_page(page)->flags); - wake_up(&virt_to_page(page)->wait); - free_page(page); - return; + if (page) { + struct page *p = virt_to_page(page); + + atomic_dec(&p->count); + clear_bit(PG_locked, &p->flags); + wake_up_page(p); + free_page(page); + } } static int i810_dma_cleanup(drm_device_t *dev)