mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 11:41:38 -04:00
Merge branch 'for-3.1/drivers' of git://git.kernel.dk/linux-block
* 'for-3.1/drivers' of git://git.kernel.dk/linux-block: cciss: do not attempt to read from a write-only register xen/blkback: Add module alias for autoloading xen/blkback: Don't let in-flight requests defer pending ones. bsg: fix address space warning from sparse bsg: remove unnecessary conditional expressions bsg: fix bsg_poll() to return POLLOUT properly
This commit is contained in:
commit
8ded371f81
3 changed files with 30 additions and 27 deletions
|
|
@ -223,7 +223,7 @@ static void SA5_submit_command( ctlr_info_t *h, CommandList_struct *c)
|
|||
h->ctlr, c->busaddr);
|
||||
#endif /* CCISS_DEBUG */
|
||||
writel(c->busaddr, h->vaddr + SA5_REQUEST_PORT_OFFSET);
|
||||
readl(h->vaddr + SA5_REQUEST_PORT_OFFSET);
|
||||
readl(h->vaddr + SA5_SCRATCHPAD_OFFSET);
|
||||
h->commands_outstanding++;
|
||||
if ( h->commands_outstanding > h->max_outstanding)
|
||||
h->max_outstanding = h->commands_outstanding;
|
||||
|
|
|
|||
|
|
@ -458,7 +458,8 @@ static void end_block_io_op(struct bio *bio, int error)
|
|||
* (which has the sectors we want, number of them, grant references, etc),
|
||||
* and transmute it to the block API to hand it over to the proper block disk.
|
||||
*/
|
||||
static int do_block_io_op(struct xen_blkif *blkif)
|
||||
static int
|
||||
__do_block_io_op(struct xen_blkif *blkif)
|
||||
{
|
||||
union blkif_back_rings *blk_rings = &blkif->blk_rings;
|
||||
struct blkif_request req;
|
||||
|
|
@ -515,6 +516,23 @@ static int do_block_io_op(struct xen_blkif *blkif)
|
|||
return more_to_do;
|
||||
}
|
||||
|
||||
static int
|
||||
do_block_io_op(struct xen_blkif *blkif)
|
||||
{
|
||||
union blkif_back_rings *blk_rings = &blkif->blk_rings;
|
||||
int more_to_do;
|
||||
|
||||
do {
|
||||
more_to_do = __do_block_io_op(blkif);
|
||||
if (more_to_do)
|
||||
break;
|
||||
|
||||
RING_FINAL_CHECK_FOR_REQUESTS(&blk_rings->common, more_to_do);
|
||||
} while (more_to_do);
|
||||
|
||||
return more_to_do;
|
||||
}
|
||||
|
||||
/*
|
||||
* Transmutation of the 'struct blkif_request' to a proper 'struct bio'
|
||||
* and call the 'submit_bio' to pass it to the underlying storage.
|
||||
|
|
@ -700,7 +718,6 @@ static void make_response(struct xen_blkif *blkif, u64 id,
|
|||
struct blkif_response resp;
|
||||
unsigned long flags;
|
||||
union blkif_back_rings *blk_rings = &blkif->blk_rings;
|
||||
int more_to_do = 0;
|
||||
int notify;
|
||||
|
||||
resp.id = id;
|
||||
|
|
@ -727,22 +744,7 @@ static void make_response(struct xen_blkif *blkif, u64 id,
|
|||
}
|
||||
blk_rings->common.rsp_prod_pvt++;
|
||||
RING_PUSH_RESPONSES_AND_CHECK_NOTIFY(&blk_rings->common, notify);
|
||||
if (blk_rings->common.rsp_prod_pvt == blk_rings->common.req_cons) {
|
||||
/*
|
||||
* Tail check for pending requests. Allows frontend to avoid
|
||||
* notifications if requests are already in flight (lower
|
||||
* overheads and promotes batching).
|
||||
*/
|
||||
RING_FINAL_CHECK_FOR_REQUESTS(&blk_rings->common, more_to_do);
|
||||
|
||||
} else if (RING_HAS_UNCONSUMED_REQUESTS(&blk_rings->common)) {
|
||||
more_to_do = 1;
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&blkif->blk_ring_lock, flags);
|
||||
|
||||
if (more_to_do)
|
||||
blkif_notify_work(blkif);
|
||||
if (notify)
|
||||
notify_remote_via_irq(blkif->irq);
|
||||
}
|
||||
|
|
@ -824,3 +826,4 @@ static int __init xen_blkif_init(void)
|
|||
module_init(xen_blkif_init);
|
||||
|
||||
MODULE_LICENSE("Dual BSD/GPL");
|
||||
MODULE_ALIAS("xen-backend:vbd");
|
||||
|
|
|
|||
Loading…
Reference in a new issue