Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 251231
b: refs/heads/master
c: b0aef17
h: refs/heads/master
i:
  251229: ed84fe3
  251227: 895bc43
  251223: 26ce5b0
  251215: a2e826e
  251199: 6591702
v: v3
  • Loading branch information
Konrad Rzeszutek Wilk committed Apr 15, 2011
1 parent 2123fe5 commit 3493c5d
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 51 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 7708992616487c00d5ca8ed7612111180d8e1b68
refs/heads/master: b0aef17924a06646403cae8eecf6c73219a63c19
97 changes: 47 additions & 50 deletions trunk/drivers/xen/blkback/blkback.c
Original file line number Diff line number Diff line change
Expand Up @@ -167,41 +167,18 @@ static void free_req(struct pending_req *req)
}

/*
* Unmap the grant references, and also remove the M2P over-rides
* used in the 'pending_req'.
*/
static void fast_flush_area(struct pending_req *req)
* Notification from the guest OS.
*/
static void blkif_notify_work(struct blkif_st *blkif)
{
struct gnttab_unmap_grant_ref unmap[BLKIF_MAX_SEGMENTS_PER_REQUEST];
unsigned int i, invcount = 0;
grant_handle_t handle;
int ret;

for (i = 0; i < req->nr_pages; i++) {
handle = pending_handle(req, i);
if (handle == BLKBACK_INVALID_HANDLE)
continue;
gnttab_set_unmap_op(&unmap[invcount], vaddr(req, i),
GNTMAP_host_map, handle);
pending_handle(req, i) = BLKBACK_INVALID_HANDLE;
invcount++;
}
blkif->waiting_reqs = 1;
wake_up(&blkif->wq);
}

ret = HYPERVISOR_grant_table_op(
GNTTABOP_unmap_grant_ref, unmap, invcount);
BUG_ON(ret);
/* Note, we use invcount, so nr->pages, so we can't index
* using vaddr(req, i).
*/
for (i = 0; i < invcount; i++) {
ret = m2p_remove_override(
virt_to_page(unmap[i].host_addr), false);
if (ret) {
printk(KERN_ALERT "Failed to remove M2P override for " \
"%lx\n", (unsigned long)unmap[i].host_addr);
continue;
}
}
irqreturn_t blkif_be_int(int irq, void *dev_id)
{
blkif_notify_work(dev_id);
return IRQ_HANDLED;
}

/*
Expand Down Expand Up @@ -264,6 +241,43 @@ int blkif_schedule(void *arg)
return 0;
}

/*
* Unmap the grant references, and also remove the M2P over-rides
* used in the 'pending_req'.
*/
static void fast_flush_area(struct pending_req *req)
{
struct gnttab_unmap_grant_ref unmap[BLKIF_MAX_SEGMENTS_PER_REQUEST];
unsigned int i, invcount = 0;
grant_handle_t handle;
int ret;

for (i = 0; i < req->nr_pages; i++) {
handle = pending_handle(req, i);
if (handle == BLKBACK_INVALID_HANDLE)
continue;
gnttab_set_unmap_op(&unmap[invcount], vaddr(req, i),
GNTMAP_host_map, handle);
pending_handle(req, i) = BLKBACK_INVALID_HANDLE;
invcount++;
}

ret = HYPERVISOR_grant_table_op(
GNTTABOP_unmap_grant_ref, unmap, invcount);
BUG_ON(ret);
/* Note, we use invcount, so nr->pages, so we can't index
* using vaddr(req, i).
*/
for (i = 0; i < invcount; i++) {
ret = m2p_remove_override(
virt_to_page(unmap[i].host_addr), false);
if (ret) {
printk(KERN_ALERT "Failed to remove M2P override for " \
"%lx\n", (unsigned long)unmap[i].host_addr);
continue;
}
}
}
/*
* Completion callback on the bio's. Called as bh->b_end_io()
*/
Expand Down Expand Up @@ -305,23 +319,6 @@ static void end_block_io_op(struct bio *bio, int error)
}


/*
* Notification from the guest OS.
*/

static void blkif_notify_work(struct blkif_st *blkif)
{
blkif->waiting_reqs = 1;
wake_up(&blkif->wq);
}

irqreturn_t blkif_be_int(int irq, void *dev_id)
{
blkif_notify_work(dev_id);
return IRQ_HANDLED;
}



/*
* Function to copy the from the ring buffer the 'struct blkif_request'
Expand Down

0 comments on commit 3493c5d

Please sign in to comment.