Thread (24 messages) 24 messages, 3 authors, 2012-02-06

Re: [PATCH 01/15] Make %pR could handle bus resource with domain

From: Bjorn Helgaas <bhelgaas@google.com>
Date: 2012-02-03 16:27:01
Also in: linux-pci, lkml

On Wed, Feb 1, 2012 at 2:43 PM, Yinghai Lu [off-list ref] wrote:
quoted hunk ↗ jump to hunk
So could use %pR for busn_res with domain nr in start/end

Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
---
 lib/vsprintf.c |   28 ++++++++++++++++++++++++----
 1 files changed, 24 insertions(+), 4 deletions(-)
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index 8e75003..b34eeea 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -451,6 +451,12 @@ char *resource_string(char *buf, char *end, struct resource *res,
               .precision = -1,
               .flags = SPECIAL | SMALL | ZEROPAD,
       };
+       static const struct printf_spec domain_spec = {
+               .base = 16,
+               .field_width = 4,
+               .precision = -1,
+               .flags = SMALL | ZEROPAD,
+       };
       static const struct printf_spec bus_spec = {
               .base = 16,
               .field_width = 2,
@@ -507,11 +513,25 @@ char *resource_string(char *buf, char *end, struct resource *res,
               specp = &mem_spec;
               decode = 0;
       }
-       p = number(p, pend, res->start, *specp);
-       if (res->start != res->end) {
-               *p++ = '-';
-               p = number(p, pend, res->end, *specp);
+
+       if (res->flags & IORESOURCE_BUS && res->end >> 8) {
+               p = number(p, pend, res->start >> 8, domain_spec);
+               *p++ = ':';
+               p = number(p, pend, res->start & 0xff, *specp);
+               if (res->start != res->end) {
+                       *p++ = '-';
+                       p = number(p, pend, res->end >> 8, domain_spec);
+                       *p++ = ':';
+                       p = number(p, pend, res->end & 0xff, *specp);
The "<< 8", ">>8", and "& 0xff" patterns are used frequently in these
patches.  I think it's worth adding macros or inline functions to make
it clear that all these places are connected.
+               }
+       } else {
+               p = number(p, pend, res->start, *specp);
+               if (res->start != res->end) {
+                       *p++ = '-';
+                       p = number(p, pend, res->end, *specp);
+               }
       }
+
       if (decode) {
               if (res->flags & IORESOURCE_MEM_64)
                       p = string(p, pend, " 64bit", str_spec);
--
1.7.7
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help