| Date | Thu, 28 Feb 2013 10:58:46 +0000 | From | "Jan Beulich" <> | Subject | Re: [Xen-devel] [PATCH RFC 01/12] xen-blkback: don't store dev_bus_addr |
| |
>>> On 28.02.13 at 11:28, Roger Pau Monne <roger.pau@citrix.com> wrote: > dev_bus_addr returned in the grant ref map operation is the mfn of the > passed page, there's no need to store it in the persistent grant > entry, since we can always get it provided that we have the page.
Interesting that you come up with this, as I have a similar patch pending (not posted yet), aiming at reducing the stack usage in dispatch_rw_block_io(): seg[].buf is really unnecessary with the dev_bus_addr storing removed, as the only reader of that field can equally well use req->u.rw.seg[i].first_sect.
And then the biolist[] array really can be folded into a union with the remaining seg[] one, as their usage scopes are easily separable.
> --- a/drivers/block/xen-blkback/blkback.c > +++ b/drivers/block/xen-blkback/blkback.c > @@ -621,9 +621,7 @@ static int xen_blkbk_map(struct blkif_request *req, > * If this is a new persistent grant > * save the handler > */ > - persistent_gnts[i]->handle = map[j].handle; > - persistent_gnts[i]->dev_bus_addr = > - map[j++].dev_bus_addr; > + persistent_gnts[i]->handle = map[j++].handle; > } > pending_handle(pending_req, i) = > persistent_gnts[i]->handle; > @@ -631,7 +629,8 @@ static int xen_blkbk_map(struct blkif_request *req, > if (ret) > continue; > > - seg[i].buf = persistent_gnts[i]->dev_bus_addr | > + seg[i].buf = pfn_to_mfn(page_to_pfn( > + persistent_gnts[i]->page)) << PAGE_SHIFT |
So why do you do this? The only reader masks the field with ~PAGE_MASK anyway.
Jan
|