diff options
author | FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp> | 2010-01-25 00:10:47 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2010-01-31 01:52:26 -0500 |
commit | 61684ceaad4f65d1a9832c722f7bd5e7fc714de9 (patch) | |
tree | 8a2509f1582656759efbecf98037a6aaff8d128d | |
parent | 7c099ce1575126395f186ecf58b51a60d5c3be7d (diff) |
x86/agp: Fix agp_amd64_init regression
This fixes the regression introduced by commit
42590a75019a50012f25a962246498dead428433 ("x86/agp: Fix
agp_amd64_init and agp_amd64_cleanup").
The above commit changes agp_amd64_init() not to do anything if
gart_iommu_aperture is not zero.
If GART iommu calls agp_amd64_init(), we need to skip
agp_amd64_init() when it's called later via module_init.
The problem is that gart_iommu_init() calls agp_amd64_init()
with not zero gart_iommu_aperture so agp_amd64_init() is never
initialized.
When gart_iommu_init() calls agp_amd64_init(), agp should be
always initialized.
Reported-by: Marin Mitov <mitov@issp.bas.bg>
Reported-by: Johannes Hirte <johannes.hirte@fem.tu-ilmenau.de>
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Tested-by: Marin Mitov <mitov@issp.bas.bg>
Tested-by: Kevin Winchester <kjwinchester@gmail.com>
Cc: davej@redhat.com
Cc: Linus Torvalds <torvalds@linux-foundation.org>
LKML-Reference: <20100125141006O.fujita.tomonori@lab.ntt.co.jp>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r-- | drivers/char/agp/amd64-agp.c | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/drivers/char/agp/amd64-agp.c b/drivers/char/agp/amd64-agp.c index 1afb8968a342..34cf04e21795 100644 --- a/drivers/char/agp/amd64-agp.c +++ b/drivers/char/agp/amd64-agp.c | |||
@@ -729,9 +729,6 @@ int __init agp_amd64_init(void) | |||
729 | if (agp_off) | 729 | if (agp_off) |
730 | return -EINVAL; | 730 | return -EINVAL; |
731 | 731 | ||
732 | if (gart_iommu_aperture) | ||
733 | return agp_bridges_found ? 0 : -ENODEV; | ||
734 | |||
735 | err = pci_register_driver(&agp_amd64_pci_driver); | 732 | err = pci_register_driver(&agp_amd64_pci_driver); |
736 | if (err < 0) | 733 | if (err < 0) |
737 | return err; | 734 | return err; |
@@ -768,6 +765,14 @@ int __init agp_amd64_init(void) | |||
768 | return err; | 765 | return err; |
769 | } | 766 | } |
770 | 767 | ||
768 | static int __init agp_amd64_mod_init(void) | ||
769 | { | ||
770 | if (gart_iommu_aperture) | ||
771 | return agp_bridges_found ? 0 : -ENODEV; | ||
772 | |||
773 | return agp_amd64_init(); | ||
774 | } | ||
775 | |||
771 | static void __exit agp_amd64_cleanup(void) | 776 | static void __exit agp_amd64_cleanup(void) |
772 | { | 777 | { |
773 | if (gart_iommu_aperture) | 778 | if (gart_iommu_aperture) |
@@ -777,7 +782,7 @@ static void __exit agp_amd64_cleanup(void) | |||
777 | pci_unregister_driver(&agp_amd64_pci_driver); | 782 | pci_unregister_driver(&agp_amd64_pci_driver); |
778 | } | 783 | } |
779 | 784 | ||
780 | module_init(agp_amd64_init); | 785 | module_init(agp_amd64_mod_init); |
781 | module_exit(agp_amd64_cleanup); | 786 | module_exit(agp_amd64_cleanup); |
782 | 787 | ||
783 | MODULE_AUTHOR("Dave Jones <davej@redhat.com>, Andi Kleen"); | 788 | MODULE_AUTHOR("Dave Jones <davej@redhat.com>, Andi Kleen"); |