From: "Luck, Tony" <tony.luck@intel.com>
To: linux-ia64@vger.kernel.org
Subject: Running NUMA kernel on Tiger
Date: Thu, 28 Aug 2003 17:25:58 +0000 [thread overview]
Message-ID: <marc-linux-ia64-106209203611089@msgid-missing> (raw)
[-- Attachment #1: Type: text/plain, Size: 1043 bytes --]
In case anyone else would like to experment with NUMA code,
but doesn't have access to a NUMA machine ...
Here is a patch against 2.6.0test4 + ia64-030826 Mosberger patch that
will allow you to configure a kernel with:
CONFIG_NUMA=y
CONFIG_ACPI_NUMA=y
CONFIG_DISCONTIGMEM=y
CONFIG_VIRTUAL_MEM_MAP=y
and boot on a Tiger. You may need to change the "phony_srat"
initialization in drivers/acpi/tables.c to match the configuration
of your machine, the version in this patch defines memory below 4G
to be on node 0, and memory in the range 4G-8G to be on node 1.
Cpu 0 & 1 are on node 0, cpu 2 & 3 are on node 1.
This patch includes some extra fixes in addition to adding the SRAT table:
1) execute find_memory() after acpi_numa_init() [arch/ia64/kernel/setup.c]
2) Don't allocate memory using alloc_bootmem() in early acpi initializations
[drivers/acpi/tables.c]
3) Don't use any memory in a granule with a hole [arch/ia64/kernel/efi.c]
-Tony
[Thanks to Martin Hicks and Jesse Barnes for patches 1 & 2]
[-- Attachment #2: phonysrat.patch --]
[-- Type: application/octet-stream, Size: 3797 bytes --]
diff -ru linux-2.6.0-test4/arch/ia64/kernel/efi.c tiger-numa/arch/ia64/kernel/efi.c
--- linux-2.6.0-test4/arch/ia64/kernel/efi.c Fri Aug 22 16:51:04 2003
+++ tiger-numa/arch/ia64/kernel/efi.c Wed Aug 27 16:47:27 2003
@@ -324,7 +324,7 @@
check_md = q;
if (check_md->attribute & EFI_MEMORY_WB)
- trim_bottom(md, granule_addr);
+ trim_bottom(check_md, granule_addr);
if (check_md->phys_addr < granule_addr)
continue;
diff -ru linux-2.6.0-test4/arch/ia64/kernel/setup.c tiger-numa/arch/ia64/kernel/setup.c
--- linux-2.6.0-test4/arch/ia64/kernel/setup.c Fri Aug 22 16:52:22 2003
+++ tiger-numa/arch/ia64/kernel/setup.c Tue Aug 26 13:37:41 2003
@@ -372,7 +372,6 @@
strlcpy(saved_command_line, *cmdline_p, sizeof(saved_command_line));
efi_init();
- find_memory();
#ifdef CONFIG_ACPI_BOOT
/* Initialize the ACPI boot-time table parser */
@@ -386,6 +385,8 @@
# endif
#endif /* CONFIG_APCI_BOOT */
+ find_memory();
+
/* process SAL system table: */
ia64_sal_init(efi.sal_systab);
diff -ru linux-2.6.0-test4/drivers/acpi/tables.c tiger-numa/drivers/acpi/tables.c
--- linux-2.6.0-test4/drivers/acpi/tables.c Thu Aug 28 09:51:35 2003
+++ tiger-numa/drivers/acpi/tables.c Thu Aug 28 09:52:22 2003
@@ -69,7 +69,11 @@
static unsigned long sdt_pa; /* Physical Address */
static unsigned long sdt_count; /* Table count */
+#if 0
static struct acpi_table_sdt *sdt_entry;
+#else
+static struct acpi_table_sdt sdt_entry[ACPI_MAX_TABLES];
+#endif
void
acpi_table_print (
@@ -281,6 +285,41 @@
return 0;
}
+/*
+ * SRAT for multi-node simulation on Tiger:
+ * two nodes, two cpus on each, 0G<mem<4G on node 0, 4G<mem<8G on node 1
+ */
+struct {
+ struct acpi_table_srat s;
+ struct acpi_table_processor_affinity p[4];
+ struct acpi_table_memory_affinity m[2];
+} phony_srat = {
+ {
+ {
+ { 'S', 'R', 'A', 'T' },
+ 0,
+ 0,
+ 0,
+ { "OEMID" },
+ { "OEMTBL" },
+ 0,
+ { "asl" },
+ 0
+ },
+ 0,
+ 0L
+ },
+ {
+ {{ 0, 16 }, 0, 0xC0, { 1, 0 }, 0x18, "" },
+ {{ 0, 16 }, 0, 0xC2, { 1, 0 }, 0x18, "" },
+ {{ 0, 16 }, 1, 0xC4, { 1, 0 }, 0x18, "" },
+ {{ 0, 16 }, 1, 0xC6, { 1, 0 }, 0x18, "" },
+ },
+ {
+ {{ 1, 40 }, 0, "", 0, 0, 0, 1, 1, { 1, 0, 0 }, 0L },
+ {{ 1, 40 }, 1, "", 0, 1, 0, 1, 1, { 1, 0, 0 }, 0L },
+ }
+};
int __init
acpi_table_parse_madt_family (
@@ -298,6 +337,12 @@
if (!handler)
return -EINVAL;
+ if (id == ACPI_SRAT) {
+ madt = (void *)&phony_srat;
+ madt_end = (unsigned long) madt + sizeof(phony_srat);
+ goto do_parse;
+ }
+
/* Locate the MADT (if exists). There should only be one. */
for (i = 0; i < sdt_count; i++) {
@@ -321,6 +366,7 @@
madt_end = (unsigned long) madt + sdt_entry[i].size;
+do_parse:
/* Parse all entries looking for a match. */
entry = (acpi_table_entry_header *)
@@ -360,6 +406,11 @@
if (!handler)
return -EINVAL;
+ if (id == ACPI_SRAT) {
+ handler(ia64_tpa((unsigned long)&phony_srat), sizeof(phony_srat));
+ return 1;
+ }
+
for (i = 0; i < sdt_count; i++) {
if (sdt_entry[i].id != id)
continue;
@@ -425,11 +476,13 @@
sdt_count = ACPI_MAX_TABLES;
}
+#if 0
sdt_entry = alloc_bootmem(sdt_count * sizeof(struct acpi_table_sdt));
if (!sdt_entry) {
printk(KERN_ERR "ACPI: Could not allocate mem for SDT entries!\n");
return -ENOMEM;
}
+#endif
for (i = 0; i < sdt_count; i++)
sdt_entry[i].pa = (unsigned long) mapped_xsdt->entry[i];
@@ -477,11 +530,13 @@
sdt_count = ACPI_MAX_TABLES;
}
+#if 0
sdt_entry = alloc_bootmem(sdt_count * sizeof(struct acpi_table_sdt));
if (!sdt_entry) {
printk(KERN_ERR "ACPI: Could not allocate mem for SDT entries!\n");
return -ENOMEM;
}
+#endif
for (i = 0; i < sdt_count; i++)
sdt_entry[i].pa = (unsigned long) mapped_rsdt->entry[i];
reply other threads:[~2003-08-28 17:25 UTC|newest]
Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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=marc-linux-ia64-106209203611089@msgid-missing \
--to=tony.luck@intel.com \
--cc=linux-ia64@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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.