--- linux_wrappers_ORIG.c 2008-07-16 11:36:59.000000000 +0300 +++ linux_wrappers.c 2008-07-16 11:47:03.000000000 +0300 @@ -122,6 +122,8 @@ static struct pci_dev *pci_root_dev; #endif +#include + typedef struct { struct page **pages; @@ -1788,14 +1790,14 @@ memset (sgl, 0, sizeof(struct scatterlist) * page_count); sgl[0].offset = ((unsigned long)buf) & (~PAGE_MASK); - sgl[0].page = pages[0]; + sgl[0].page_link = (unsigned long)pages[0]; if (page_count > 1) { sgl[0].length = PAGE_SIZE - sgl[0].offset; size -= sgl[0].length; for (i=1; i < page_count ; i++, size -= PAGE_SIZE) { - sgl[i].page = pages[i]; + sgl[i].page_link = (unsigned long)pages[i]; sgl[i].length = size < PAGE_SIZE ? size : PAGE_SIZE; } } @@ -1820,7 +1822,7 @@ for (i=0; i<*dma_sglen; i++) { #if defined(_CONFIG_SWIOTLB) - void *va = page_address(sgl[i].page) + sgl[i].offset; + void *va = page_address((struct page *)sgl[i].page_link) + sgl[i].offset; dma_addr_t dma_addr = virt_to_phys(va); if (dma_addr & ~mask) @@ -1951,9 +1953,9 @@ #if defined(_CONFIG_SWIOTLB) pci_unmap_single(dev_handle, sg_dma_address(&sgl[i]), sg_dma_len(&sgl[i]), (int)dma_direction); #endif - if (!PageReserved(sgl[i].page)) - SetPageDirty(sgl[i].page); - page_cache_release(sgl[i].page); + if (!PageReserved((struct page *)sgl[i].page_link)) + SetPageDirty((struct page *)sgl[i].page_link); + page_cache_release((struct page *)sgl[i].page_link); } vfree(sgl); #elif defined(LINUX_24)