LKML Archive on lore.kernel.org
 help / color / Atom feed
From: Marin Mitov <mitov@issp.bas.bg>
To: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
Cc: linux-kernel@vger.kernel.org
Subject: [BUG] agpgart-amd64 not initialized in 2.6.33-rc5 if iommu=allowed in kernel command line
Date: Sat, 23 Jan 2010 23:14:55 +0200
Message-ID: <201001232314.55425.mitov@issp.bas.bg> (raw)

Hi,

If I start the kernel without command line parameters (4GB RAM)
iommu-swiotlb is used due to quirk in VIA K8T800Pro Host Bridge.
In that case all is OK.

If I put in the kernel command line: iommu=allowed (+other parameters)
I have iommu-gart used but no AGP. dmesg output:

[drm:mga_do_agp_dma_bootstrap] *ERROR* Unable to acquire AGP: -19

For debugging I patched the kernel (mostly prink(), shown at the end)
producing the output in the dmesg:

no command line
MDM: agp_amd64_init entered
MDM: agp_off: false
MDM: agp_bridges_found: 0
MDM: gart_iommu_aperture: 0
MDM: agp_amd64_probe entered

command line: iommu=allowed:
MDM: gart_iommu_init
MDM: before: no_agp = 0
MDM: 	agp_amd64_init entered
MDM: 	agp_off: false
MDM: 	agp_bridges_found: 0
MDM: after: no_agp = 1
MDM: agp_amd64_init() < 0: 1
MDM: agp_copy_info() < 0: -1
MDM: 	agp_amd64_init entered
MDM: 	agp_off: false
MDM: 	agp_bridges_found: 0

One see in the last case ( iommu=allowed) agp_amd64_init()
is executed twice, but agp_amd64_probe() is not executed at all
(agp_bridges_found is incremented only in agp_amd64_probe())

Is this expected behavior?

Thanks,

Marin Mitov

The testing patch:
--- ./drivers/char/agp/amd64-agp.c.orig	2010-01-23 18:46:46.000000000 +0200
+++ ./drivers/char/agp/amd64-agp.c	2010-01-23 22:09:44.000000000 +0200
@@ -498,7 +498,7 @@
 	struct agp_bridge_data *bridge;
 	u8 cap_ptr;
 	int err;
-
+	printk(KERN_DEBUG "MDM: agp_amd64_probe entered\n");
 	cap_ptr = pci_find_capability(pdev, PCI_CAP_ID_AGP);
 	if (!cap_ptr)
 		return -ENODEV;
@@ -725,13 +725,14 @@
 int __init agp_amd64_init(void)
 {
 	int err = 0;
-
+	printk(KERN_DEBUG "MDM: agp_amd64_init entered\n");
 	if (agp_off)
 		return -EINVAL;
-
+	printk(KERN_DEBUG "MDM: agp_off: false\n");
+	printk(KERN_DEBUG "MDM: agp_bridges_found: %d\n", agp_bridges_found);
 	if (gart_iommu_aperture)
 		return agp_bridges_found ? 0 : -ENODEV;
-
+	printk(KERN_DEBUG "MDM: gart_iommu_aperture: %d\n", gart_iommu_aperture);
 	err = pci_register_driver(&agp_amd64_pci_driver);
 	if (err < 0)
 		return err;
--- ./arch/x86/kernel/pci-gart_64.c.orig	2010-01-23 17:07:42.000000000 +0200
+++ ./arch/x86/kernel/pci-gart_64.c	2010-01-23 17:47:22.000000000 +0200
@@ -734,20 +734,25 @@
 	unsigned long start_pfn, end_pfn;
 	unsigned long scratch;
 	long i;
+	int tmp1 = -1, tmp2 = -1;
 
 	if (cache_k8_northbridges() < 0 || num_k8_northbridges == 0)
 		return 0;
 
+	printk(KERN_DEBUG "MDM: gart_iommu_init\n");
 #ifndef CONFIG_AGP_AMD64
 	no_agp = 1;
 #else
 	/* Makefile puts PCI initialization via subsys_initcall first. */
 	/* Add other K8 AGP bridge drivers here */
+	printk(KERN_DEBUG "MDM: before: no_agp = %d\n", no_agp);
 	no_agp = no_agp ||
-		(agp_amd64_init() < 0) ||
-		(agp_copy_info(agp_bridge, &info) < 0);
+		(tmp1 = (agp_amd64_init() < 0)) ||
+		(tmp2 = (agp_copy_info(agp_bridge, &info) < 0));
 #endif
-
+	printk(KERN_DEBUG "MDM: after: no_agp = %d\n", no_agp);
+	printk(KERN_DEBUG "MDM: agp_amd64_init() < 0: %d\n", tmp1);
+	printk(KERN_DEBUG "MDM: agp_copy_info() < 0: %d\n", tmp2); 
 	if (no_iommu ||
 	    (!force_iommu && max_pfn <= MAX_DMA32_PFN) ||
 	    !gart_iommu_aperture ||



             reply index

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-01-23 21:14 Marin Mitov [this message]
2010-01-25  5:10 ` FUJITA Tomonori
2010-01-25  7:37   ` Marin Mitov
2010-02-02 11:23     ` FUJITA Tomonori
2010-02-02 15:49       ` FUJITA Tomonori
2010-02-03 15:19         ` Marin Mitov
2010-02-04  0:12           ` FUJITA Tomonori
2010-02-03 16:18         ` Marin Mitov
2010-01-31  8:30   ` [tip:x86/urgent] x86/agp: Fix agp_amd64_init regression tip-bot for FUJITA Tomonori

Reply instructions:

You may reply publically to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=201001232314.55425.mitov@issp.bas.bg \
    --to=mitov@issp.bas.bg \
    --cc=fujita.tomonori@lab.ntt.co.jp \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

LKML Archive on lore.kernel.org

Archives are clonable:
	git clone --mirror https://lore.kernel.org/lkml/0 lkml/git/0.git
	git clone --mirror https://lore.kernel.org/lkml/1 lkml/git/1.git
	git clone --mirror https://lore.kernel.org/lkml/2 lkml/git/2.git
	git clone --mirror https://lore.kernel.org/lkml/3 lkml/git/3.git
	git clone --mirror https://lore.kernel.org/lkml/4 lkml/git/4.git
	git clone --mirror https://lore.kernel.org/lkml/5 lkml/git/5.git
	git clone --mirror https://lore.kernel.org/lkml/6 lkml/git/6.git
	git clone --mirror https://lore.kernel.org/lkml/7 lkml/git/7.git
	git clone --mirror https://lore.kernel.org/lkml/8 lkml/git/8.git

	# If you have public-inbox 1.1+ installed, you may
	# initialize and index your mirror using the following commands:
	public-inbox-init -V2 lkml lkml/ https://lore.kernel.org/lkml \
		linux-kernel@vger.kernel.org
	public-inbox-index lkml

Example config snippet for mirrors

Newsgroup available over NNTP:
	nntp://nntp.lore.kernel.org/org.kernel.vger.linux-kernel


AGPL code for this site: git clone https://public-inbox.org/public-inbox.git