Commit 933a6208 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* 'agp-patches' of git://git.kernel.org/pub/scm/linux/kernel/git/airlied/agp-2.6:
  agp: AMD AGP is used on UP1100 & UP1500 alpha boxen
  intel_agp: really fix 945/965GME
  agp: don't lock pages
  AGP: document boot options
  Fix "use after free" / "double free" bug in ati_create_gatt_pages / ati_free_gatt_pages
parents 715dad59 f191f144
Loading
Loading
Loading
Loading
+7 −0
Original line number Original line Diff line number Diff line
@@ -30,6 +30,7 @@ the beginning of each description states the restrictions within which a
parameter is applicable:
parameter is applicable:


	ACPI	ACPI support is enabled.
	ACPI	ACPI support is enabled.
	AGP	AGP (Accelerated Graphics Port) is enabled.
	ALSA	ALSA sound support is enabled.
	ALSA	ALSA sound support is enabled.
	APIC	APIC support is enabled.
	APIC	APIC support is enabled.
	APM	Advanced Power Management support is enabled.
	APM	Advanced Power Management support is enabled.
@@ -227,6 +228,12 @@ and is between 256 and 4096 characters. It is defined in the file
			to assume that this machine's pmtimer latches its value
			to assume that this machine's pmtimer latches its value
			and always returns good values.
			and always returns good values.


	agp=		[AGP]
			{ off | try_unsupported }
			off: disable AGP support
			try_unsupported: try to drive unsupported chipsets
				(may crash computer or cause data corruption)

	enable_timer_pin_1 [i386,x86-64]
	enable_timer_pin_1 [i386,x86-64]
			Enable PIN 1 of APIC timer
			Enable PIN 1 of APIC timer
			Can be useful to work around chipset bugs
			Can be useful to work around chipset bugs
+1 −1
Original line number Original line Diff line number Diff line
@@ -50,7 +50,7 @@ config AGP_ATI


config AGP_AMD
config AGP_AMD
	tristate "AMD Irongate, 761, and 762 chipset support"
	tristate "AMD Irongate, 761, and 762 chipset support"
	depends on AGP && X86_32
	depends on AGP && (X86_32 || ALPHA)
	help
	help
	  This option gives you AGP support for the GLX component of
	  This option gives you AGP support for the GLX component of
	  X on AMD Irongate, 761, and 762 chipsets.
	  X on AMD Irongate, 761, and 762 chipsets.
+2 −7
Original line number Original line Diff line number Diff line
@@ -123,21 +123,16 @@ static int ati_create_gatt_pages(int nr_tables)


	for (i = 0; i < nr_tables; i++) {
	for (i = 0; i < nr_tables; i++) {
		entry = kzalloc(sizeof(struct ati_page_map), GFP_KERNEL);
		entry = kzalloc(sizeof(struct ati_page_map), GFP_KERNEL);
		tables[i] = entry;
		if (entry == NULL) {
		if (entry == NULL) {
			while (i > 0) {
				kfree(tables[i-1]);
				i--;
			}
			kfree(tables);
			retval = -ENOMEM;
			retval = -ENOMEM;
			break;
			break;
		}
		}
		tables[i] = entry;
		retval = ati_create_page_map(entry);
		retval = ati_create_page_map(entry);
		if (retval != 0)
		if (retval != 0)
			break;
			break;
	}
	}
	ati_generic_private.num_tables = nr_tables;
	ati_generic_private.num_tables = i;
	ati_generic_private.gatt_pages = tables;
	ati_generic_private.gatt_pages = tables;


	if (retval != 0)
	if (retval != 0)
+0 −2
Original line number Original line Diff line number Diff line
@@ -1170,7 +1170,6 @@ void *agp_generic_alloc_page(struct agp_bridge_data *bridge)
	map_page_into_agp(page);
	map_page_into_agp(page);


	get_page(page);
	get_page(page);
	SetPageLocked(page);
	atomic_inc(&agp_bridge->current_memory_agp);
	atomic_inc(&agp_bridge->current_memory_agp);
	return page_address(page);
	return page_address(page);
}
}
@@ -1187,7 +1186,6 @@ void agp_generic_destroy_page(void *addr)
	page = virt_to_page(addr);
	page = virt_to_page(addr);
	unmap_page_from_agp(page);
	unmap_page_from_agp(page);
	put_page(page);
	put_page(page);
	unlock_page(page);
	free_page((unsigned long)addr);
	free_page((unsigned long)addr);
	atomic_dec(&agp_bridge->current_memory_agp);
	atomic_dec(&agp_bridge->current_memory_agp);
}
}
+12 −7
Original line number Original line Diff line number Diff line
@@ -20,7 +20,9 @@
#define PCI_DEVICE_ID_INTEL_82965G_IG       0x29A2
#define PCI_DEVICE_ID_INTEL_82965G_IG       0x29A2
#define PCI_DEVICE_ID_INTEL_82965GM_HB      0x2A00
#define PCI_DEVICE_ID_INTEL_82965GM_HB      0x2A00
#define PCI_DEVICE_ID_INTEL_82965GM_IG      0x2A02
#define PCI_DEVICE_ID_INTEL_82965GM_IG      0x2A02
#define PCI_DEVICE_ID_INTEL_82965GME_HB     0x2A10
#define PCI_DEVICE_ID_INTEL_82965GME_IG     0x2A12
#define PCI_DEVICE_ID_INTEL_82965GME_IG     0x2A12
#define PCI_DEVICE_ID_INTEL_82945GME_HB     0x27AC
#define PCI_DEVICE_ID_INTEL_82945GME_IG     0x27AE
#define PCI_DEVICE_ID_INTEL_82945GME_IG     0x27AE
#define PCI_DEVICE_ID_INTEL_G33_HB          0x29C0
#define PCI_DEVICE_ID_INTEL_G33_HB          0x29C0
#define PCI_DEVICE_ID_INTEL_G33_IG          0x29C2
#define PCI_DEVICE_ID_INTEL_G33_IG          0x29C2
@@ -33,7 +35,8 @@
                 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965G_1_HB || \
                 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965G_1_HB || \
                 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965Q_HB || \
                 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965Q_HB || \
                 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965G_HB || \
                 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965G_HB || \
                 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965GM_HB)
                 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965GM_HB || \
                 agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82965GME_HB)


#define IS_G33 (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_G33_HB || \
#define IS_G33 (agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_G33_HB || \
		agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_Q35_HB || \
		agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_Q35_HB || \
@@ -213,7 +216,6 @@ static void *i8xx_alloc_pages(void)
	}
	}
	global_flush_tlb();
	global_flush_tlb();
	get_page(page);
	get_page(page);
	SetPageLocked(page);
	atomic_inc(&agp_bridge->current_memory_agp);
	atomic_inc(&agp_bridge->current_memory_agp);
	return page_address(page);
	return page_address(page);
}
}
@@ -229,7 +231,6 @@ static void i8xx_destroy_pages(void *addr)
	change_page_attr(page, 4, PAGE_KERNEL);
	change_page_attr(page, 4, PAGE_KERNEL);
	global_flush_tlb();
	global_flush_tlb();
	put_page(page);
	put_page(page);
	unlock_page(page);
	__free_pages(page, 2);
	__free_pages(page, 2);
	atomic_dec(&agp_bridge->current_memory_agp);
	atomic_dec(&agp_bridge->current_memory_agp);
}
}
@@ -527,6 +528,7 @@ static void intel_i830_init_gtt_entries(void)
			    agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82915GM_HB ||
			    agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82915GM_HB ||
			    agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82945G_HB ||
			    agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82945G_HB ||
			    agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82945GM_HB ||
			    agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82945GM_HB ||
			    agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82945GME_HB ||
			    IS_I965 || IS_G33)
			    IS_I965 || IS_G33)
				gtt_entries = MB(48) - KB(size);
				gtt_entries = MB(48) - KB(size);
			else
			else
@@ -538,6 +540,7 @@ static void intel_i830_init_gtt_entries(void)
			    agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82915GM_HB ||
			    agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82915GM_HB ||
			    agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82945G_HB ||
			    agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82945G_HB ||
			    agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82945GM_HB ||
			    agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82945GM_HB ||
			    agp_bridge->dev->device == PCI_DEVICE_ID_INTEL_82945GME_HB ||
			    IS_I965 || IS_G33)
			    IS_I965 || IS_G33)
				gtt_entries = MB(64) - KB(size);
				gtt_entries = MB(64) - KB(size);
			else
			else
@@ -1848,9 +1851,9 @@ static const struct intel_driver_description {
		NULL, &intel_915_driver },
		NULL, &intel_915_driver },
	{ PCI_DEVICE_ID_INTEL_82945G_HB, PCI_DEVICE_ID_INTEL_82945G_IG, 0, "945G",
	{ PCI_DEVICE_ID_INTEL_82945G_HB, PCI_DEVICE_ID_INTEL_82945G_IG, 0, "945G",
		NULL, &intel_915_driver },
		NULL, &intel_915_driver },
	{ PCI_DEVICE_ID_INTEL_82945GM_HB, PCI_DEVICE_ID_INTEL_82945GM_IG, 1, "945GM",
	{ PCI_DEVICE_ID_INTEL_82945GM_HB, PCI_DEVICE_ID_INTEL_82945GM_IG, 0, "945GM",
		NULL, &intel_915_driver },
		NULL, &intel_915_driver },
	{ PCI_DEVICE_ID_INTEL_82945GM_HB, PCI_DEVICE_ID_INTEL_82945GME_IG, 0, "945GME",
	{ PCI_DEVICE_ID_INTEL_82945GME_HB, PCI_DEVICE_ID_INTEL_82945GME_IG, 0, "945GME",
		NULL, &intel_915_driver },
		NULL, &intel_915_driver },
	{ PCI_DEVICE_ID_INTEL_82946GZ_HB, PCI_DEVICE_ID_INTEL_82946GZ_IG, 0, "946GZ",
	{ PCI_DEVICE_ID_INTEL_82946GZ_HB, PCI_DEVICE_ID_INTEL_82946GZ_IG, 0, "946GZ",
		NULL, &intel_i965_driver },
		NULL, &intel_i965_driver },
@@ -1860,9 +1863,9 @@ static const struct intel_driver_description {
		NULL, &intel_i965_driver },
		NULL, &intel_i965_driver },
	{ PCI_DEVICE_ID_INTEL_82965G_HB, PCI_DEVICE_ID_INTEL_82965G_IG, 0, "965G",
	{ PCI_DEVICE_ID_INTEL_82965G_HB, PCI_DEVICE_ID_INTEL_82965G_IG, 0, "965G",
		NULL, &intel_i965_driver },
		NULL, &intel_i965_driver },
	{ PCI_DEVICE_ID_INTEL_82965GM_HB, PCI_DEVICE_ID_INTEL_82965GM_IG, 1, "965GM",
	{ PCI_DEVICE_ID_INTEL_82965GM_HB, PCI_DEVICE_ID_INTEL_82965GM_IG, 0, "965GM",
		NULL, &intel_i965_driver },
		NULL, &intel_i965_driver },
	{ PCI_DEVICE_ID_INTEL_82965GM_HB, PCI_DEVICE_ID_INTEL_82965GME_IG, 0, "965GME/GLE",
	{ PCI_DEVICE_ID_INTEL_82965GME_HB, PCI_DEVICE_ID_INTEL_82965GME_IG, 0, "965GME/GLE",
		NULL, &intel_i965_driver },
		NULL, &intel_i965_driver },
	{ PCI_DEVICE_ID_INTEL_7505_0, 0, 0, "E7505", &intel_7505_driver, NULL },
	{ PCI_DEVICE_ID_INTEL_7505_0, 0, 0, "E7505", &intel_7505_driver, NULL },
	{ PCI_DEVICE_ID_INTEL_7205_0, 0, 0, "E7205", &intel_7505_driver, NULL },
	{ PCI_DEVICE_ID_INTEL_7205_0, 0, 0, "E7205", &intel_7505_driver, NULL },
@@ -2051,11 +2054,13 @@ static struct pci_device_id agp_intel_pci_table[] = {
	ID(PCI_DEVICE_ID_INTEL_82915GM_HB),
	ID(PCI_DEVICE_ID_INTEL_82915GM_HB),
	ID(PCI_DEVICE_ID_INTEL_82945G_HB),
	ID(PCI_DEVICE_ID_INTEL_82945G_HB),
	ID(PCI_DEVICE_ID_INTEL_82945GM_HB),
	ID(PCI_DEVICE_ID_INTEL_82945GM_HB),
	ID(PCI_DEVICE_ID_INTEL_82945GME_HB),
	ID(PCI_DEVICE_ID_INTEL_82946GZ_HB),
	ID(PCI_DEVICE_ID_INTEL_82946GZ_HB),
	ID(PCI_DEVICE_ID_INTEL_82965G_1_HB),
	ID(PCI_DEVICE_ID_INTEL_82965G_1_HB),
	ID(PCI_DEVICE_ID_INTEL_82965Q_HB),
	ID(PCI_DEVICE_ID_INTEL_82965Q_HB),
	ID(PCI_DEVICE_ID_INTEL_82965G_HB),
	ID(PCI_DEVICE_ID_INTEL_82965G_HB),
	ID(PCI_DEVICE_ID_INTEL_82965GM_HB),
	ID(PCI_DEVICE_ID_INTEL_82965GM_HB),
	ID(PCI_DEVICE_ID_INTEL_82965GME_HB),
	ID(PCI_DEVICE_ID_INTEL_G33_HB),
	ID(PCI_DEVICE_ID_INTEL_G33_HB),
	ID(PCI_DEVICE_ID_INTEL_Q35_HB),
	ID(PCI_DEVICE_ID_INTEL_Q35_HB),
	ID(PCI_DEVICE_ID_INTEL_Q33_HB),
	ID(PCI_DEVICE_ID_INTEL_Q33_HB),
Loading