Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!

Bug 155805

Summary: 2.6.18-r2 forces IOMMU (and, thus AGP) on amd64
Product: Gentoo Linux Reporter: Dmitri Pogosian <pogosyan>
Component: [OLD] Core systemAssignee: Gentoo Kernel Bug Wranglers and Kernel Maintainers <kernel>
Status: RESOLVED UPSTREAM    
Severity: normal CC: decibels.2862, stolz
Priority: High    
Version: 2006.1   
Hardware: AMD64   
OS: Linux   
Whiteboard:
Package list:
Runtime testing required: ---

Description Dmitri Pogosian 2006-11-20 13:34:29 UTC
In 2.6.18 kernel the ability to switch off IOMMU is disabled.  From /usr/src/linux-2.6.18-gentoo-r2/arch/x86_64/Kconfig

# Mark as embedded because too many people got it wrong.
# The code disables itself when not needed.
config IOMMU
        bool "IOMMU support" if EMBEDDED
        default y

The result is that IOMMU is forced and kernel side AGP is forced.  This have several reprecussions

1. Inability to use AGP provided by binary drivers. Both Nvidia and ATI are affected, with
   ATI drivers reported to fail.  

2. In my case, I have a Celestica based quad-Opteron system with no AGP bus and 32Gb RAM
    The stable memory management on it required delicate choice of BIOS and kernel  parameters, in particular, I experimentally found that I need AGP and IOMMU disabled for stability.  Perhaps it is a buggy BIOS, but Celestica is out of business so the BIOS is here to stay.   

I  know that this comes from the Linux kernel maintainance, not Gentoo, but I still consider it
an unfortunate bug. Since Gentoo is a distribution that provides a final system for the end users, including those using binary drivers, I think there is a case for taking initiative and restoring IOMMU configurability.  It does not seem that the reason 'Many people get it wrong'
has any technical aspects to it.

Solution would be to delete  'if EMBEDDED' flag
Comment 1 Jakub Moc (RETIRED) gentoo-dev 2006-11-20 14:30:59 UTC
> I  know that this comes from the Linux kernel maintainance, not Gentoo, but I
> still consider it an unfortunate bug.

So why don't you complain upstream?
Comment 2 Daniel Drake (RETIRED) gentoo-dev 2006-11-20 14:54:38 UTC
Please take this upstream. This change occurred in commit a813ce432f27c4f5011c7b5ac9d2bbbfeb41d9a7 by Andi Kleen. You should make sure he is aware of the problems you listed above.
Comment 3 Dmitri Pogosian 2006-11-20 15:14:41 UTC
Who is Andy Klein, how do I make him aware ?
What is upstream for this problem ? 
Comment 4 Daniel Drake (RETIRED) gentoo-dev 2006-11-20 15:57:23 UTC
Sorry, should have been more specific. Write a plain-text mail to ak@suse.de with linux-kernel@vger.kernel.org on CC. Explain the issues in that mail (don't just post a link to this bug). Focus mainly on the memory issues because kernel people don't really care for of out-of-kernel modules...

If any patches do come out of this, feel free to put a pointer here and I'll consider them for inclusion.
Comment 5 Decibels 2006-12-30 09:34:46 UTC
I know this has been marked: RESOLVED UPSTREAM
But is there any resolution to this yet? Have you gotten a response  Dmitri Pogosian? I have been using the 2.6.15 for quite awhile and have always had to disable IOMMU on my amd64 system to get the video to work. Just upgraded to the 2.6.18 and not having the option to disable IOMMU sucks.

Disabled the 'embedded' on the IOMMU and now everything works!! Still able to use agpgart so only IOMMU enabled was the problem.

Daniel your quite involved with the kernel development. Is there a good reason for not letting us have the option to disable it without having to modify the Kconfig file? 

Thanks 
Comment 6 Daniel Drake (RETIRED) gentoo-dev 2006-12-30 15:06:42 UTC
You don't have to modify the kconfig file, you can enable EMBEDDED then disable IOMMU.

Yes, apparently there is a good reason: the commit which made the option more hidden says that many people got it wrong - i.e. they said N when they meant Y. If you don't feel that is a good enough reason then it needs to be discussed with Andi Kleen, I'm not really in a position to comment.

If you are unable to use video with IOMMU enabled and you aren't using any binary drivers then you should file a new bug as that is a real issue.
Comment 7 Decibels 2006-12-30 15:24:59 UTC
Thanks Daniel, you always respond with good information. I ran into what I thought was grub problems, but looks like it was the 2.6.18 kernel not accepting commands passed from grub that it used to on at least as of 2.6.15.: hdc=ide-cd and ide#=ata###. Anyway took me little to see where the problem was - ie grub, kernel or my .config.

I had tried the 'nv' driver, but that was earlier when thinking iommu was the culprit right after grub. And I tried passing iommu=no on kernel, but again that was before found the other 'now' offending kernel options. 

I DID have to disable iommu to get nvidia drivers to work! Since everything is working now. I will go back and recompile the kernel with IOMMU enabled and see if iommu=no works passing to kernel,.... Then if can't even get 'nv' driver to work will file bug report. 

Thanks for the feedback. 

Comment 8 Decibels 2006-12-31 10:08:22 UTC
FYI: Can't disable IOMMU via passing kernel param (ie iommu=off)

As suspected, if iommu enabled works fine with 'nv' driver, but not binary.
I was wrong and it is iommu=off and not 'no', but that still doesn't work.
Tried various parms from the Docs and only one that would boot with the binary
was iommu=noapeture, but have to use higher resolution to use desktop (too small).

So Disabling IOMMU in Kconfig is still the only 'good' option if want to use the 
binary driver. Don't think it would do any good writing a kernel bug unless 
'iommu=off' is suppose to work on AMD64 systems. It sure didn't work here.
If that worked could use either nv or binary with quick change in xorg.conf.
Comment 9 Decibels 2006-12-31 10:18:39 UTC
Take part of that back: iommu=noaperture seems to be okay. Readjust the screen if want. Check dmesg:
agpgart: Detected AGP bridge 0
agpgart: Setting up Nforce3 AGP.
agpgart: AGP aperture is 32M @ 0xf0000000
Linux agpgart interface v0.101 (c) Dave Jones
agpgart: Found an AGP 3.0 compliant device at 0000:00:00.0.
agpgart: Putting AGP V3 device at 0000:00:00.0 into 8x mode
agpgart: Putting AGP V3 device at 0000:01:00.0 into 8x mode

So guess most people could live with that. But still can't get iommu=off to work.
I'm done, no sense adding to this, cause I'm getting off topic. 
Should I file kernel bug for the iommu=off if that is still suppose to work?!