diff options
author | akw27@arcadians.cl.cam.ac.uk <akw27@arcadians.cl.cam.ac.uk> | 2005-06-04 14:00:22 +0000 |
---|---|---|
committer | akw27@arcadians.cl.cam.ac.uk <akw27@arcadians.cl.cam.ac.uk> | 2005-06-04 14:00:22 +0000 |
commit | 724be2379862a4c4de67f44f43ef1428f8424cd8 (patch) | |
tree | 16fe0e7c2c0aa8c0a69eadba8eedaace7c55a7e6 /linux-2.6.11-xen-sparse | |
parent | 7254a301ec076dc8ae0c2fb521b2854cbca6df81 (diff) | |
download | xen-724be2379862a4c4de67f44f43ef1428f8424cd8.tar.gz xen-724be2379862a4c4de67f44f43ef1428f8424cd8.tar.bz2 xen-724be2379862a4c4de67f44f43ef1428f8424cd8.zip |
bitkeeper revision 1.1665.1.6 (42a1b3f6-O_jFlmQorlf72427fTfmw)
bug fixes to tap and parallax.
Signed-off-by: andrew.warfield@cl.cam.ac.uk
Diffstat (limited to 'linux-2.6.11-xen-sparse')
-rw-r--r-- | linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_controlmsg.c | 1 | ||||
-rw-r--r-- | linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_datapath.c | 18 |
2 files changed, 9 insertions, 10 deletions
diff --git a/linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_controlmsg.c b/linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_controlmsg.c index 060c6a2dd2..e31fc8f6cd 100644 --- a/linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_controlmsg.c +++ b/linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_controlmsg.c @@ -443,6 +443,7 @@ void blkif_ctrlif_rx(ctrl_msg_t *msg, unsigned long id) (blktap_mode & BLKTAP_MODE_COPY_FE) ) { blktap_write_ctrl_ring(msg); + blktap_kick_user(); } switch ( msg->subtype ) diff --git a/linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_datapath.c b/linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_datapath.c index 7eebcf120f..56bf59d718 100644 --- a/linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_datapath.c +++ b/linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_datapath.c @@ -82,6 +82,8 @@ static inline unsigned long MAKE_ID(domid_t fe_dom, ACTIVE_RING_IDX idx) /*-----[ Ring helpers ]---------------------------------------------------*/ +static void maybe_trigger_blktap_schedule(void); + inline int write_resp_to_fe_ring(blkif_t *blkif, blkif_response_t *rsp) { blkif_response_t *resp_d; @@ -125,6 +127,9 @@ void kick_fe_domain(blkif_t *blkif) RING_PUSH_RESPONSES(&blkif->blk_ring); notify_via_evtchn(blkif->evtchn); DPRINTK("notified FE(dom %u)\n", blkif->domid); + + /* We just feed up a batch of request slots... */ + maybe_trigger_blktap_schedule(); } @@ -219,15 +224,10 @@ static int blkio_schedule(void *arg) add_to_blkdev_list_tail(blkif); blkif_put(blkif); } - -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0) - /* Push the batch through to disc. */ - run_task_queue(&tq_disk); -#endif } } -static void maybe_trigger_blkio_schedule(void) +static void maybe_trigger_blktap_schedule(void) { /* * Needed so that two processes, who together make the following predicate @@ -236,7 +236,7 @@ static void maybe_trigger_blkio_schedule(void) */ smp_mb(); - if ( (NR_ACTIVE_REQS < (MAX_ACTIVE_REQS)) && /* XXX!!! was M_A_R/2*/ + if ( (NR_ACTIVE_REQS < (MAX_ACTIVE_REQS/2)) && !list_empty(&blkio_schedule_list) ) wake_up(&blkio_schedule_wait); } @@ -262,7 +262,7 @@ irqreturn_t blkif_ptfe_int(int irq, void *dev_id, struct pt_regs *regs) blkif_t *blkif = dev_id; add_to_blkdev_list_tail(blkif); - maybe_trigger_blkio_schedule(); + maybe_trigger_blktap_schedule(); return IRQ_HANDLED; } @@ -280,8 +280,6 @@ static int do_block_io_op(blkif_t *blkif, int max_to_do) int more_to_do = 0; int notify_be = 0, notify_user = 0; - DPRINTK("PT got FE interrupt.\n"); - if (NR_ACTIVE_REQS == MAX_ACTIVE_REQS) return 1; /* lock both rings */ |