ia64/xen-unstable

changeset 2434:75ba907f8ccf

bitkeeper revision 1.1159.69.16 (413aa1d0GpVAPcEe9OlMHIT6xiUM_w)

Patch AGP and DRM video drivers to be (hopefully) safe for Xen.
These patches must be applied manually for now:
cd linux-2.6.8.1-xen0 ; patch -p1 <../linux-2.6.8.1-patches/*.patch
author kaf24@freefall.cl.cam.ac.uk
date Sun Sep 05 05:19:12 2004 +0000 (2004-09-05)
parents 83ed216eb7c3
children 791d6dc54a24
files .rootkeys linux-2.6.8.1-patches/agpgart.patch linux-2.6.8.1-patches/drm.patch
line diff
     1.1 --- a/.rootkeys	Sun Sep 05 03:57:12 2004 +0000
     1.2 +++ b/.rootkeys	Sun Sep 05 05:19:12 2004 +0000
     1.3 @@ -126,6 +126,8 @@ 3e5a4e681xMPdF9xCMwpyfuYMySU5g linux-2.4
     1.4  409ba2e7akOFqQUg6Qyg2s28xcXiMg linux-2.4.27-xen-sparse/mm/page_alloc.c
     1.5  3e5a4e683HKVU-sxtagrDasRB8eBVw linux-2.4.27-xen-sparse/mm/swapfile.c
     1.6  41180721bNns9Na7w1nJ0ZVt8bhUNA linux-2.4.27-xen-sparse/mm/vmalloc.c
     1.7 +413aa1d0oNP8HXLvfPuMe6cSroUfSA linux-2.6.8.1-patches/agpgart.patch
     1.8 +413aa1d0ewvSv-ohnNnQQNGsbPTTNA linux-2.6.8.1-patches/drm.patch
     1.9  40f562372u3A7_kfbYYixPHJJxYUxA linux-2.6.8.1-xen-sparse/arch/xen/Kconfig
    1.10  40f56237utH41NPukqHksuNf29IC9A linux-2.6.8.1-xen-sparse/arch/xen/Kconfig.drivers
    1.11  40f56237penAAlWVBVDpeQZNFIg8CA linux-2.6.8.1-xen-sparse/arch/xen/Makefile
     2.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     2.2 +++ b/linux-2.6.8.1-patches/agpgart.patch	Sun Sep 05 05:19:12 2004 +0000
     2.3 @@ -0,0 +1,328 @@
     2.4 +--- linux-2.6.8.1/drivers/char/agp/ali-agp.c	2004-08-14 11:55:35.000000000 +0100
     2.5 ++++ linux-2.6.8.1-xen0/drivers/char/agp/ali-agp.c	2004-09-05 05:55:58.876495340 +0100
     2.6 +@@ -150,7 +150,7 @@
     2.7 + 	pci_read_config_dword(agp_bridge->dev, ALI_CACHE_FLUSH_CTRL, &temp);
     2.8 + 	pci_write_config_dword(agp_bridge->dev, ALI_CACHE_FLUSH_CTRL,
     2.9 + 			(((temp & ALI_CACHE_FLUSH_ADDR_MASK) |
    2.10 +-			  virt_to_phys(addr)) | ALI_CACHE_FLUSH_EN ));
    2.11 ++			  virt_to_bus(addr)) | ALI_CACHE_FLUSH_EN ));
    2.12 + 	return addr;
    2.13 + }
    2.14 + 
    2.15 +@@ -174,7 +174,7 @@
    2.16 + 	pci_read_config_dword(agp_bridge->dev, ALI_CACHE_FLUSH_CTRL, &temp);
    2.17 + 	pci_write_config_dword(agp_bridge->dev, ALI_CACHE_FLUSH_CTRL,
    2.18 + 			(((temp & ALI_CACHE_FLUSH_ADDR_MASK) |
    2.19 +-			  virt_to_phys(addr)) | ALI_CACHE_FLUSH_EN));
    2.20 ++			  virt_to_bus(addr)) | ALI_CACHE_FLUSH_EN));
    2.21 + 	agp_generic_destroy_page(addr);
    2.22 + }
    2.23 + 
    2.24 +--- linux-2.6.8.1/drivers/char/agp/amd-k7-agp.c	2004-08-14 11:56:24.000000000 +0100
    2.25 ++++ linux-2.6.8.1-xen0/drivers/char/agp/amd-k7-agp.c	2004-09-05 05:55:58.877495108 +0100
    2.26 +@@ -43,7 +43,7 @@
    2.27 + 
    2.28 + 	SetPageReserved(virt_to_page(page_map->real));
    2.29 + 	global_cache_flush();
    2.30 +-	page_map->remapped = ioremap_nocache(virt_to_phys(page_map->real),
    2.31 ++	page_map->remapped = ioremap_nocache(virt_to_bus(page_map->real),
    2.32 + 					    PAGE_SIZE);
    2.33 + 	if (page_map->remapped == NULL) {
    2.34 + 		ClearPageReserved(virt_to_page(page_map->real));
    2.35 +@@ -152,7 +152,7 @@
    2.36 + 
    2.37 + 	agp_bridge->gatt_table_real = (u32 *)page_dir.real;
    2.38 + 	agp_bridge->gatt_table = (u32 *)page_dir.remapped;
    2.39 +-	agp_bridge->gatt_bus_addr = virt_to_phys(page_dir.real);
    2.40 ++	agp_bridge->gatt_bus_addr = virt_to_bus(page_dir.real);
    2.41 + 
    2.42 + 	/* Get the address for the gart region.
    2.43 + 	 * This is a bus address even on the alpha, b/c its
    2.44 +@@ -166,7 +166,7 @@
    2.45 + 	/* Calculate the agp offset */
    2.46 + 	for (i = 0; i < value->num_entries / 1024; i++, addr += 0x00400000) {
    2.47 + 		page_dir.remapped[GET_PAGE_DIR_OFF(addr)] =
    2.48 +-			virt_to_phys(amd_irongate_private.gatt_pages[i]->real);
    2.49 ++			virt_to_bus(amd_irongate_private.gatt_pages[i]->real);
    2.50 + 		page_dir.remapped[GET_PAGE_DIR_OFF(addr)] |= 0x00000001;
    2.51 + 	}
    2.52 + 
    2.53 +--- linux-2.6.8.1/drivers/char/agp/amd64-agp.c	2004-08-14 11:55:47.000000000 +0100
    2.54 ++++ linux-2.6.8.1-xen0/drivers/char/agp/amd64-agp.c	2004-09-05 05:55:58.877495108 +0100
    2.55 +@@ -212,7 +212,7 @@
    2.56 + 
    2.57 + static int amd_8151_configure(void)
    2.58 + {
    2.59 +-	unsigned long gatt_bus = virt_to_phys(agp_bridge->gatt_table_real);
    2.60 ++	unsigned long gatt_bus = virt_to_bus(agp_bridge->gatt_table_real);
    2.61 + 
    2.62 + 	/* Configure AGP regs in each x86-64 host bridge. */
    2.63 + 	for_each_nb() {
    2.64 +@@ -521,7 +521,7 @@
    2.65 + {
    2.66 + 	struct agp_bridge_data *bridge = pci_get_drvdata(pdev);
    2.67 + 
    2.68 +-	release_mem_region(virt_to_phys(bridge->gatt_table_real),
    2.69 ++	release_mem_region(virt_to_bus(bridge->gatt_table_real),
    2.70 + 			   amd64_aperture_sizes[bridge->aperture_size_idx].size);
    2.71 + 	agp_remove_bridge(bridge);
    2.72 + 	agp_put_bridge(bridge);
    2.73 +--- linux-2.6.8.1/drivers/char/agp/ati-agp.c	2004-08-14 11:55:48.000000000 +0100
    2.74 ++++ linux-2.6.8.1-xen0/drivers/char/agp/ati-agp.c	2004-09-05 05:55:58.877495108 +0100
    2.75 +@@ -64,7 +64,7 @@
    2.76 + 
    2.77 + 	/* CACHE_FLUSH(); */
    2.78 + 	global_cache_flush();
    2.79 +-	page_map->remapped = ioremap_nocache(virt_to_phys(page_map->real),
    2.80 ++	page_map->remapped = ioremap_nocache(virt_to_bus(page_map->real),
    2.81 + 					    PAGE_SIZE);
    2.82 + 	if (page_map->remapped == NULL || err) {
    2.83 + 		ClearPageReserved(virt_to_page(page_map->real));
    2.84 +--- linux-2.6.8.1/drivers/char/agp/backend.c	2004-08-14 11:55:47.000000000 +0100
    2.85 ++++ linux-2.6.8.1-xen0/drivers/char/agp/backend.c	2004-09-05 05:55:58.878494876 +0100
    2.86 +@@ -142,7 +142,7 @@
    2.87 + 			return -ENOMEM;
    2.88 + 		}
    2.89 + 
    2.90 +-		bridge->scratch_page_real = virt_to_phys(addr);
    2.91 ++		bridge->scratch_page_real = virt_to_bus(addr);
    2.92 + 		bridge->scratch_page =
    2.93 + 		    bridge->driver->mask_memory(bridge->scratch_page_real, 0);
    2.94 + 	}
    2.95 +@@ -186,7 +186,7 @@
    2.96 + err_out:
    2.97 + 	if (bridge->driver->needs_scratch_page)
    2.98 + 		bridge->driver->agp_destroy_page(
    2.99 +-				phys_to_virt(bridge->scratch_page_real));
   2.100 ++				bus_to_virt(bridge->scratch_page_real));
   2.101 + 	if (got_gatt)
   2.102 + 		bridge->driver->free_gatt_table();
   2.103 + 	if (got_keylist) {
   2.104 +@@ -211,7 +211,7 @@
   2.105 + 	if (bridge->driver->agp_destroy_page &&
   2.106 + 	    bridge->driver->needs_scratch_page)
   2.107 + 		bridge->driver->agp_destroy_page(
   2.108 +-				phys_to_virt(bridge->scratch_page_real));
   2.109 ++				bus_to_virt(bridge->scratch_page_real));
   2.110 + }
   2.111 + 
   2.112 + static const drm_agp_t drm_agp = {
   2.113 +--- linux-2.6.8.1/drivers/char/agp/generic.c	2004-08-14 11:55:10.000000000 +0100
   2.114 ++++ linux-2.6.8.1-xen0/drivers/char/agp/generic.c	2004-09-05 05:55:58.879494644 +0100
   2.115 +@@ -127,7 +127,7 @@
   2.116 + 	}
   2.117 + 	if (curr->page_count != 0) {
   2.118 + 		for (i = 0; i < curr->page_count; i++) {
   2.119 +-			agp_bridge->driver->agp_destroy_page(phys_to_virt(curr->memory[i]));
   2.120 ++			agp_bridge->driver->agp_destroy_page(bus_to_virt(curr->memory[i]));
   2.121 + 		}
   2.122 + 	}
   2.123 + 	agp_free_key(curr->key);
   2.124 +@@ -181,7 +181,7 @@
   2.125 + 			return NULL;
   2.126 + 		}
   2.127 + 		new->memory[i] =
   2.128 +-			agp_bridge->driver->mask_memory(virt_to_phys(addr), type);
   2.129 ++			agp_bridge->driver->mask_memory(virt_to_bus(addr), type);
   2.130 + 		new->page_count++;
   2.131 + 	}
   2.132 + 
   2.133 +@@ -636,6 +636,7 @@
   2.134 + 	int i;
   2.135 + 	void *temp;
   2.136 + 	struct page *page;
   2.137 ++	dma_addr_t dma;
   2.138 + 
   2.139 + 	/* The generic routines can't handle 2 level gatt's */
   2.140 + 	if (agp_bridge->driver->size_type == LVL2_APER_SIZE)
   2.141 +@@ -674,8 +675,10 @@
   2.142 + 				break;
   2.143 + 			}
   2.144 + 
   2.145 +-			table = (char *) __get_free_pages(GFP_KERNEL,
   2.146 +-							  page_order);
   2.147 ++			table = dma_alloc_coherent(
   2.148 ++					&agp_bridge->dev->dev,
   2.149 ++					PAGE_SIZE << page_order, &dma,
   2.150 ++					GFP_KERNEL);
   2.151 + 
   2.152 + 			if (table == NULL) {
   2.153 + 				i++;
   2.154 +@@ -706,7 +709,9 @@
   2.155 + 		size = ((struct aper_size_info_fixed *) temp)->size;
   2.156 + 		page_order = ((struct aper_size_info_fixed *) temp)->page_order;
   2.157 + 		num_entries = ((struct aper_size_info_fixed *) temp)->num_entries;
   2.158 +-		table = (char *) __get_free_pages(GFP_KERNEL, page_order);
   2.159 ++		table = dma_alloc_coherent(
   2.160 ++				&agp_bridge->dev->dev,
   2.161 ++				PAGE_SIZE << page_order, &dma, GFP_KERNEL);
   2.162 + 	}
   2.163 + 
   2.164 + 	if (table == NULL)
   2.165 +@@ -721,7 +726,7 @@
   2.166 + 	agp_gatt_table = (void *)table;
   2.167 + 
   2.168 + 	agp_bridge->driver->cache_flush();
   2.169 +-	agp_bridge->gatt_table = ioremap_nocache(virt_to_phys(table),
   2.170 ++	agp_bridge->gatt_table = ioremap_nocache(virt_to_bus(table),
   2.171 + 					(PAGE_SIZE * (1 << page_order)));
   2.172 + 	agp_bridge->driver->cache_flush();
   2.173 + 
   2.174 +@@ -729,11 +734,12 @@
   2.175 + 		for (page = virt_to_page(table); page <= virt_to_page(table_end); page++)
   2.176 + 			ClearPageReserved(page);
   2.177 + 
   2.178 +-		free_pages((unsigned long) table, page_order);
   2.179 ++		dma_free_coherent(&agp_bridge->dev->dev, PAGE_SIZE<<page_order,
   2.180 ++					table, dma);
   2.181 + 
   2.182 + 		return -ENOMEM;
   2.183 + 	}
   2.184 +-	agp_bridge->gatt_bus_addr = virt_to_phys(agp_bridge->gatt_table_real);
   2.185 ++	agp_bridge->gatt_bus_addr = virt_to_bus(table);
   2.186 + 
   2.187 + 	/* AK: bogus, should encode addresses > 4GB */
   2.188 + 	for (i = 0; i < num_entries; i++)
   2.189 +@@ -785,7 +791,8 @@
   2.190 + 	for (page = virt_to_page(table); page <= virt_to_page(table_end); page++)
   2.191 + 		ClearPageReserved(page);
   2.192 + 
   2.193 +-	free_pages((unsigned long) agp_bridge->gatt_table_real, page_order);
   2.194 ++	dma_free_coherent(&agp_bridge->dev->dev, PAGE_SIZE<<page_order,
   2.195 ++		agp_bridge->gatt_table_real, agp_bridge->gatt_bus_addr);
   2.196 + 
   2.197 + 	agp_gatt_table = NULL;
   2.198 + 	agp_bridge->gatt_table = NULL;
   2.199 +--- linux-2.6.8.1/drivers/char/agp/hp-agp.c	2004-08-14 11:55:59.000000000 +0100
   2.200 ++++ linux-2.6.8.1-xen0/drivers/char/agp/hp-agp.c	2004-09-05 05:55:58.879494644 +0100
   2.201 +@@ -110,7 +110,7 @@
   2.202 + 	hp->gart_size = HP_ZX1_GART_SIZE;
   2.203 + 	hp->gatt_entries = hp->gart_size / hp->io_page_size;
   2.204 + 
   2.205 +-	hp->io_pdir = phys_to_virt(INREG64(hp->ioc_regs, HP_ZX1_PDIR_BASE));
   2.206 ++	hp->io_pdir = bus_to_virt(INREG64(hp->ioc_regs, HP_ZX1_PDIR_BASE));
   2.207 + 	hp->gatt = &hp->io_pdir[HP_ZX1_IOVA_TO_PDIR(hp->gart_base)];
   2.208 + 
   2.209 + 	if (hp->gatt[0] != HP_ZX1_SBA_IOMMU_COOKIE) {
   2.210 +@@ -248,7 +248,7 @@
   2.211 + 	agp_bridge->mode = INREG32(hp->lba_regs, hp->lba_cap_offset + PCI_AGP_STATUS);
   2.212 + 
   2.213 + 	if (hp->io_pdir_owner) {
   2.214 +-		OUTREG64(hp->ioc_regs, HP_ZX1_PDIR_BASE, virt_to_phys(hp->io_pdir));
   2.215 ++		OUTREG64(hp->ioc_regs, HP_ZX1_PDIR_BASE, virt_to_bus(hp->io_pdir));
   2.216 + 		OUTREG64(hp->ioc_regs, HP_ZX1_TCNFG, hp->io_tlb_ps);
   2.217 + 		OUTREG64(hp->ioc_regs, HP_ZX1_IMASK, ~(HP_ZX1_IOVA_SIZE - 1));
   2.218 + 		OUTREG64(hp->ioc_regs, HP_ZX1_IBASE, hp->iova_base | 0x1);
   2.219 +--- linux-2.6.8.1/drivers/char/agp/i460-agp.c	2004-08-14 11:55:34.000000000 +0100
   2.220 ++++ linux-2.6.8.1-xen0/drivers/char/agp/i460-agp.c	2004-09-05 05:55:58.879494644 +0100
   2.221 +@@ -371,7 +371,7 @@
   2.222 + 	}
   2.223 + 	memset(lp->alloced_map, 0, map_size);
   2.224 + 
   2.225 +-	lp->paddr = virt_to_phys(lpage);
   2.226 ++	lp->paddr = virt_to_bus(lpage);
   2.227 + 	lp->refcount = 0;
   2.228 + 	atomic_add(I460_KPAGES_PER_IOPAGE, &agp_bridge->current_memory_agp);
   2.229 + 	return 0;
   2.230 +@@ -382,7 +382,7 @@
   2.231 + 	kfree(lp->alloced_map);
   2.232 + 	lp->alloced_map = NULL;
   2.233 + 
   2.234 +-	free_pages((unsigned long) phys_to_virt(lp->paddr), I460_IO_PAGE_SHIFT - PAGE_SHIFT);
   2.235 ++	free_pages((unsigned long) bus_to_virt(lp->paddr), I460_IO_PAGE_SHIFT - PAGE_SHIFT);
   2.236 + 	atomic_sub(I460_KPAGES_PER_IOPAGE, &agp_bridge->current_memory_agp);
   2.237 + }
   2.238 + 
   2.239 +--- linux-2.6.8.1/drivers/char/agp/intel-agp.c	2004-08-14 11:55:32.000000000 +0100
   2.240 ++++ linux-2.6.8.1-xen0/drivers/char/agp/intel-agp.c	2004-09-05 05:55:58.880494412 +0100
   2.241 +@@ -285,7 +285,7 @@
   2.242 + 	if (new == NULL)
   2.243 + 		return NULL;
   2.244 + 
   2.245 +-	new->memory[0] = virt_to_phys(addr);
   2.246 ++	new->memory[0] = virt_to_bus(addr);
   2.247 + 	if (pg_count == 4) {
   2.248 + 		/* kludge to get 4 physical pages for ARGB cursor */
   2.249 + 		new->memory[1] = new->memory[0] + PAGE_SIZE;
   2.250 +@@ -328,10 +328,10 @@
   2.251 + 	agp_free_key(curr->key);
   2.252 + 	if(curr->type == AGP_PHYS_MEMORY) {
   2.253 + 		if (curr->page_count == 4)
   2.254 +-			i8xx_destroy_pages(phys_to_virt(curr->memory[0]));
   2.255 ++			i8xx_destroy_pages(bus_to_virt(curr->memory[0]));
   2.256 + 		else
   2.257 + 	   		agp_bridge->driver->agp_destroy_page(
   2.258 +-				 phys_to_virt(curr->memory[0]));
   2.259 ++				 bus_to_virt(curr->memory[0]));
   2.260 + 		vfree(curr->memory);
   2.261 + 	}
   2.262 + 	kfree(curr);
   2.263 +--- linux-2.6.8.1/drivers/char/agp/intel-mch-agp.c	2004-08-14 11:54:49.000000000 +0100
   2.264 ++++ linux-2.6.8.1-xen0/drivers/char/agp/intel-mch-agp.c	2004-09-05 05:55:58.880494412 +0100
   2.265 +@@ -51,7 +51,7 @@
   2.266 + 	if (new == NULL)
   2.267 + 		return NULL;
   2.268 + 
   2.269 +-	new->memory[0] = agp_bridge->driver->mask_memory(virt_to_phys(addr), type);
   2.270 ++	new->memory[0] = agp_bridge->driver->mask_memory(virt_to_bus(addr), type);
   2.271 + 	new->page_count = 1;
   2.272 + 	new->num_scratch_pages = 1;
   2.273 + 	new->type = AGP_PHYS_MEMORY;
   2.274 +@@ -63,7 +63,7 @@
   2.275 + {
   2.276 + 	agp_free_key(curr->key);
   2.277 + 	if(curr->type == AGP_PHYS_MEMORY) {
   2.278 +-		agp_bridge->driver->agp_destroy_page(phys_to_virt(curr->memory[0]));
   2.279 ++		agp_bridge->driver->agp_destroy_page(bus_to_virt(curr->memory[0]));
   2.280 + 		vfree(curr->memory);
   2.281 + 	}
   2.282 + 	kfree(curr);
   2.283 +--- linux-2.6.8.1/drivers/char/agp/sworks-agp.c	2004-08-14 11:55:10.000000000 +0100
   2.284 ++++ linux-2.6.8.1-xen0/drivers/char/agp/sworks-agp.c	2004-09-05 05:55:58.881494180 +0100
   2.285 +@@ -51,7 +51,7 @@
   2.286 + 	}
   2.287 + 	SetPageReserved(virt_to_page(page_map->real));
   2.288 + 	global_cache_flush();
   2.289 +-	page_map->remapped = ioremap_nocache(virt_to_phys(page_map->real), 
   2.290 ++	page_map->remapped = ioremap_nocache(virt_to_bus(page_map->real), 
   2.291 + 					    PAGE_SIZE);
   2.292 + 	if (page_map->remapped == NULL) {
   2.293 + 		ClearPageReserved(virt_to_page(page_map->real));
   2.294 +@@ -164,7 +164,7 @@
   2.295 + 	for(i = 0; i < 1024; i++) {
   2.296 + 		serverworks_private.scratch_dir.remapped[i] = (unsigned long) agp_bridge->scratch_page;
   2.297 + 		page_dir.remapped[i] =
   2.298 +-			virt_to_phys(serverworks_private.scratch_dir.real);
   2.299 ++			virt_to_bus(serverworks_private.scratch_dir.real);
   2.300 + 		page_dir.remapped[i] |= 0x00000001;
   2.301 + 	}
   2.302 + 
   2.303 +@@ -177,7 +177,7 @@
   2.304 + 
   2.305 + 	agp_bridge->gatt_table_real = (u32 *)page_dir.real;
   2.306 + 	agp_bridge->gatt_table = (u32 *)page_dir.remapped;
   2.307 +-	agp_bridge->gatt_bus_addr = virt_to_phys(page_dir.real);
   2.308 ++	agp_bridge->gatt_bus_addr = virt_to_bus(page_dir.real);
   2.309 + 
   2.310 + 	/* Get the address for the gart region.
   2.311 + 	 * This is a bus address even on the alpha, b/c its
   2.312 +@@ -191,7 +191,7 @@
   2.313 + 
   2.314 + 	for(i = 0; i < value->num_entries / 1024; i++) {
   2.315 + 		page_dir.remapped[i] =
   2.316 +-			virt_to_phys(serverworks_private.gatt_pages[i]->real);
   2.317 ++			virt_to_bus(serverworks_private.gatt_pages[i]->real);
   2.318 + 		page_dir.remapped[i] |= 0x00000001;
   2.319 + 	}
   2.320 + 
   2.321 +--- linux-2.6.8.1/drivers/char/agp/uninorth-agp.c	2004-08-14 11:55:32.000000000 +0100
   2.322 ++++ linux-2.6.8.1-xen0/drivers/char/agp/uninorth-agp.c	2004-09-05 05:55:58.881494180 +0100
   2.323 +@@ -200,7 +200,7 @@
   2.324 + 
   2.325 + 	agp_bridge->gatt_table_real = (u32 *) table;
   2.326 + 	agp_bridge->gatt_table = (u32 *)table;
   2.327 +-	agp_bridge->gatt_bus_addr = virt_to_phys(table);
   2.328 ++	agp_bridge->gatt_bus_addr = virt_to_bus(table);
   2.329 + 
   2.330 + 	for (i = 0; i < num_entries; i++) {
   2.331 + 		agp_bridge->gatt_table[i] =
     3.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     3.2 +++ b/linux-2.6.8.1-patches/drm.patch	Sun Sep 05 05:19:12 2004 +0000
     3.3 @@ -0,0 +1,11 @@
     3.4 +--- linux-2.6.8.1/drivers/char/drm/ati_pcigart.h	2004-08-14 11:56:14.000000000 +0100
     3.5 ++++ linux-2.6.8.1-xen0/drivers/char/drm/ati_pcigart.h	2004-09-05 06:14:51.751782846 +0100
     3.6 +@@ -158,7 +158,7 @@
     3.7 + 	ret = 1;
     3.8 + 
     3.9 + #if defined(__i386__) || defined(__x86_64__)
    3.10 +-	asm volatile ( "wbinvd" ::: "memory" );
    3.11 ++	wbinvd();
    3.12 + #else
    3.13 + 	mb();
    3.14 + #endif