public inbox for linux-acpi@vger.kernel.org
 help / color / mirror / Atom feed
From: Balbir Singh <balbir@linux.vnet.ibm.com>
To: "Pallipadi, Venkatesh" <venkatesh.pallipadi@intel.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	linux-kernel@vger.kernel.org,
	Linux ACPI mailing list <linux-acpi@vger.kernel.org>,
	Intel E/100 mailing list <e1000-devel@lists.sourceforge.net>,
	Ingo Molnar <mingo@elte.hu>, Thomas Gleixner <tglx@linutronix.de>
Subject: Re: 2.6.24-rc8-mm1
Date: Fri, 18 Jan 2008 04:34:03 +0530	[thread overview]
Message-ID: <20080117230403.GA5411@balbir.in.ibm.com> (raw)
In-Reply-To: <924EFEDD5F540B4284297C4DC59F3DEE5E909A@orsmsx423.amr.corp.intel.com>

* Pallipadi, Venkatesh <venkatesh.pallipadi@intel.com> [2008-01-17 11:22:19]:

> 
> 
> >-----Original Message-----
> >From: Andrew Morton [mailto:akpm@linux-foundation.org] 
> >Sent: Thursday, January 17, 2008 10:40 AM
> >To: balbir@linux.vnet.ibm.com
> >Cc: linux-kernel@vger.kernel.org; Linux ACPI mailing list; 
> >Intel E/100 mailing list; Ingo Molnar; Thomas Gleixner; 
> >Pallipadi, Venkatesh
> >Subject: Re: 2.6.24-rc8-mm1
> >
> >On Thu, 17 Jan 2008 18:16:22 +0530 Balbir Singh 
> ><balbir@linux.vnet.ibm.com> wrote:
> >
> >> * Andrew Morton <akpm@linux-foundation.org> [2008-01-17 02:35:14]:
> >> 
> >> > 
> >> > 
> >ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/patches/2.6/2
> >.6.24-rc8/2.6.24-rc8-mm1/
> >> > 
> >> > - selinux is busted on one of my two selinux-enabled test machines.
> >> > 
> >> > - suspend-to-ram and suspend-to-disk are totally hosed on 
> >one of my test
> >> >   machines.  I guess I get to bisect this.
> >> > 
> >> > - git-nfsd is dropped due to conflicts with git-nfs
> >> > 
> >> > - git-newsetup is dropped due to conflicts with git-x86 (I think)
> >> > 
> >> > - git-perfmon is dropped due to conflicts with git-x86 (I think)
> >> > 
> >> > - git-kgdb is dropped due to conflicts with 
> >git-damn-near-everything
> >> > 
> >> > - git-block is dropped due to conflicts with the IDE tree
> >> > 
> >> > - kvm probably doesn't work properly because I couldn't be 
> >bothered fixing
> >> >   the conflicts between git-kvm and the driver tree
> >> > 
> >> > - the volume of rejects and build errors which are caused 
> >by subsystem
> >> >   maintainers fiddling with other people's stuff is quite 
> >out of control. 
> >> >   Something needs to happen here.
> >> 
> >> Hi, Andrew,
> >> 
> >> May be it was one of the conflicts, but my system fails to get
> >> ethernet working with this version. I see
> >> 
> >> e100: Intel(R) PRO/100 Network Driver, 3. 5.23-k4-NAPI
> >> e100: Copyright(c) 1999-2006 Intel Corporation
> >> ACPI: PCI Interrupt 0000:04:08.0[A] -> GSI 20 (level, low) -> IRQ 20
> >> modprobe:2584 conflicting cache attribute 50000000-50001000
> >> uncached<->default
> >> e100: 0000:04:08.0: e100_probe: Cannot map device registers, 
> >aborting.
> >> ACPI: PCI interrupt for device 0000:04:08.0 disabled
> >> e100: probe of 0000:04:08.0 failed with error -12
> >> 
> >It appears that the new PAT code didn't like e100's 
> >pci_iomap().  Venki, can you
> >take a look please?
> >
> 
> This seems similar to one problem we saw yday. May not be specific to
> e1000. May be at some generic pci code.
> 
> The problem is
> >> modprobe:2584 conflicting cache attribute 50000000-50001000
> >> uncached<->default
> 
> Some address range here is being mapped with conflicting types.
> Somewhere the range was mapped with default (write-back). Later
> pci_iomap() is mapping that region as uncacheable which is basically
> aliasing. PAT code detects the aliasing and fails the second uncacheable
> request which leads in the failure.
> 
> We are trying to find who exactly is mapping this with default at the
> beginning.
> Balbir: Full dmesg with debug boot parameter may help.
>

Venki/Andrew,

I think I found the root cause of the problem and a fix for it. 
The fix works for me.

Description
-----------

With the introduction of reserve_mattr() and free_mattr(), the ioremap* routines
started exploiting it. The recent 2.6.24-rc8-mm1 kernel has a peculiar problem
where in, certain devices disappear. In my case for example

e100: Intel(R) PRO/100 Network Driver, 3. 5.23-k4-NAPI
e100: Copyright(c) 1999-2006 Intel Corporation
ACPI: PCI Interrupt 0000:04:08.0[A] -> GSI 20 (level, low) -> IRQ 20
modprobe:2584 conflicting cache attribute 50000000-50001000 uncached<->default
e100: 0000:04:08.0: e100_probe: Cannot map device registers, aborting.
ACPI: PCI interrupt for device 0000:04:08.0 disabled

On further analysis, it was discovered that quirk_e100_interrupt() calls
ioremap(), which reserves memory attributes for the e100 card, but iounmap()
does not free it. The patch below removes the check fixes this problem.
It removes for the check of (p->flags >> 20), which checks for architecture
specific bits set on the vm_struct's flags member. ioremap() unconditionally
reserves memory attributes, iounmap() should undo it.


Signed-off-by: Balbir Singh <balbir@linux.vnet.ibm.com>
---

 arch/x86/mm/ioremap_32.c |    2 +-
 arch/x86/mm/ioremap_64.c |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff -puN arch/x86/mm/ioremap_32.c~fix-mattr-issue arch/x86/mm/ioremap_32.c
--- linux-2.6.24-rc8/arch/x86/mm/ioremap_32.c~fix-mattr-issue	2008-01-18 04:25:33.000000000 +0530
+++ linux-2.6.24-rc8-balbir/arch/x86/mm/ioremap_32.c	2008-01-18 04:25:53.000000000 +0530
@@ -220,7 +220,7 @@ void iounmap(volatile void __iomem *addr
 	}
 
 	/* Reset the direct mapping. Can block */
-	if (p->flags >> 20) {
+	if (p->flags) {
 		free_mattr(p->phys_addr, p->phys_addr + get_vm_area_size(p),
 		           p->flags>>20);
 		ioremap_change_attr(p->phys_addr, get_vm_area_size(p), 0);
diff -puN arch/x86/mm/ioremap_64.c~fix-mattr-issue arch/x86/mm/ioremap_64.c
--- linux-2.6.24-rc8/arch/x86/mm/ioremap_64.c~fix-mattr-issue	2008-01-18 04:25:33.000000000 +0530
+++ linux-2.6.24-rc8-balbir/arch/x86/mm/ioremap_64.c	2008-01-18 04:25:53.000000000 +0530
@@ -191,7 +191,7 @@ void iounmap(volatile void __iomem *addr
 	}
 
 	/* Reset the direct mapping. Can block */
-	if (p->flags >> 20) {
+	if (p->flags) {
 		free_mattr(p->phys_addr, p->phys_addr + get_vm_area_size(p),
 		           p->flags>>20);
 		ioremap_change_attr(p->phys_addr, get_vm_area_size(p), 0);
_
 
-- 
	Warm Regards,
	Balbir Singh
	Linux Technology Center
	IBM, ISTL

  parent reply	other threads:[~2008-01-17 23:04 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <20080117023514.9df393cf.akpm@linux-foundation.org>
2008-01-17 12:46 ` 2.6.24-rc8-mm1 Balbir Singh
2008-01-17 18:40   ` 2.6.24-rc8-mm1 Andrew Morton
2008-01-17 19:22     ` 2.6.24-rc8-mm1 Pallipadi, Venkatesh
2008-01-17 19:40       ` 2.6.24-rc8-mm1 Andrew Morton
2008-01-17 19:47         ` [E1000-devel] 2.6.24-rc8-mm1 Brandeburg, Jesse
2008-01-17 23:33         ` 2.6.24-rc8-mm1 Venki Pallipadi
2008-01-17 23:04       ` Balbir Singh [this message]
2008-01-18  1:42         ` 2.6.24-rc8-mm1 Siddha, Suresh B
2008-01-18  5:06           ` 2.6.24-rc8-mm1 Balbir Singh
2008-01-17 20:25     ` 2.6.24-rc8-mm1 Balbir Singh

Reply instructions:

You may reply publicly 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=20080117230403.GA5411@balbir.in.ibm.com \
    --to=balbir@linux.vnet.ibm.com \
    --cc=akpm@linux-foundation.org \
    --cc=e1000-devel@lists.sourceforge.net \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@elte.hu \
    --cc=tglx@linutronix.de \
    --cc=venkatesh.pallipadi@intel.com \
    /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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox