lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <201001232314.55425.mitov@issp.bas.bg>
Date:	Sat, 23 Jan 2010 23:14:55 +0200
From:	Marin Mitov <mitov@...p.bas.bg>
To:	FUJITA Tomonori <fujita.tomonori@....ntt.co.jp>
Cc:	linux-kernel@...r.kernel.org
Subject: [BUG] agpgart-amd64 not initialized in 2.6.33-rc5 if iommu=allowed in kernel command line

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 ||


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ