Commit 733abe4fff3afa13e301bc8bc5bee9aac4b59fdc

Authored by Linus Torvalds

Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/pci-2.6

* master.kernel.org:/pub/scm/linux/kernel/git/gregkh/pci-2.6:
  PCI: Make PCI device numa-node attribute visible in sysfs
  PCI: add systems for automatic breadth-first device sorting
  PCI: PCI devices get assigned redundant IRQs
  PCI: Make CARDBUS_MEM_SIZE and CARDBUS_IO_SIZE boot options
  PCI: pci.txt fix __devexit() usage
  PCI/sysfs/kobject kernel-doc fixes

Showing 11 changed files Side-by-side Diff

Documentation/kernel-parameters.txt
... ... @@ -1275,6 +1275,12 @@
1275 1275 This sorting is done to get a device
1276 1276 order compatible with older (<= 2.4) kernels.
1277 1277 nobfsort Don't sort PCI devices into breadth-first order.
  1278 + cbiosize=nn[KMG] The fixed amount of bus space which is
  1279 + reserved for the CardBus bridge's IO window.
  1280 + The default value is 256 bytes.
  1281 + cbmemsize=nn[KMG] The fixed amount of bus space which is
  1282 + reserved for the CardBus bridge's memory
  1283 + window. The default value is 64 megabytes.
1278 1284  
1279 1285 pcmv= [HW,PCMCIA] BadgePAD 4
1280 1286  
Documentation/pci.txt
... ... @@ -205,8 +205,8 @@
205 205 exclusively called by the probe() routine, can be marked __devinit.
206 206 Ditto for remove() and __devexit.
207 207  
208   - o If mydriver_probe() is marked with __devinit(), then all address
209   - references to mydriver_probe must use __devexit_p(mydriver_probe)
  208 + o If mydriver_remove() is marked with __devexit(), then all address
  209 + references to mydriver_remove must use __devexit_p(mydriver_remove)
210 210 (in the struct pci_driver declaration for example).
211 211 __devexit_p() will generate the function name _or_ NULL if the
212 212 function will be discarded. For an example, see drivers/net/tg3.c.
arch/i386/pci/common.c
... ... @@ -191,6 +191,94 @@
191 191 DMI_MATCH(DMI_PRODUCT_NAME, "PowerEdge 2950"),
192 192 },
193 193 },
  194 + {
  195 + .callback = set_bf_sort,
  196 + .ident = "HP ProLiant BL20p G3",
  197 + .matches = {
  198 + DMI_MATCH(DMI_SYS_VENDOR, "HP"),
  199 + DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant BL20p G3"),
  200 + },
  201 + },
  202 + {
  203 + .callback = set_bf_sort,
  204 + .ident = "HP ProLiant BL20p G4",
  205 + .matches = {
  206 + DMI_MATCH(DMI_SYS_VENDOR, "HP"),
  207 + DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant BL20p G4"),
  208 + },
  209 + },
  210 + {
  211 + .callback = set_bf_sort,
  212 + .ident = "HP ProLiant BL30p G1",
  213 + .matches = {
  214 + DMI_MATCH(DMI_SYS_VENDOR, "HP"),
  215 + DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant BL30p G1"),
  216 + },
  217 + },
  218 + {
  219 + .callback = set_bf_sort,
  220 + .ident = "HP ProLiant BL25p G1",
  221 + .matches = {
  222 + DMI_MATCH(DMI_SYS_VENDOR, "HP"),
  223 + DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant BL25p G1"),
  224 + },
  225 + },
  226 + {
  227 + .callback = set_bf_sort,
  228 + .ident = "HP ProLiant BL35p G1",
  229 + .matches = {
  230 + DMI_MATCH(DMI_SYS_VENDOR, "HP"),
  231 + DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant BL35p G1"),
  232 + },
  233 + },
  234 + {
  235 + .callback = set_bf_sort,
  236 + .ident = "HP ProLiant BL45p G1",
  237 + .matches = {
  238 + DMI_MATCH(DMI_SYS_VENDOR, "HP"),
  239 + DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant BL45p G1"),
  240 + },
  241 + },
  242 + {
  243 + .callback = set_bf_sort,
  244 + .ident = "HP ProLiant BL45p G2",
  245 + .matches = {
  246 + DMI_MATCH(DMI_SYS_VENDOR, "HP"),
  247 + DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant BL45p G2"),
  248 + },
  249 + },
  250 + {
  251 + .callback = set_bf_sort,
  252 + .ident = "HP ProLiant BL460c G1",
  253 + .matches = {
  254 + DMI_MATCH(DMI_SYS_VENDOR, "HP"),
  255 + DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant BL460c G1"),
  256 + },
  257 + },
  258 + {
  259 + .callback = set_bf_sort,
  260 + .ident = "HP ProLiant BL465c G1",
  261 + .matches = {
  262 + DMI_MATCH(DMI_SYS_VENDOR, "HP"),
  263 + DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant BL465c G1"),
  264 + },
  265 + },
  266 + {
  267 + .callback = set_bf_sort,
  268 + .ident = "HP ProLiant BL480c G1",
  269 + .matches = {
  270 + DMI_MATCH(DMI_SYS_VENDOR, "HP"),
  271 + DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant BL480c G1"),
  272 + },
  273 + },
  274 + {
  275 + .callback = set_bf_sort,
  276 + .ident = "HP ProLiant BL685c G1",
  277 + .matches = {
  278 + DMI_MATCH(DMI_SYS_VENDOR, "HP"),
  279 + DMI_MATCH(DMI_PRODUCT_NAME, "ProLiant BL685c G1"),
  280 + },
  281 + },
194 282 {}
195 283 };
196 284  
drivers/pci/pci-driver.c
... ... @@ -415,6 +415,7 @@
415 415 * __pci_register_driver - register a new pci driver
416 416 * @drv: the driver structure to register
417 417 * @owner: owner module of drv
  418 + * @mod_name: module name string
418 419 *
419 420 * Adds the driver structure to the list of registered drivers.
420 421 * Returns a negative value on error, otherwise 0.
drivers/pci/pci-sysfs.c
... ... @@ -143,7 +143,15 @@
143 143 return sprintf (buf, "%u\n", atomic_read(&pdev->enable_cnt));
144 144 }
145 145  
  146 +#ifdef CONFIG_NUMA
146 147 static ssize_t
  148 +numa_node_show(struct device *dev, struct device_attribute *attr, char *buf)
  149 +{
  150 + return sprintf (buf, "%d\n", dev->numa_node);
  151 +}
  152 +#endif
  153 +
  154 +static ssize_t
147 155 msi_bus_show(struct device *dev, struct device_attribute *attr, char *buf)
148 156 {
149 157 struct pci_dev *pdev = to_pci_dev(dev);
... ... @@ -194,6 +202,9 @@
194 202 __ATTR_RO(irq),
195 203 __ATTR_RO(local_cpus),
196 204 __ATTR_RO(modalias),
  205 +#ifdef CONFIG_NUMA
  206 + __ATTR_RO(numa_node),
  207 +#endif
197 208 __ATTR(enable, 0600, is_enabled_show, is_enabled_store),
198 209 __ATTR(broken_parity_status,(S_IRUGO|S_IWUSR),
199 210 broken_parity_status_show,broken_parity_status_store),
... ... @@ -21,6 +21,12 @@
21 21  
22 22 unsigned int pci_pm_d3_delay = 10;
23 23  
  24 +#define DEFAULT_CARDBUS_IO_SIZE (256)
  25 +#define DEFAULT_CARDBUS_MEM_SIZE (64*1024*1024)
  26 +/* pci=cbmemsize=nnM,cbiosize=nn can override this */
  27 +unsigned long pci_cardbus_io_size = DEFAULT_CARDBUS_IO_SIZE;
  28 +unsigned long pci_cardbus_mem_size = DEFAULT_CARDBUS_MEM_SIZE;
  29 +
24 30 /**
25 31 * pci_bus_max_busnr - returns maximum PCI bus number of given bus' children
26 32 * @bus: pointer to PCI bus structure to search
... ... @@ -1300,7 +1306,7 @@
1300 1306  
1301 1307 /**
1302 1308 * pci_select_bars - Make BAR mask from the type of resource
1303   - * @pdev: the PCI device for which BAR mask is made
  1309 + * @dev: the PCI device for which BAR mask is made
1304 1310 * @flags: resource type mask to be selected
1305 1311 *
1306 1312 * This helper routine makes bar mask from the type of resource.
... ... @@ -1333,6 +1339,10 @@
1333 1339 if (*str && (str = pcibios_setup(str)) && *str) {
1334 1340 if (!strcmp(str, "nomsi")) {
1335 1341 pci_no_msi();
  1342 + } else if (!strncmp(str, "cbiosize=", 9)) {
  1343 + pci_cardbus_io_size = memparse(str + 9, &str);
  1344 + } else if (!strncmp(str, "cbmemsize=", 10)) {
  1345 + pci_cardbus_mem_size = memparse(str + 10, &str);
1336 1346 } else {
1337 1347 printk(KERN_ERR "PCI: Unknown option `%s'\n",
1338 1348 str);
drivers/pci/setup-bus.c
... ... @@ -36,13 +36,6 @@
36 36  
37 37 #define ROUND_UP(x, a) (((x) + (a) - 1) & ~((a) - 1))
38 38  
39   -/*
40   - * FIXME: IO should be max 256 bytes. However, since we may
41   - * have a P2P bridge below a cardbus bridge, we need 4K.
42   - */
43   -#define CARDBUS_IO_SIZE (256)
44   -#define CARDBUS_MEM_SIZE (64*1024*1024)
45   -
46 39 static void __devinit
47 40 pbus_assign_resources_sorted(struct pci_bus *bus)
48 41 {
49 42  
... ... @@ -415,12 +408,12 @@
415 408 * Reserve some resources for CardBus. We reserve
416 409 * a fixed amount of bus space for CardBus bridges.
417 410 */
418   - b_res[0].start = CARDBUS_IO_SIZE;
419   - b_res[0].end = b_res[0].start + CARDBUS_IO_SIZE - 1;
  411 + b_res[0].start = pci_cardbus_io_size;
  412 + b_res[0].end = b_res[0].start + pci_cardbus_io_size - 1;
420 413 b_res[0].flags |= IORESOURCE_IO;
421 414  
422   - b_res[1].start = CARDBUS_IO_SIZE;
423   - b_res[1].end = b_res[1].start + CARDBUS_IO_SIZE - 1;
  415 + b_res[1].start = pci_cardbus_io_size;
  416 + b_res[1].end = b_res[1].start + pci_cardbus_io_size - 1;
424 417 b_res[1].flags |= IORESOURCE_IO;
425 418  
426 419 /*
427 420  
428 421  
... ... @@ -440,16 +433,16 @@
440 433 * twice the size.
441 434 */
442 435 if (ctrl & PCI_CB_BRIDGE_CTL_PREFETCH_MEM0) {
443   - b_res[2].start = CARDBUS_MEM_SIZE;
444   - b_res[2].end = b_res[2].start + CARDBUS_MEM_SIZE - 1;
  436 + b_res[2].start = pci_cardbus_mem_size;
  437 + b_res[2].end = b_res[2].start + pci_cardbus_mem_size - 1;
445 438 b_res[2].flags |= IORESOURCE_MEM | IORESOURCE_PREFETCH;
446 439  
447   - b_res[3].start = CARDBUS_MEM_SIZE;
448   - b_res[3].end = b_res[3].start + CARDBUS_MEM_SIZE - 1;
  440 + b_res[3].start = pci_cardbus_mem_size;
  441 + b_res[3].end = b_res[3].start + pci_cardbus_mem_size - 1;
449 442 b_res[3].flags |= IORESOURCE_MEM;
450 443 } else {
451   - b_res[3].start = CARDBUS_MEM_SIZE * 2;
452   - b_res[3].end = b_res[3].start + CARDBUS_MEM_SIZE * 2 - 1;
  444 + b_res[3].start = pci_cardbus_mem_size * 2;
  445 + b_res[3].end = b_res[3].start + pci_cardbus_mem_size * 2 - 1;
453 446 b_res[3].flags |= IORESOURCE_MEM;
454 447 }
455 448 }
drivers/pci/setup-irq.c
... ... @@ -24,7 +24,7 @@
24 24 int (*map_irq)(struct pci_dev *, u8, u8))
25 25 {
26 26 u8 pin, slot;
27   - int irq;
  27 + int irq = 0;
28 28  
29 29 /* If this device is not on the primary bus, we need to figure out
30 30 which interrupt pin it will come in on. We know which slot it
31 31  
32 32  
... ... @@ -33,16 +33,18 @@
33 33 apply the swizzle function. */
34 34  
35 35 pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin);
36   - /* Cope with 0 and illegal. */
37   - if (pin == 0 || pin > 4)
  36 + /* Cope with illegal. */
  37 + if (pin > 4)
38 38 pin = 1;
39 39  
40   - /* Follow the chain of bridges, swizzling as we go. */
41   - slot = (*swizzle)(dev, &pin);
  40 + if (pin != 0) {
  41 + /* Follow the chain of bridges, swizzling as we go. */
  42 + slot = (*swizzle)(dev, &pin);
42 43  
43   - irq = (*map_irq)(dev, slot, pin);
44   - if (irq == -1)
45   - irq = 0;
  44 + irq = (*map_irq)(dev, slot, pin);
  45 + if (irq == -1)
  46 + irq = 0;
  47 + }
46 48 dev->irq = irq;
47 49  
48 50 pr_debug("PCI: fixup irq: (%s) got %d\n",
... ... @@ -54,7 +54,7 @@
54 54 /**
55 55 * add_to_collection - add buffer to a collection
56 56 * @buffer: buffer to be added
57   - * @node inode of set to add to
  57 + * @node: inode of set to add to
58 58 */
59 59  
60 60 static inline void
... ... @@ -854,6 +854,9 @@
854 854 #define PCIPCI_ALIMAGIK 32 /* Need low latency setting */
855 855 #define PCIAGP_FAIL 64 /* No PCI to AGP DMA */
856 856  
  857 +extern unsigned long pci_cardbus_io_size;
  858 +extern unsigned long pci_cardbus_mem_size;
  859 +
857 860 #endif /* __KERNEL__ */
858 861 #endif /* LINUX_PCI_H */
... ... @@ -326,6 +326,7 @@
326 326 /**
327 327 * kobject_rename - change the name of an object
328 328 * @kobj: object in question.
  329 + * @new_parent: object's new parent
329 330 * @new_name: object's new name
330 331 */
331 332