Merge branch 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6
* 'linux-next' of git://git.kernel.org/pub/scm/linux/kernel/git/jbarnes/pci-2.6: (109 commits) PCI: fix coding style issue in pci_save_state() PCI: add pci_request_acs PCI: fix BUG_ON triggered by logical PCIe root port removal PCI: remove ifdefed pci_cleanup_aer_correct_error_status PCI: unconditionally clear AER uncorr status register during cleanup x86/PCI: claim SR-IOV BARs in pcibios_allocate_resource PCI: portdrv: remove redundant definitions PCI: portdrv: remove unnecessary struct pcie_port_data PCI: portdrv: minor cleanup for pcie_port_device_register PCI: portdrv: add missing irq cleanup PCI: portdrv: enable device before irq initialization PCI: portdrv: cleanup service irqs initialization PCI: portdrv: check capabilities first PCI: portdrv: move PME capability check PCI: portdrv: remove redundant pcie type calculation PCI: portdrv: cleanup pcie_device registration PCI: portdrv: remove redundant pcie_port_device_probe PCI: Always set prefetchable base/limit upper32 registers PCI: read-modify-write the pcie device control register when initiating pcie flr PCI: show dma_mask bits in /sys ... Fixed up conflicts in: arch/x86/kernel/amd_iommu_init.c drivers/pci/dmar.c drivers/pci/hotplug/acpiphp_glue.c
This commit is contained in:
@@ -595,37 +595,89 @@ static char *symbol_string(char *buf, char *end, void *ptr,
|
||||
}
|
||||
|
||||
static char *resource_string(char *buf, char *end, struct resource *res,
|
||||
struct printf_spec spec)
|
||||
struct printf_spec spec, const char *fmt)
|
||||
{
|
||||
#ifndef IO_RSRC_PRINTK_SIZE
|
||||
#define IO_RSRC_PRINTK_SIZE 4
|
||||
#define IO_RSRC_PRINTK_SIZE 6
|
||||
#endif
|
||||
|
||||
#ifndef MEM_RSRC_PRINTK_SIZE
|
||||
#define MEM_RSRC_PRINTK_SIZE 8
|
||||
#define MEM_RSRC_PRINTK_SIZE 10
|
||||
#endif
|
||||
struct printf_spec num_spec = {
|
||||
struct printf_spec hex_spec = {
|
||||
.base = 16,
|
||||
.precision = -1,
|
||||
.flags = SPECIAL | SMALL | ZEROPAD,
|
||||
};
|
||||
/* room for the actual numbers, the two "0x", -, [, ] and the final zero */
|
||||
char sym[4*sizeof(resource_size_t) + 8];
|
||||
char *p = sym, *pend = sym + sizeof(sym);
|
||||
int size = -1;
|
||||
struct printf_spec dec_spec = {
|
||||
.base = 10,
|
||||
.precision = -1,
|
||||
.flags = 0,
|
||||
};
|
||||
struct printf_spec str_spec = {
|
||||
.field_width = -1,
|
||||
.precision = 10,
|
||||
.flags = LEFT,
|
||||
};
|
||||
struct printf_spec flag_spec = {
|
||||
.base = 16,
|
||||
.precision = -1,
|
||||
.flags = SPECIAL | SMALL,
|
||||
};
|
||||
|
||||
if (res->flags & IORESOURCE_IO)
|
||||
/* 32-bit res (sizeof==4): 10 chars in dec, 10 in hex ("0x" + 8)
|
||||
* 64-bit res (sizeof==8): 20 chars in dec, 18 in hex ("0x" + 16) */
|
||||
#define RSRC_BUF_SIZE ((2 * sizeof(resource_size_t)) + 4)
|
||||
#define FLAG_BUF_SIZE (2 * sizeof(res->flags))
|
||||
#define DECODED_BUF_SIZE sizeof("[mem - 64bit pref disabled]")
|
||||
#define RAW_BUF_SIZE sizeof("[mem - flags 0x]")
|
||||
char sym[max(2*RSRC_BUF_SIZE + DECODED_BUF_SIZE,
|
||||
2*RSRC_BUF_SIZE + FLAG_BUF_SIZE + RAW_BUF_SIZE)];
|
||||
|
||||
char *p = sym, *pend = sym + sizeof(sym);
|
||||
int size = -1, addr = 0;
|
||||
int decode = (fmt[0] == 'R') ? 1 : 0;
|
||||
|
||||
if (res->flags & IORESOURCE_IO) {
|
||||
size = IO_RSRC_PRINTK_SIZE;
|
||||
else if (res->flags & IORESOURCE_MEM)
|
||||
addr = 1;
|
||||
} else if (res->flags & IORESOURCE_MEM) {
|
||||
size = MEM_RSRC_PRINTK_SIZE;
|
||||
addr = 1;
|
||||
}
|
||||
|
||||
*p++ = '[';
|
||||
num_spec.field_width = size;
|
||||
p = number(p, pend, res->start, num_spec);
|
||||
*p++ = '-';
|
||||
p = number(p, pend, res->end, num_spec);
|
||||
if (res->flags & IORESOURCE_IO)
|
||||
p = string(p, pend, "io ", str_spec);
|
||||
else if (res->flags & IORESOURCE_MEM)
|
||||
p = string(p, pend, "mem ", str_spec);
|
||||
else if (res->flags & IORESOURCE_IRQ)
|
||||
p = string(p, pend, "irq ", str_spec);
|
||||
else if (res->flags & IORESOURCE_DMA)
|
||||
p = string(p, pend, "dma ", str_spec);
|
||||
else {
|
||||
p = string(p, pend, "??? ", str_spec);
|
||||
decode = 0;
|
||||
}
|
||||
hex_spec.field_width = size;
|
||||
p = number(p, pend, res->start, addr ? hex_spec : dec_spec);
|
||||
if (res->start != res->end) {
|
||||
*p++ = '-';
|
||||
p = number(p, pend, res->end, addr ? hex_spec : dec_spec);
|
||||
}
|
||||
if (decode) {
|
||||
if (res->flags & IORESOURCE_MEM_64)
|
||||
p = string(p, pend, " 64bit", str_spec);
|
||||
if (res->flags & IORESOURCE_PREFETCH)
|
||||
p = string(p, pend, " pref", str_spec);
|
||||
if (res->flags & IORESOURCE_DISABLED)
|
||||
p = string(p, pend, " disabled", str_spec);
|
||||
} else {
|
||||
p = string(p, pend, " flags ", str_spec);
|
||||
p = number(p, pend, res->flags, flag_spec);
|
||||
}
|
||||
*p++ = ']';
|
||||
*p = 0;
|
||||
*p = '\0';
|
||||
|
||||
return string(buf, end, sym, spec);
|
||||
}
|
||||
@@ -801,8 +853,8 @@ static char *ip4_addr_string(char *buf, char *end, const u8 *addr,
|
||||
* - 'f' For simple symbolic function names without offset
|
||||
* - 'S' For symbolic direct pointers with offset
|
||||
* - 's' For symbolic direct pointers without offset
|
||||
* - 'R' For a struct resource pointer, it prints the range of
|
||||
* addresses (not the name nor the flags)
|
||||
* - 'R' For decoded struct resource, e.g., [mem 0x0-0x1f 64bit pref]
|
||||
* - 'r' For raw struct resource, e.g., [mem 0x0-0x1f flags 0x201]
|
||||
* - 'M' For a 6-byte MAC address, it prints the address in the
|
||||
* usual colon-separated hex notation
|
||||
* - 'm' For a 6-byte MAC address, it prints the hex address without colons
|
||||
@@ -833,7 +885,8 @@ static char *pointer(const char *fmt, char *buf, char *end, void *ptr,
|
||||
case 'S':
|
||||
return symbol_string(buf, end, ptr, spec, *fmt);
|
||||
case 'R':
|
||||
return resource_string(buf, end, ptr, spec);
|
||||
case 'r':
|
||||
return resource_string(buf, end, ptr, spec, fmt);
|
||||
case 'M': /* Colon separated: 00:01:02:03:04:05 */
|
||||
case 'm': /* Contiguous: 000102030405 */
|
||||
return mac_address_string(buf, end, ptr, spec, fmt);
|
||||
|
مرجع در شماره جدید
Block a user