Date: Mon, 28 Sep 2015 18:52:54 +0000 From: "Pokala, Ravi" <rpokala@panasas.com> To: John Baldwin <jhb@freebsd.org> Cc: "freebsd-hackers@freebsd.org" <freebsd-hackers@freebsd.org> Subject: Re: bus_.*_resource() and rid Message-ID: <D22ED71B.146AE6%rpokala@panasas.com> In-Reply-To: <3440562.CxbPY93XVj@ralph.baldwin.cx> References: <D214E963.145154%rpokala@panasas.com> <1637146.Rv3dkk0gMi@ralph.baldwin.cx> <D22E9D9D.146A5C%rpokala@panasas.com> <3440562.CxbPY93XVj@ralph.baldwin.cx>
next in thread | previous in thread | raw e-mail | index | archive | help
-----Original Message-----
From: John Baldwin <jhb@freebsd.org>
Date: 2015-09-28, Monday at 11:09
To: Ravi Pokala <rpokala@panasas.com>
Cc: Francois Tigeot <ftigeot@wolfpond.org>, "cem@FreeBSD.org"
<cem@freebsd.org>, "freebsd-hackers@freebsd.org"
<freebsd-hackers@freebsd.org>
Subject: Re: bus_.*_resource() and rid
>Ah, I did mean to include 'struct resource_i' as part of 'struct
>resource'.
>They are really stored as the same structure, and you can use
>rman_get_rid()
>on a struct resource.
Okay, I think I see how that works.
>> I have a one-line change to dump_rman() to include the RID along w/ the
>> start and end address. That at least got me what I was interested in
>>from
>> ddb.
>
>Neat, can you share that?
It's a very complicated diff. ;-)
--- sys/kern/subr_rman.c (revision 288339)
+++ sys/kern/subr_rman.c (working copy)
@@ -1051,7 +1051,7 @@
devname = "nomatch";
} else
devname = NULL;
- db_printf(" 0x%lx-0x%lx ", r->r_start, r->r_end);
+ db_printf(" 0x%lx-0x%lx (%d)", r->r_start, r->r_end, r->r_rid);
if (devname != NULL)
db_printf("(%s)\n", devname);
else
>> As for `devinfo', it looks like (struct u_resource) and (struct u_rman)
>> don't include the RID either:
>
>Fooey. That would be a bit of a PITA to fix then.
Yeah. Alas!
>So there's actually a 'resource_list_add_next()' that bus drivers can use
>that
>does this, but that doesn't help you in this case. :(
Yeah, looks like it needs a (struct resource_list *), which I don't know
how to get.
Hmm... perhaps:
struct resource_list *rl =
bus_get_resource_list(device_get_parent(dev), dev);
rid = resource_list_add_next(rl, SYS_RES_IOPORT, start, end, count);
I'll try that.
Thanks!
-Ravi
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?D22ED71B.146AE6%rpokala>
