From: Bjorn Helgaas <bjorn.helgaas@hp.com>
To: Matt Domsch <Matt_Domsch@dell.com>
Cc: linux-ia64@vger.kernel.org, ak@suse.de,
openipmi-developer@lists.sourceforge.net, akpm@osdl.org,
"Tolentino, Matthew E" <matthew.e.tolentino@intel.com>,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH 2.6.15] ia64: use i386 dmi_scan.c
Date: Tue, 17 Jan 2006 17:17:03 -0700 [thread overview]
Message-ID: <200601171717.03192.bjorn.helgaas@hp.com> (raw)
In-Reply-To: <200601131724.42054.bjorn.helgaas@hp.com>
On Friday 13 January 2006 17:24, Bjorn Helgaas wrote:
> ... the
> DMI stuff crashes HP sx2000 (and probably sx1000) boxes, probably
> because of some memory attribute problem. So I'll have more
> feedback after I debug that ;-)
It *is* a memory attribute problem. The current code always calls
ioremap() on efi.smbios. The first problem is that this is a
physical address on x86, but a virtual address on ia64.
The second problem is that we don't check the supported attributes
for the SMBIOS table. On HP sx1000/sx2000, these tables are in system
memory, which doesn't support uncacheable access, so ioremap() does
the wrong thing.
The patch below addresses both problems (but I can't test the x86 EFI
change). I don't really like it, because the memory attribute checking
is not complete (it only checks the first page, not the whole range),
and there's already very similar code in acpi_os_map_memory(),
acpi_os_read_memory(), acpi_os_write_memory(), and efi_range_is_wc().
But it's a start, and maybe the consolidation could be done later.
Index: work-mm3/arch/i386/kernel/dmi_scan.c
===================================================================
--- work-mm3.orig/arch/i386/kernel/dmi_scan.c 2006-01-17 15:18:42.000000000 -0700
+++ work-mm3/arch/i386/kernel/dmi_scan.c 2006-01-17 16:58:11.000000000 -0700
@@ -39,9 +39,18 @@
void (*decode)(struct dmi_header *))
{
u8 *buf, *data;
- int i = 0;
+ int iomem = 1, i = 0;
- buf = dmi_ioremap(base, len);
+ if (efi_enabled) {
+ if (efi_mem_attributes(base & EFI_MEMORY_WB)) {
+ iomem = 0;
+ buf = (u8 *) phys_to_virt(base);
+ } else if (efi_mem_attributes(base & EFI_MEMORY_UC))
+ buf = dmi_ioremap(base, len);
+ else
+ buf = NULL;
+ } else
+ buf = dmi_ioremap(base, len);
if (buf == NULL)
return -1;
@@ -66,7 +75,8 @@
data += 2;
i++;
}
- dmi_iounmap(buf, len);
+ if (iomem)
+ dmi_iounmap(buf, len);
return 0;
}
@@ -216,19 +226,30 @@
int rc;
if (efi_enabled) {
- if (!efi.smbios)
+ unsigned long phys_addr = __pa(efi.smbios);
+ int iomem = 0;
+
+ if (!phys_addr)
goto out;
/* This is called as a core_initcall() because it isn't
* needed during early boot. This also means we can
* iounmap the space when we're done with it.
*/
- p = ioremap((unsigned long)efi.smbios, 0x10000);
+ if (efi_mem_attributes(phys_addr & EFI_MEMORY_WB))
+ p = (char *) phys_to_virt(phys_addr);
+ else if (efi_mem_attributes(phys_addr & EFI_MEMORY_UC)) {
+ iomem = 1;
+ p = ioremap(phys_addr, 0x10000);
+ } else
+ p = NULL;
+
if (p == NULL)
goto out;
rc = dmi_present(p + 0x10); /* offset of _DMI_ string */
- iounmap(p);
+ if (iomem)
+ iounmap(p);
if (!rc)
return;
}
Index: work-mm3/arch/i386/kernel/efi.c
===================================================================
--- work-mm3.orig/arch/i386/kernel/efi.c 2005-10-27 18:02:08.000000000 -0600
+++ work-mm3/arch/i386/kernel/efi.c 2006-01-17 17:10:20.000000000 -0700
@@ -391,7 +391,7 @@
printk(KERN_INFO " ACPI=0x%lx ", config_tables[i].table);
} else
if (efi_guidcmp(config_tables[i].guid, SMBIOS_TABLE_GUID) == 0) {
- efi.smbios = (void *) config_tables[i].table;
+ efi.smbios = __va(config_tables[i].table);
printk(KERN_INFO " SMBIOS=0x%lx ", config_tables[i].table);
} else
if (efi_guidcmp(config_tables[i].guid, HCDP_TABLE_GUID) == 0) {
next prev parent reply other threads:[~2006-01-18 0:17 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-01-04 22:16 [PATCH 2.6.15 1/2] ia64: use i386 dmi_scan.c Matt Domsch
2006-01-04 22:36 ` Alex Williamson
2006-01-04 23:29 ` Matt Domsch
2006-01-05 16:41 ` Bjorn Helgaas
2006-01-05 17:37 ` Matt Domsch
2006-01-05 17:54 ` Bjorn Helgaas
2006-01-06 0:02 ` Bjorn Helgaas
2006-01-06 17:15 ` Matt Domsch
2006-01-04 22:55 ` Alan Cox
2006-01-06 17:21 ` [PATCH 2.6.15] " Matt Domsch
2006-01-06 22:39 ` Matt Domsch
2006-01-14 0:24 ` Bjorn Helgaas
2006-01-14 0:45 ` Alan Cox
2006-01-14 1:19 ` Andi Kleen
2006-01-14 5:05 ` Bjorn Helgaas
2006-01-18 0:17 ` Bjorn Helgaas [this message]
2006-01-18 2:32 ` Andi Kleen
2006-01-18 15:53 ` Bjorn Helgaas
2006-01-18 17:29 ` Bjorn Helgaas
2006-01-18 18:11 ` [Openipmi-developer] " Matt Domsch
2006-01-19 20:10 ` [PATCH 0/5] ia64 ioremap, DMI, EFI system table Bjorn Helgaas
2006-01-19 20:12 ` [PATCH 1/5] EFI, /dev/mem: simplify efi_mem_attribute_range() Bjorn Helgaas
2006-01-19 20:12 ` [PATCH 2/5] ia64: ioremap: check EFI for valid memory attributes Bjorn Helgaas
2006-01-19 20:13 ` [PATCH 3/5] DMI: only ioremap stuff we actually need Bjorn Helgaas
2006-01-19 20:13 ` [PATCH 4/5] EFI: keep physical table addresses in efi structure Bjorn Helgaas
2006-01-19 20:14 ` [PATCH 5/5] ACPI: clean up memory attribute checking for map/read/write Bjorn Helgaas
2006-01-30 17:11 ` [Openipmi-developer] [PATCH 0/5] ia64 ioremap, DMI, EFI system table Matt Domsch
2006-03-17 23:54 ` [PATCH 2.6.15] ia64: use i386 dmi_scan.c Andrew Morton
2006-03-18 14:56 ` Matt Domsch
2006-03-18 15:43 ` Matt Domsch
2006-03-18 19:51 ` Andrew Morton
2006-01-06 19:03 Tolentino, Matthew E
2006-01-06 22:36 ` Matt Domsch
2006-01-19 14:19 Tolentino, Matthew E
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=200601171717.03192.bjorn.helgaas@hp.com \
--to=bjorn.helgaas@hp.com \
--cc=Matt_Domsch@dell.com \
--cc=ak@suse.de \
--cc=akpm@osdl.org \
--cc=linux-ia64@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=matthew.e.tolentino@intel.com \
--cc=openipmi-developer@lists.sourceforge.net \
/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;
as well as URLs for NNTP newsgroup(s).