Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

vsprintf: Add support for IORESOURCE_UNSET in %pR

Sometimes we have a struct resource where we know the type (MEM/IO/etc.)
and the size, but we haven't assigned address space for it. The
IORESOURCE_UNSET flag is a way to indicate this situation. For these
"unset" resources, the start address is meaningless, so print only the
size, e.g.,

- pci 0000:0c:00.0: reg 184: [mem 0x00000000-0x00001fff 64bit]
+ pci 0000:0c:00.0: reg 184: [mem size 0x2000 64bit]

For %pr (printing with raw flags), we still print the address range,
because %pr is mostly used for debugging anyway.

Thanks to Fengguang Wu <fengguang.wu@intel.com> for suggesting
resource_size().

Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>

+10 -5
+1 -1
include/linux/ioport.h
··· 51 51 52 52 #define IORESOURCE_EXCLUSIVE 0x08000000 /* Userland may not map this resource */ 53 53 #define IORESOURCE_DISABLED 0x10000000 54 - #define IORESOURCE_UNSET 0x20000000 54 + #define IORESOURCE_UNSET 0x20000000 /* No address assigned yet */ 55 55 #define IORESOURCE_AUTO 0x40000000 56 56 #define IORESOURCE_BUSY 0x80000000 /* Driver has marked this resource busy */ 57 57
+9 -4
lib/vsprintf.c
··· 719 719 specp = &mem_spec; 720 720 decode = 0; 721 721 } 722 - p = number(p, pend, res->start, *specp); 723 - if (res->start != res->end) { 724 - *p++ = '-'; 725 - p = number(p, pend, res->end, *specp); 722 + if (decode && res->flags & IORESOURCE_UNSET) { 723 + p = string(p, pend, "size ", str_spec); 724 + p = number(p, pend, resource_size(res), *specp); 725 + } else { 726 + p = number(p, pend, res->start, *specp); 727 + if (res->start != res->end) { 728 + *p++ = '-'; 729 + p = number(p, pend, res->end, *specp); 730 + } 726 731 } 727 732 if (decode) { 728 733 if (res->flags & IORESOURCE_MEM_64)