aboutsummaryrefslogtreecommitdiffstats
path: root/linux-2.6.11-xen-sparse
diff options
context:
space:
mode:
authorakw27@arcadians.cl.cam.ac.uk <akw27@arcadians.cl.cam.ac.uk>2005-06-04 14:00:22 +0000
committerakw27@arcadians.cl.cam.ac.uk <akw27@arcadians.cl.cam.ac.uk>2005-06-04 14:00:22 +0000
commit724be2379862a4c4de67f44f43ef1428f8424cd8 (patch)
tree16fe0e7c2c0aa8c0a69eadba8eedaace7c55a7e6 /linux-2.6.11-xen-sparse
parent7254a301ec076dc8ae0c2fb521b2854cbca6df81 (diff)
downloadxen-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.c1
-rw-r--r--linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_datapath.c18
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 */