bitkeeper revision 1.1236.30.1 (4235526bwxkauxTaQRTxeJkFtQFn7Q)
authorakw27@arcadians.cl.cam.ac.uk <akw27@arcadians.cl.cam.ac.uk>
Mon, 14 Mar 2005 08:59:23 +0000 (08:59 +0000)
committerakw27@arcadians.cl.cam.ac.uk <akw27@arcadians.cl.cam.ac.uk>
Mon, 14 Mar 2005 08:59:23 +0000 (08:59 +0000)
Fix unmapping of user-mapped foreign pages in blktap.

Signed-off-by: andrew.warfield@cl.cam.ac.uk
linux-2.6.10-xen-sparse/drivers/xen/blktap/blktap_datapath.c
linux-2.6.10-xen-sparse/drivers/xen/blktap/blktap_userdev.c

index e88c5629a6980196ee7faebe5172f6cdcf6cc090..a58e49fa09dc70c079805826b182bea1612ccecd 100644 (file)
@@ -77,7 +77,7 @@ void active_reqs_init(void)
 
 static inline unsigned long MAKE_ID(domid_t fe_dom, ACTIVE_RING_IDX idx)
 {
-    return ( (fe_dom << 16) | idx );
+    return ( (fe_dom << 16) | MASK_ACTIVE_IDX(idx) );
 }
 
 /*-----[ Ring helpers ]---------------------------------------------------*/
index 3cc307fddf1fe16a562f34708f6f364847da3ac2..b503b1ec13ceb0d9933c6016e1fde05498e843a6 100644 (file)
@@ -355,24 +355,6 @@ int blktap_write_be_ring(blkif_response_t *rsp)
     return 0;
 }
 
-static void blktap_fast_flush_area(int idx, int nr_pages)
-{
-    multicall_entry_t mcl[MMAP_PAGES_PER_REQUEST];
-    int               i;
-
-    for ( i = 0; i < nr_pages; i++ )
-    {
-        mcl[i].op = __HYPERVISOR_update_va_mapping;
-        mcl[i].args[0] = MMAP_VADDR(idx, i);
-        mcl[i].args[1] = 0;
-        mcl[i].args[2] = 0;
-    }
-
-    mcl[nr_pages-1].args[2] = UVMF_FLUSH_TLB;
-    if ( unlikely(HYPERVISOR_multicall(mcl, nr_pages) != 0) )
-        BUG();
-}
-
 static int blktap_read_fe_ring(void)
 {
     /* This is called to read responses from the UFE ring. */
@@ -398,7 +380,8 @@ static int blktap_read_fe_ring(void)
             DPRINTK("resp->fe_ring\n");
             ar = lookup_active_req(ID_TO_IDX(resp_s->id));
             blkif = ar->blkif;
-            blktap_fast_flush_area(ID_TO_IDX(resp_s->id), ar->nr_pages);
+            zap_page_range(blktap_vma, MMAP_VADDR(ID_TO_IDX(resp_s->id), 0), 
+                    ar->nr_pages << PAGE_SHIFT, NULL);
             write_resp_to_fe_ring(blkif, resp_s);
             kick_fe_domain(blkif);
         }