ChangeSet 1.1425, 2005/04/01 17:31:40+01:00, kaf24@xxxxxxxxxxxxxxxxxxxx
I/O rings may now be dynamically sized: instead of declaring size
at struct definition time, declare it in FRONT/BACK_RING_INIT().
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
freebsd-5.3-xen-sparse/i386-xen/i386-xen/ctrl_if.c | 8 -
freebsd-5.3-xen-sparse/i386-xen/xen/blkfront/xb_blkfront.c | 18 ++--
linux-2.6.11-xen-sparse/arch/xen/kernel/ctrl_if.c | 8 -
linux-2.6.11-xen-sparse/drivers/xen/blkback/interface.c | 2
linux-2.6.11-xen-sparse/drivers/xen/blkfront/blkfront.c | 22 ++---
linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_controlmsg.c | 4
linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_userdev.c | 7 -
linux-2.6.11-xen-sparse/drivers/xen/usbback/interface.c | 2
linux-2.6.11-xen-sparse/drivers/xen/usbfront/usbfront.c | 2
tools/blktap/blktaplib.c | 6 -
tools/xcs/ctrl_interface.c | 4
xen/include/public/io/blkif.h | 2
xen/include/public/io/domain_controller.h | 12 ++
xen/include/public/io/ring.h | 43
+++++-----
xen/include/public/io/usbif.h | 38 ++++----
15 files changed, 95 insertions(+), 83 deletions(-)
diff -Nru a/freebsd-5.3-xen-sparse/i386-xen/i386-xen/ctrl_if.c
b/freebsd-5.3-xen-sparse/i386-xen/i386-xen/ctrl_if.c
--- a/freebsd-5.3-xen-sparse/i386-xen/i386-xen/ctrl_if.c 2005-04-01
12:03:37 -05:00
+++ b/freebsd-5.3-xen-sparse/i386-xen/i386-xen/ctrl_if.c 2005-04-01
12:03:37 -05:00
@@ -470,8 +470,8 @@
/* Sync up with shared indexes. */
- FRONT_RING_ATTACH(&ctrl_if_tx_ring, &ctrl_if->tx_ring);
- BACK_RING_ATTACH(&ctrl_if_rx_ring, &ctrl_if->rx_ring);
+ FRONT_RING_ATTACH(&ctrl_if_tx_ring, &ctrl_if->tx_ring, CONTROL_RING_MEM);
+ BACK_RING_ATTACH(&ctrl_if_rx_ring, &ctrl_if->rx_ring, CONTROL_RING_MEM);
ctrl_if_evtchn = xen_start_info->domain_controller_evtchn;
ctrl_if_irq = bind_evtchn_to_irq(ctrl_if_evtchn);
@@ -498,8 +498,8 @@
for ( i = 0; i < 256; i++ )
ctrl_if_rxmsg_handler[i] = ctrl_if_rxmsg_default_handler;
- FRONT_RING_ATTACH(&ctrl_if_tx_ring, &ctrl_if->tx_ring);
- BACK_RING_ATTACH(&ctrl_if_rx_ring, &ctrl_if->rx_ring);
+ FRONT_RING_ATTACH(&ctrl_if_tx_ring, &ctrl_if->tx_ring, CONTROL_RING_MEM);
+ BACK_RING_ATTACH(&ctrl_if_rx_ring, &ctrl_if->rx_ring, CONTROL_RING_MEM);
mtx_init(&ctrl_if_lock, "ctrlif", NULL, MTX_SPIN | MTX_NOWITNESS);
diff -Nru a/freebsd-5.3-xen-sparse/i386-xen/xen/blkfront/xb_blkfront.c
b/freebsd-5.3-xen-sparse/i386-xen/xen/blkfront/xb_blkfront.c
--- a/freebsd-5.3-xen-sparse/i386-xen/xen/blkfront/xb_blkfront.c
2005-04-01 12:03:36 -05:00
+++ b/freebsd-5.3-xen-sparse/i386-xen/xen/blkfront/xb_blkfront.c
2005-04-01 12:03:36 -05:00
@@ -102,8 +102,10 @@
static blkif_front_ring_t blk_ring;
+#define BLK_RING_SIZE __RING_SIZE((blkif_sring_t *)0, PAGE_SIZE)
+
static unsigned long rec_ring_free;
-blkif_request_t rec_ring[RING_SIZE(&blk_ring)]; /* shadow recovery ring
*/
+blkif_request_t rec_ring[BLK_RING_SIZE];
/* XXX move to xb_vbd.c when VBD update support is added */
#define MAX_VBDS 64
@@ -133,7 +135,7 @@
{
unsigned long free = rec_ring_free;
- KASSERT(free <= RING_SIZE(&blk_ring), ("free %lu > RING_SIZE", free));
+ KASSERT(free <= BLK_RING_SIZE, ("free %lu > RING_SIZE", free));
rec_ring_free = rec_ring[free].id;
@@ -638,7 +640,7 @@
if (blk_ring.sring) free(blk_ring.sring, M_DEVBUF);
blk_ring.sring = (blkif_sring_t *)malloc(PAGE_SIZE, M_DEVBUF, M_WAITOK);
SHARED_RING_INIT(blk_ring.sring);
- FRONT_RING_INIT(&blk_ring, blk_ring.sring);
+ FRONT_RING_INIT(&blk_ring, blk_ring.sring, PAGE_SIZE);
blkif_state = BLKIF_STATE_DISCONNECTED;
blkif_send_interface_connect();
}
@@ -662,7 +664,7 @@
* This will need to be fixed once we have barriers */
/* Stage 1 : Find active and move to safety. */
- for ( i = 0; i < RING_SIZE(&blk_ring); i++ ) {
+ for ( i = 0; i < BLK_RING_SIZE; i++ ) {
if ( rec_ring[i].id >= KERNBASE ) {
req = RING_GET_REQUEST(&blk_ring,
blk_ring.req_prod_pvt);
@@ -682,11 +684,11 @@
}
/* Stage 3 : Set up free list. */
- for ( ; i < RING_SIZE(&blk_ring); i++ ){
+ for ( ; i < BLK_RING_SIZE; i++ ){
rec_ring[i].id = i+1;
}
rec_ring_free = blk_ring.req_prod_pvt;
- rec_ring[RING_SIZE(&blk_ring)-1].id = 0x0fffffff;
+ rec_ring[BLK_RING_SIZE-1].id = 0x0fffffff;
/* blk_ring.req_prod will be set when we flush_requests().*/
wmb();
@@ -874,10 +876,10 @@
printk("[XEN] Initialising virtual block device driver\n");
rec_ring_free = 0;
- for (i = 0; i < RING_SIZE(&blk_ring); i++) {
+ for (i = 0; i < BLK_RING_SIZE; i++) {
rec_ring[i].id = i+1;
}
- rec_ring[RING_SIZE(&blk_ring)-1].id = 0x0fffffff;
+ rec_ring[BLK_RING_SIZE-1].id = 0x0fffffff;
(void)ctrl_if_register_receiver(CMSG_BLKIF_FE, blkif_ctrlif_rx, 0);
diff -Nru a/linux-2.6.11-xen-sparse/arch/xen/kernel/ctrl_if.c
b/linux-2.6.11-xen-sparse/arch/xen/kernel/ctrl_if.c
--- a/linux-2.6.11-xen-sparse/arch/xen/kernel/ctrl_if.c 2005-04-01 12:03:37
-05:00
+++ b/linux-2.6.11-xen-sparse/arch/xen/kernel/ctrl_if.c 2005-04-01 12:03:37
-05:00
@@ -503,8 +503,8 @@
}
/* Sync up with shared indexes. */
- FRONT_RING_ATTACH(&ctrl_if_tx_ring, &ctrl_if->tx_ring);
- BACK_RING_ATTACH(&ctrl_if_rx_ring, &ctrl_if->rx_ring);
+ FRONT_RING_ATTACH(&ctrl_if_tx_ring, &ctrl_if->tx_ring, CONTROL_RING_MEM);
+ BACK_RING_ATTACH(&ctrl_if_rx_ring, &ctrl_if->rx_ring, CONTROL_RING_MEM);
ctrl_if_evtchn = xen_start_info.domain_controller_evtchn;
ctrl_if_irq = bind_evtchn_to_irq(ctrl_if_evtchn);
@@ -523,8 +523,8 @@
for ( i = 0; i < 256; i++ )
ctrl_if_rxmsg_handler[i] = ctrl_if_rxmsg_default_handler;
- FRONT_RING_ATTACH(&ctrl_if_tx_ring, &ctrl_if->tx_ring);
- BACK_RING_ATTACH(&ctrl_if_rx_ring, &ctrl_if->rx_ring);
+ FRONT_RING_ATTACH(&ctrl_if_tx_ring, &ctrl_if->tx_ring, CONTROL_RING_MEM);
+ BACK_RING_ATTACH(&ctrl_if_rx_ring, &ctrl_if->rx_ring, CONTROL_RING_MEM);
spin_lock_init(&ctrl_if_lock);
diff -Nru a/linux-2.6.11-xen-sparse/drivers/xen/blkback/interface.c
b/linux-2.6.11-xen-sparse/drivers/xen/blkback/interface.c
--- a/linux-2.6.11-xen-sparse/drivers/xen/blkback/interface.c 2005-04-01
12:03:36 -05:00
+++ b/linux-2.6.11-xen-sparse/drivers/xen/blkback/interface.c 2005-04-01
12:03:36 -05:00
@@ -198,7 +198,7 @@
}
sring = (blkif_sring_t *)vma->addr;
SHARED_RING_INIT(sring);
- BACK_RING_INIT(&blkif->blk_ring, sring);
+ BACK_RING_INIT(&blkif->blk_ring, sring, PAGE_SIZE);
blkif->evtchn = evtchn;
blkif->irq = bind_evtchn_to_irq(evtchn);
diff -Nru a/linux-2.6.11-xen-sparse/drivers/xen/blkfront/blkfront.c
b/linux-2.6.11-xen-sparse/drivers/xen/blkfront/blkfront.c
--- a/linux-2.6.11-xen-sparse/drivers/xen/blkfront/blkfront.c 2005-04-01
12:03:36 -05:00
+++ b/linux-2.6.11-xen-sparse/drivers/xen/blkfront/blkfront.c 2005-04-01
12:03:36 -05:00
@@ -74,8 +74,10 @@
static blkif_front_ring_t blk_ring;
+#define BLK_RING_SIZE __RING_SIZE((blkif_sring_t *)0, PAGE_SIZE)
+
unsigned long rec_ring_free;
-blkif_request_t rec_ring[RING_SIZE(&blk_ring)];
+blkif_request_t rec_ring[BLK_RING_SIZE];
static int recovery = 0; /* "Recovery in progress" flag. Protected
* by the blkif_io_lock */
@@ -90,8 +92,7 @@
{
unsigned long free = rec_ring_free;
- if ( free > RING_SIZE(&blk_ring) )
- BUG();
+ BUG_ON(free > BLK_RING_SIZE);
rec_ring_free = rec_ring[free].id;
@@ -522,8 +523,7 @@
{
/* We kick pending request queues if the ring is reasonably empty. */
if ( (nr_pending != 0) &&
- (RING_PENDING_REQUESTS(&blk_ring) <
- (RING_SIZE(&blk_ring) >> 1)) )
+ (RING_PENDING_REQUESTS(&blk_ring) < (BLK_RING_SIZE >> 1)) )
{
/* Attempt to drain the queue, but bail if the ring becomes full. */
while ( (nr_pending != 0) && !RING_FULL(&blk_ring) )
@@ -1138,7 +1138,7 @@
sring = (blkif_sring_t *)__get_free_page(GFP_KERNEL);
SHARED_RING_INIT(sring);
- FRONT_RING_INIT(&blk_ring, sring);
+ FRONT_RING_INIT(&blk_ring, sring, PAGE_SIZE);
blkif_state = BLKIF_STATE_DISCONNECTED;
blkif_send_interface_connect();
}
@@ -1158,7 +1158,7 @@
* This will need to be fixed once we have barriers */
/* Stage 1 : Find active and move to safety. */
- for ( i = 0; i < RING_SIZE(&blk_ring); i++ )
+ for ( i = 0; i < BLK_RING_SIZE; i++ )
{
if ( rec_ring[i].id >= PAGE_OFFSET )
{
@@ -1179,10 +1179,10 @@
}
/* Stage 3 : Set up free list. */
- for ( ; i < RING_SIZE(&blk_ring); i++ )
+ for ( ; i < BLK_RING_SIZE; i++ )
rec_ring[i].id = i+1;
rec_ring_free = blk_ring.req_prod_pvt;
- rec_ring[RING_SIZE(&blk_ring)-1].id = 0x0fffffff;
+ rec_ring[BLK_RING_SIZE-1].id = 0x0fffffff;
/* blk_ring->req_prod will be set when we flush_requests().*/
wmb();
@@ -1369,9 +1369,9 @@
printk(KERN_INFO "xen_blk: Initialising virtual block device driver\n");
rec_ring_free = 0;
- for ( i = 0; i < RING_SIZE(&blk_ring); i++ )
+ for ( i = 0; i < BLK_RING_SIZE; i++ )
rec_ring[i].id = i+1;
- rec_ring[RING_SIZE(&blk_ring)-1].id = 0x0fffffff;
+ rec_ring[BLK_RING_SIZE-1].id = 0x0fffffff;
(void)ctrl_if_register_receiver(CMSG_BLKIF_FE, blkif_ctrlif_rx,
CALLBACK_IN_BLOCKING_CONTEXT);
diff -Nru 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
--- a/linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_controlmsg.c
2005-04-01 12:03:36 -05:00
+++ b/linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_controlmsg.c
2005-04-01 12:03:36 -05:00
@@ -229,7 +229,7 @@
sring = (blkif_sring_t *)vma->addr;
SHARED_RING_INIT(sring);
- BACK_RING_INIT(&blkif->blk_ring, sring);
+ BACK_RING_INIT(&blkif->blk_ring, sring, PAGE_SIZE);
blkif->evtchn = evtchn;
blkif->irq = bind_evtchn_to_irq(evtchn);
@@ -302,7 +302,7 @@
sring = (blkif_sring_t *)__get_free_page(GFP_KERNEL);
SHARED_RING_INIT(sring);
- FRONT_RING_INIT(&blktap_be_ring, sring);
+ FRONT_RING_INIT(&blktap_be_ring, sring, PAGE_SIZE);
blktap_be_state = BLKIF_STATE_DISCONNECTED;
DPRINTK("Blkif-Passthrough-BE is now DISCONNECTED.\n");
blkif_ptbe_send_interface_connect();
diff -Nru a/linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_userdev.c
b/linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_userdev.c
--- a/linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_userdev.c
2005-04-01 12:03:37 -05:00
+++ b/linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_userdev.c
2005-04-01 12:03:37 -05:00
@@ -87,8 +87,7 @@
SetPageReserved(virt_to_page(csring));
SHARED_RING_INIT(csring);
- FRONT_RING_INIT(&blktap_uctrl_ring, csring);
-
+ FRONT_RING_INIT(&blktap_uctrl_ring, csring, PAGE_SIZE);
/* Allocate the fe ring. */
sring = (blkif_sring_t *)get_zeroed_page(GFP_KERNEL);
@@ -98,7 +97,7 @@
SetPageReserved(virt_to_page(sring));
SHARED_RING_INIT(sring);
- FRONT_RING_INIT(&blktap_ufe_ring, sring);
+ FRONT_RING_INIT(&blktap_ufe_ring, sring, PAGE_SIZE);
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|