diff options
| author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-01-30 11:43:26 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-01-30 11:43:26 -0500 |
| commit | 51e6ed23fc95c3e710d8a98717924ccb2571aa66 (patch) | |
| tree | 2e7b2aae718de89e31384bc133e8752da642f5ae | |
| parent | 597049ccd729e80c5eff7d907beeb58d908aac6f (diff) | |
| parent | 43ed41f648554c9fecaf7597d25e05da63ec7290 (diff) | |
Merge master.kernel.org:/pub/scm/linux/kernel/git/davej/agpgart
* master.kernel.org:/pub/scm/linux/kernel/git/davej/agpgart:
[AGPGART] Add new IDs to VIA AGP.
[AGPGART] Remove pointless assignment.
[AGPGART] Remove pointless typedef in ati-agp
[AGPGART] Prevent (unlikely) memory leak in amd_create_gatt_pages()
[AGPGART] intel_agp: restore graphics device's pci space early in resume
| -rw-r--r-- | drivers/char/agp/amd-k7-agp.c | 5 | ||||
| -rw-r--r-- | drivers/char/agp/amd64-agp.c | 2 | ||||
| -rw-r--r-- | drivers/char/agp/ati-agp.c | 36 | ||||
| -rw-r--r-- | drivers/char/agp/intel-agp.c | 9 | ||||
| -rw-r--r-- | drivers/char/agp/via-agp.c | 21 | ||||
| -rw-r--r-- | include/linux/pci_ids.h | 3 |
6 files changed, 54 insertions, 22 deletions
diff --git a/drivers/char/agp/amd-k7-agp.c b/drivers/char/agp/amd-k7-agp.c index 51d0d562d01e..c85c8cadb6df 100644 --- a/drivers/char/agp/amd-k7-agp.c +++ b/drivers/char/agp/amd-k7-agp.c | |||
| @@ -101,6 +101,11 @@ static int amd_create_gatt_pages(int nr_tables) | |||
| 101 | for (i = 0; i < nr_tables; i++) { | 101 | for (i = 0; i < nr_tables; i++) { |
| 102 | entry = kzalloc(sizeof(struct amd_page_map), GFP_KERNEL); | 102 | entry = kzalloc(sizeof(struct amd_page_map), GFP_KERNEL); |
| 103 | if (entry == NULL) { | 103 | if (entry == NULL) { |
| 104 | while (i > 0) { | ||
| 105 | kfree(tables[i-1]); | ||
| 106 | i--; | ||
| 107 | } | ||
| 108 | kfree(tables); | ||
| 104 | retval = -ENOMEM; | 109 | retval = -ENOMEM; |
| 105 | break; | 110 | break; |
| 106 | } | 111 | } |
diff --git a/drivers/char/agp/amd64-agp.c b/drivers/char/agp/amd64-agp.c index 979300405c0e..93d2209fee4c 100644 --- a/drivers/char/agp/amd64-agp.c +++ b/drivers/char/agp/amd64-agp.c | |||
| @@ -655,7 +655,7 @@ static struct pci_device_id agp_amd64_pci_table[] = { | |||
| 655 | .class = (PCI_CLASS_BRIDGE_HOST << 8), | 655 | .class = (PCI_CLASS_BRIDGE_HOST << 8), |
| 656 | .class_mask = ~0, | 656 | .class_mask = ~0, |
| 657 | .vendor = PCI_VENDOR_ID_VIA, | 657 | .vendor = PCI_VENDOR_ID_VIA, |
| 658 | .device = PCI_DEVICE_ID_VIA_K8M890CE, | 658 | .device = PCI_DEVICE_ID_VIA_VT3336, |
| 659 | .subvendor = PCI_ANY_ID, | 659 | .subvendor = PCI_ANY_ID, |
| 660 | .subdevice = PCI_ANY_ID, | 660 | .subdevice = PCI_ANY_ID, |
| 661 | }, | 661 | }, |
diff --git a/drivers/char/agp/ati-agp.c b/drivers/char/agp/ati-agp.c index f244c6682738..9987dc2e0c3f 100644 --- a/drivers/char/agp/ati-agp.c +++ b/drivers/char/agp/ati-agp.c | |||
| @@ -41,18 +41,18 @@ static struct gatt_mask ati_generic_masks[] = | |||
| 41 | }; | 41 | }; |
| 42 | 42 | ||
| 43 | 43 | ||
| 44 | typedef struct _ati_page_map { | 44 | struct ati_page_map { |
| 45 | unsigned long *real; | 45 | unsigned long *real; |
| 46 | unsigned long __iomem *remapped; | 46 | unsigned long __iomem *remapped; |
| 47 | } ati_page_map; | 47 | }; |
| 48 | 48 | ||
| 49 | static struct _ati_generic_private { | 49 | static struct _ati_generic_private { |
| 50 | volatile u8 __iomem *registers; | 50 | volatile u8 __iomem *registers; |
| 51 | ati_page_map **gatt_pages; | 51 | struct ati_page_map **gatt_pages; |
| 52 | int num_tables; | 52 | int num_tables; |
| 53 | } ati_generic_private; | 53 | } ati_generic_private; |
| 54 | 54 | ||
| 55 | static int ati_create_page_map(ati_page_map *page_map) | 55 | static int ati_create_page_map(struct ati_page_map *page_map) |
| 56 | { | 56 | { |
| 57 | int i, err = 0; | 57 | int i, err = 0; |
| 58 | 58 | ||
| @@ -82,7 +82,7 @@ static int ati_create_page_map(ati_page_map *page_map) | |||
| 82 | } | 82 | } |
| 83 | 83 | ||
| 84 | 84 | ||
| 85 | static void ati_free_page_map(ati_page_map *page_map) | 85 | static void ati_free_page_map(struct ati_page_map *page_map) |
| 86 | { | 86 | { |
| 87 | unmap_page_from_agp(virt_to_page(page_map->real)); | 87 | unmap_page_from_agp(virt_to_page(page_map->real)); |
| 88 | iounmap(page_map->remapped); | 88 | iounmap(page_map->remapped); |
| @@ -94,8 +94,8 @@ static void ati_free_page_map(ati_page_map *page_map) | |||
| 94 | static void ati_free_gatt_pages(void) | 94 | static void ati_free_gatt_pages(void) |
| 95 | { | 95 | { |
| 96 | int i; | 96 | int i; |
| 97 | ati_page_map **tables; | 97 | struct ati_page_map **tables; |
| 98 | ati_page_map *entry; | 98 | struct ati_page_map *entry; |
| 99 | 99 | ||
| 100 | tables = ati_generic_private.gatt_pages; | 100 | tables = ati_generic_private.gatt_pages; |
| 101 | for (i = 0; i < ati_generic_private.num_tables; i++) { | 101 | for (i = 0; i < ati_generic_private.num_tables; i++) { |
| @@ -112,30 +112,30 @@ static void ati_free_gatt_pages(void) | |||
| 112 | 112 | ||
| 113 | static int ati_create_gatt_pages(int nr_tables) | 113 | static int ati_create_gatt_pages(int nr_tables) |
| 114 | { | 114 | { |
| 115 | ati_page_map **tables; | 115 | struct ati_page_map **tables; |
| 116 | ati_page_map *entry; | 116 | struct ati_page_map *entry; |
| 117 | int retval = 0; | 117 | int retval = 0; |
| 118 | int i; | 118 | int i; |
| 119 | 119 | ||
| 120 | tables = kzalloc((nr_tables + 1) * sizeof(ati_page_map *),GFP_KERNEL); | 120 | tables = kzalloc((nr_tables + 1) * sizeof(struct ati_page_map *),GFP_KERNEL); |
| 121 | if (tables == NULL) | 121 | if (tables == NULL) |
| 122 | return -ENOMEM; | 122 | return -ENOMEM; |
| 123 | 123 | ||
| 124 | for (i = 0; i < nr_tables; i++) { | 124 | for (i = 0; i < nr_tables; i++) { |
| 125 | entry = kzalloc(sizeof(ati_page_map), GFP_KERNEL); | 125 | entry = kzalloc(sizeof(struct ati_page_map), GFP_KERNEL); |
| 126 | if (entry == NULL) { | 126 | if (entry == NULL) { |
| 127 | while (i>0) { | 127 | while (i > 0) { |
| 128 | kfree (tables[i-1]); | 128 | kfree(tables[i-1]); |
| 129 | i--; | 129 | i--; |
| 130 | } | 130 | } |
| 131 | kfree (tables); | 131 | kfree(tables); |
| 132 | tables = NULL; | ||
| 133 | retval = -ENOMEM; | 132 | retval = -ENOMEM; |
| 134 | break; | 133 | break; |
| 135 | } | 134 | } |
| 136 | tables[i] = entry; | 135 | tables[i] = entry; |
| 137 | retval = ati_create_page_map(entry); | 136 | retval = ati_create_page_map(entry); |
| 138 | if (retval != 0) break; | 137 | if (retval != 0) |
| 138 | break; | ||
| 139 | } | 139 | } |
| 140 | ati_generic_private.num_tables = nr_tables; | 140 | ati_generic_private.num_tables = nr_tables; |
| 141 | ati_generic_private.gatt_pages = tables; | 141 | ati_generic_private.gatt_pages = tables; |
| @@ -340,7 +340,7 @@ static int ati_remove_memory(struct agp_memory * mem, off_t pg_start, | |||
| 340 | static int ati_create_gatt_table(struct agp_bridge_data *bridge) | 340 | static int ati_create_gatt_table(struct agp_bridge_data *bridge) |
| 341 | { | 341 | { |
| 342 | struct aper_size_info_lvl2 *value; | 342 | struct aper_size_info_lvl2 *value; |
| 343 | ati_page_map page_dir; | 343 | struct ati_page_map page_dir; |
| 344 | unsigned long addr; | 344 | unsigned long addr; |
| 345 | int retval; | 345 | int retval; |
| 346 | u32 temp; | 346 | u32 temp; |
| @@ -400,7 +400,7 @@ static int ati_create_gatt_table(struct agp_bridge_data *bridge) | |||
| 400 | 400 | ||
| 401 | static int ati_free_gatt_table(struct agp_bridge_data *bridge) | 401 | static int ati_free_gatt_table(struct agp_bridge_data *bridge) |
| 402 | { | 402 | { |
| 403 | ati_page_map page_dir; | 403 | struct ati_page_map page_dir; |
| 404 | 404 | ||
| 405 | page_dir.real = (unsigned long *)agp_bridge->gatt_table_real; | 405 | page_dir.real = (unsigned long *)agp_bridge->gatt_table_real; |
| 406 | page_dir.remapped = (unsigned long __iomem *)agp_bridge->gatt_table; | 406 | page_dir.remapped = (unsigned long __iomem *)agp_bridge->gatt_table; |
diff --git a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c index ab0a9c0ad7c0..a3011de51f7c 100644 --- a/drivers/char/agp/intel-agp.c +++ b/drivers/char/agp/intel-agp.c | |||
| @@ -1955,6 +1955,15 @@ static int agp_intel_resume(struct pci_dev *pdev) | |||
| 1955 | 1955 | ||
| 1956 | pci_restore_state(pdev); | 1956 | pci_restore_state(pdev); |
| 1957 | 1957 | ||
| 1958 | /* We should restore our graphics device's config space, | ||
| 1959 | * as host bridge (00:00) resumes before graphics device (02:00), | ||
| 1960 | * then our access to its pci space can work right. | ||
| 1961 | */ | ||
| 1962 | if (intel_i810_private.i810_dev) | ||
| 1963 | pci_restore_state(intel_i810_private.i810_dev); | ||
| 1964 | if (intel_i830_private.i830_dev) | ||
| 1965 | pci_restore_state(intel_i830_private.i830_dev); | ||
| 1966 | |||
| 1958 | if (bridge->driver == &intel_generic_driver) | 1967 | if (bridge->driver == &intel_generic_driver) |
| 1959 | intel_configure(); | 1968 | intel_configure(); |
| 1960 | else if (bridge->driver == &intel_850_driver) | 1969 | else if (bridge->driver == &intel_850_driver) |
diff --git a/drivers/char/agp/via-agp.c b/drivers/char/agp/via-agp.c index c149ac9ce9a7..2ded7a280d7f 100644 --- a/drivers/char/agp/via-agp.c +++ b/drivers/char/agp/via-agp.c | |||
| @@ -380,9 +380,23 @@ static struct agp_device_ids via_agp_device_ids[] __devinitdata = | |||
| 380 | /* P4M800CE */ | 380 | /* P4M800CE */ |
| 381 | { | 381 | { |
| 382 | .device_id = PCI_DEVICE_ID_VIA_P4M800CE, | 382 | .device_id = PCI_DEVICE_ID_VIA_P4M800CE, |
| 383 | .chipset_name = "P4M800CE", | 383 | .chipset_name = "VT3314", |
| 384 | }, | ||
| 385 | /* CX700 */ | ||
| 386 | { | ||
| 387 | .device_id = PCI_DEVICE_ID_VIA_CX700, | ||
| 388 | .chipset_name = "CX700", | ||
| 389 | }, | ||
| 390 | /* VT3336 */ | ||
| 391 | { | ||
| 392 | .device_id = PCI_DEVICE_ID_VIA_VT3336, | ||
| 393 | .chipset_name = "VT3336", | ||
| 394 | }, | ||
| 395 | /* P4M890 */ | ||
| 396 | { | ||
| 397 | .device_id = PCI_DEVICE_ID_VIA_P4M890, | ||
| 398 | .chipset_name = "P4M890", | ||
| 384 | }, | 399 | }, |
| 385 | |||
| 386 | { }, /* dummy final entry, always present */ | 400 | { }, /* dummy final entry, always present */ |
| 387 | }; | 401 | }; |
| 388 | 402 | ||
| @@ -524,6 +538,9 @@ static const struct pci_device_id agp_via_pci_table[] = { | |||
| 524 | ID(PCI_DEVICE_ID_VIA_83_87XX_1), | 538 | ID(PCI_DEVICE_ID_VIA_83_87XX_1), |
| 525 | ID(PCI_DEVICE_ID_VIA_3296_0), | 539 | ID(PCI_DEVICE_ID_VIA_3296_0), |
| 526 | ID(PCI_DEVICE_ID_VIA_P4M800CE), | 540 | ID(PCI_DEVICE_ID_VIA_P4M800CE), |
| 541 | ID(PCI_DEVICE_ID_VIA_CX700), | ||
| 542 | ID(PCI_DEVICE_ID_VIA_VT3336), | ||
| 543 | ID(PCI_DEVICE_ID_VIA_P4M890), | ||
| 527 | { } | 544 | { } |
| 528 | }; | 545 | }; |
| 529 | 546 | ||
diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h index e642b99f9a92..3d1d21035dec 100644 --- a/include/linux/pci_ids.h +++ b/include/linux/pci_ids.h | |||
| @@ -1277,7 +1277,8 @@ | |||
| 1277 | #define PCI_DEVICE_ID_VIA_3296_0 0x0296 | 1277 | #define PCI_DEVICE_ID_VIA_3296_0 0x0296 |
| 1278 | #define PCI_DEVICE_ID_VIA_8363_0 0x0305 | 1278 | #define PCI_DEVICE_ID_VIA_8363_0 0x0305 |
| 1279 | #define PCI_DEVICE_ID_VIA_P4M800CE 0x0314 | 1279 | #define PCI_DEVICE_ID_VIA_P4M800CE 0x0314 |
| 1280 | #define PCI_DEVICE_ID_VIA_K8M890CE 0x0336 | 1280 | #define PCI_DEVICE_ID_VIA_P4M890 0x0327 |
| 1281 | #define PCI_DEVICE_ID_VIA_VT3336 0x0336 | ||
| 1281 | #define PCI_DEVICE_ID_VIA_8371_0 0x0391 | 1282 | #define PCI_DEVICE_ID_VIA_8371_0 0x0391 |
| 1282 | #define PCI_DEVICE_ID_VIA_8501_0 0x0501 | 1283 | #define PCI_DEVICE_ID_VIA_8501_0 0x0501 |
| 1283 | #define PCI_DEVICE_ID_VIA_82C561 0x0561 | 1284 | #define PCI_DEVICE_ID_VIA_82C561 0x0561 |
