rename arch/i386/pci/numa.c

rename arch/i386/pci/numa.c

Post by Matthew Dobso » Sun, 22 Sep 2002 10:10:06



Linus,
        This file is NUMA-Q specific...  This patch renames the file to a more
appropriate numaq.c, and also fixes the filenames one occurence
(arch/i386/pci/Makefile).

Please apply.

Cheers!

-Matt

[ pci_numa_rename-2.5.37.patch 8K ]
diff -Nur linux-2.5.37-vanilla/arch/i386/pci/Makefile linux-2.5.37-multiquad/arch/i386/pci/Makefile
--- linux-2.5.37-vanilla/arch/i386/pci/Makefile Fri Sep 20 08:20:30 2002
+++ linux-2.5.37-multiquad/arch/i386/pci/Makefile       Fri Sep 20 13:50:22 2002
@@ -3,8 +3,8 @@
 obj-$(CONFIG_PCI_BIOS)         += pcbios.o
 obj-$(CONFIG_PCI_DIRECT)       += direct.o

-ifdef  CONFIG_MULTIQUAD
-obj-y          += numa.o
+ifdef  CONFIG_X86_NUMAQ
+obj-y          += numaq.o
 else
 obj-y          += fixup.o

@@ -14,7 +14,7 @@
 obj-y          += legacy.o

-endif          # CONFIG_MULTIQUAD
+endif          # CONFIG_X86_NUMAQ
 obj-y          += irq.o common.o

 include $(TOPDIR)/Rules.make
diff -Nur linux-2.5.37-vanilla/arch/i386/pci/numa.c linux-2.5.37-multiquad/arch/i386/pci/numa.c
--- linux-2.5.37-vanilla/arch/i386/pci/numa.c   Fri Sep 20 08:20:19 2002
+++ linux-2.5.37-multiquad/arch/i386/pci/numa.c Wed Dec 31 16:00:00 1969
@@ -1,141 +0,0 @@
-/*
- * numa.c - Low-level PCI access for NUMA-Q machines
- */
-
-#include <linux/pci.h>
-#include <linux/init.h>
-#include "pci.h"
-
-#define BUS2QUAD(global) (mp_bus_id_to_node[global])
-#define BUS2LOCAL(global) (mp_bus_id_to_local[global])
-#define QUADLOCAL2BUS(quad,local) (quad_local_to_mp_bus_id[quad][local])
-
-#define PCI_CONF1_MQ_ADDRESS(bus, dev, fn, reg) \
-       (0x80000000 | (BUS2LOCAL(bus) << 16) | (dev << 11) | (fn << 8) | (reg & ~3))
-
-static int __pci_conf1_mq_read (int seg, int bus, int dev, int fn, int reg, int len, u32 *value)
-{
-       unsigned long flags;
-
-       if (!value || (bus > 255) || (dev > 31) || (fn > 7) || (reg > 255))
-               return -EINVAL;
-
-       spin_lock_irqsave(&pci_config_lock, flags);
-
-       outl_quad(PCI_CONF1_MQ_ADDRESS(bus, dev, fn, reg), 0xCF8, BUS2QUAD(bus));
-
-       switch (len) {
-       case 1:
-               *value = inb_quad(0xCFC + (reg & 3), BUS2QUAD(bus));
-               break;
-       case 2:
-               *value = inw_quad(0xCFC + (reg & 2), BUS2QUAD(bus));
-               break;
-       case 4:
-               *value = inl_quad(0xCFC, BUS2QUAD(bus));
-               break;
-       }
-
-       spin_unlock_irqrestore(&pci_config_lock, flags);
-
-       return 0;
-}
-
-static int __pci_conf1_mq_write (int seg, int bus, int dev, int fn, int reg, int len, u32 value)
-{
-       unsigned long flags;
-
-       if ((bus > 255) || (dev > 31) || (fn > 7) || (reg > 255))
-               return -EINVAL;
-
-       spin_lock_irqsave(&pci_config_lock, flags);
-
-       outl_quad(PCI_CONF1_MQ_ADDRESS(bus, dev, fn, reg), 0xCF8, BUS2QUAD(bus));
-
-       switch (len) {
-       case 1:
-               outb_quad((u8)value, 0xCFC + (reg & 3), BUS2QUAD(bus));
-               break;
-       case 2:
-               outw_quad((u16)value, 0xCFC + (reg & 2), BUS2QUAD(bus));
-               break;
-       case 4:
-               outl_quad((u32)value, 0xCFC, BUS2QUAD(bus));
-               break;
-       }
-
-       spin_unlock_irqrestore(&pci_config_lock, flags);
-
-       return 0;
-}
-
-#undef PCI_CONF1_MQ_ADDRESS
-
-static int pci_conf1_mq_read(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 *value)
-{
-       return __pci_conf1_mq_read(0, bus->number, PCI_SLOT(devfn),
-               PCI_FUNC(devfn), where, size, value);
-}
-
-static int pci_conf1_mq_write(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 value)
-{
-       return __pci_conf1_mq_write(0, bus->number, PCI_SLOT(devfn),
-               PCI_FUNC(devfn), where, size, value);
-}
-
-static struct pci_ops pci_direct_conf1_mq = {
-       read:   pci_conf1_mq_read,
-       write:  pci_conf1_mq_write
-};
-
-
-static void __devinit pci_fixup_i450nx(struct pci_dev *d)
-{
-       /*
-        * i450NX -- Find and scan all secondary buses on all PXB's.
-        */
-       int pxb, reg;
-       u8 busno, suba, subb;
-       int quad = BUS2QUAD(d->bus->number);
-
-       printk("PCI: Searching for i450NX host bridges on %s\n", d->slot_name);
-       reg = 0xd0;
-       for(pxb=0; pxb<2; pxb++) {
-               pci_read_config_byte(d, reg++, &busno);
-               pci_read_config_byte(d, reg++, &suba);
-               pci_read_config_byte(d, reg++, &subb);
-               DBG("i450NX PXB %d: %02x/%02x/%02x\n", pxb, busno, suba, subb);
-               if (busno)
-                       pci_scan_bus(QUADLOCAL2BUS(quad,busno), pci_root_ops, NULL);    /* Bus A */
-               if (suba < subb)
-                       pci_scan_bus(QUADLOCAL2BUS(quad,suba+1), pci_root_ops, NULL);   /* Bus B */
-       }
-       pcibios_last_bus = -1;
-}
-
-struct pci_fixup pcibios_fixups[] = {
-       { PCI_FIXUP_HEADER,     PCI_VENDOR_ID_INTEL,    PCI_DEVICE_ID_INTEL_82451NX,    pci_fixup_i450nx },
-};
-
-static int __init pci_numa_init(void)
-{
-       int quad;
-
-       pci_root_ops = &pci_direct_conf1_mq;
-
-       if (pcibios_scanned++)
-               return 0;
-
-       pci_root_bus = pcibios_scan_root(0);
-       if (clustered_apic_mode && (numnodes > 1)) {
-               for (quad = 1; quad < numnodes; ++quad) {
-                       printk("Scanning PCI bus %d for quad %d\n",
-                               QUADLOCAL2BUS(quad,0), quad);
-                       pci_scan_bus(QUADLOCAL2BUS(quad,0),
-                               pci_root_ops, NULL);
-               }
-       }
-       return 0;
-}
-
-subsys_initcall(pci_numa_init);
diff -Nur linux-2.5.37-vanilla/arch/i386/pci/numaq.c linux-2.5.37-multiquad/arch/i386/pci/numaq.c
--- linux-2.5.37-vanilla/arch/i386/pci/numaq.c  Wed Dec 31 16:00:00 1969
+++ linux-2.5.37-multiquad/arch/i386/pci/numaq.c        Fri Sep 20 13:28:30 2002
@@ -0,0 +1,141 @@
+/*
+ * numa.c - Low-level PCI access for NUMA-Q machines
+ */
+
+#include <linux/pci.h>
+#include <linux/init.h>
+#include "pci.h"
+
+#define BUS2QUAD(global) (mp_bus_id_to_node[global])
+#define BUS2LOCAL(global) (mp_bus_id_to_local[global])
+#define QUADLOCAL2BUS(quad,local) (quad_local_to_mp_bus_id[quad][local])
+
+#define PCI_CONF1_MQ_ADDRESS(bus, dev, fn, reg) \
+       (0x80000000 | (BUS2LOCAL(bus) << 16) | (dev << 11) | (fn << 8) | (reg & ~3))
+
+static int __pci_conf1_mq_read (int seg, int bus, int dev, int fn, int reg, int len, u32 *value)
+{
+       unsigned long flags;
+
+       if (!value || (bus > 255) || (dev > 31) || (fn > 7) || (reg > 255))
+               return -EINVAL;
+
+       spin_lock_irqsave(&pci_config_lock, flags);
+
+       outl_quad(PCI_CONF1_MQ_ADDRESS(bus, dev, fn, reg), 0xCF8, BUS2QUAD(bus));
+
+       switch (len) {
+       case 1:
+               *value = inb_quad(0xCFC + (reg & 3), BUS2QUAD(bus));
+               break;
+       case 2:
+               *value = inw_quad(0xCFC + (reg & 2), BUS2QUAD(bus));
+               break;
+       case 4:
+               *value = inl_quad(0xCFC, BUS2QUAD(bus));
+               break;
+       }
+
+       spin_unlock_irqrestore(&pci_config_lock, flags);
+
+       return 0;
+}
+
+static int __pci_conf1_mq_write (int seg, int bus, int dev, int fn, int reg, int len, u32 value)
+{
+       unsigned long flags;
+
+       if ((bus > 255) || (dev > 31) || (fn > 7) || (reg > 255))
+               return -EINVAL;
+
+       spin_lock_irqsave(&pci_config_lock, flags);
+
+       outl_quad(PCI_CONF1_MQ_ADDRESS(bus, dev, fn, reg), 0xCF8, BUS2QUAD(bus));
+
+       switch (len) {
+       case 1:
+               outb_quad((u8)value, 0xCFC + (reg & 3), BUS2QUAD(bus));
+               break;
+       case 2:
+               outw_quad((u16)value, 0xCFC + (reg & 2), BUS2QUAD(bus));
+               break;
+       case 4:
+               outl_quad((u32)value, 0xCFC, BUS2QUAD(bus));
+               break;
+       }
+
+       spin_unlock_irqrestore(&pci_config_lock, flags);
+
+       return 0;
+}
+
+#undef PCI_CONF1_MQ_ADDRESS
+
+static int pci_conf1_mq_read(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 *value)
+{
+       return __pci_conf1_mq_read(0, bus->number, PCI_SLOT(devfn),
+               PCI_FUNC(devfn), where, size, value);
+}
+
+static int pci_conf1_mq_write(struct pci_bus *bus, unsigned int devfn, int where, int size, u32 value)
+{
+       return __pci_conf1_mq_write(0, bus->number, PCI_SLOT(devfn),
+               PCI_FUNC(devfn), where, size, value);
+}
+
+static struct pci_ops pci_direct_conf1_mq = {
+       read:   pci_conf1_mq_read,
+       write:  pci_conf1_mq_write
+};
+
+
+static void __devinit pci_fixup_i450nx(struct pci_dev *d)
+{
+       /*
+        * i450NX -- Find and scan all secondary buses on all PXB's.
+        */
+       int pxb, reg;
+       u8 busno, suba, subb;
+       int quad = BUS2QUAD(d->bus->number);
+
+       printk("PCI: Searching for i450NX host bridges on %s\n", d->slot_name);
+       reg = 0xd0;
+       for(pxb=0; pxb<2; pxb++) {
+               pci_read_config_byte(d, reg++, &busno);
+               pci_read_config_byte(d, reg++, &suba);
+               pci_read_config_byte(d, reg++, &subb);
+               DBG("i450NX PXB %d: %02x/%02x/%02x\n", pxb, busno, suba, subb);
+               if (busno)
+                       pci_scan_bus(QUADLOCAL2BUS(quad,busno), pci_root_ops, NULL);    /* Bus A */
+               if (suba < subb)
+                       pci_scan_bus(QUADLOCAL2BUS(quad,suba+1), pci_root_ops, NULL);   /* Bus B */
+       }
+       pcibios_last_bus = -1;
+}
+
+struct pci_fixup pcibios_fixups[] = {
+       { PCI_FIXUP_HEADER,     PCI_VENDOR_ID_INTEL,    PCI_DEVICE_ID_INTEL_82451NX,    pci_fixup_i450nx },
+};
+
+static int __init pci_numa_init(void)
+{
+       int quad;
+
+       pci_root_ops = &pci_direct_conf1_mq;
+
+       if (pcibios_scanned++)
+               return 0;
+
+       pci_root_bus = pcibios_scan_root(0);
+       if (clustered_apic_mode && (numnodes > 1)) {
+               for (quad = 1; quad < numnodes; ++quad) {
+                       printk("Scanning PCI bus %d for quad %d\n",
+                               QUADLOCAL2BUS(quad,0), quad);
+                       pci_scan_bus(QUADLOCAL2BUS(quad,0),
+                               pci_root_ops, NULL);
+               }
+       }
+       return 0;
+}
+
+subsys_initcall(pci_numa_init);

 
 
 

1. Trivial patch: linux-2.5.33/arch/i386/pci/irq.c - pcibios_fixup_irqs should be static

        pcibios_fixup_irqs declared in linux-2.5.33/arch/i386/pci/irq.c
is only called from within that file.  So, it should be declared static
(as it already is in the linux-2.5.33/arch/i386/pci/visws.c version).
The following patch makes that change.  Do you want to integrate this
and forward it to Linus the next time you submit some changes, or is
there some other course of action that you'd prefer?

--
Adam J. Richter     __     ______________   575 Oroville Road

+1 408 309-6081         | g g d r a s i l   United States of America
                         "Free Software For The Rest Of Us."

  irq.static
< 1K Download

2. S.u.S.E Linux 6.1 and no PPP-connection

3. Buglet in 2.4.19's arch/i386/kernel/pci-pc.c

4. RH on Intel CA810 motherboard?

5. CONFIG_MULTIQUAD arch/i386/pci cleanup

6. NETWORK TROUBLESHOUTING 5.0.2, 5.2.0, HP J2970A

7. New: i386 NUMA does not work on non x440/Summit

8. mod_rewrite to change url

9. Patches to enable Linux on a multiquad NUMA system (32 proc i386)

10. arch/i386/kernel/entry.S

11. one line fix in arch/i386/Kconfig

12. arch/i386/kernel/srat.c cast warning fix

13. i386-arch fixes/enhancements