[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] Little blkif interface and xend fixes to make parallax work again.



ChangeSet 1.1421.2.1, 2005/05/19 22:13:22+01:00, akw27@xxxxxxxxxxxxxxxxxxxxxx

        Little blkif interface and xend fixes to make parallax work again.
        Also minor debug printing fix to blktap.
        
        Signed-off-by: andrew.warfield@xxxxxxxxxxxx



 linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap.h            |    3 
 linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_controlmsg.c |   46 
+++++++++-
 linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_datapath.c   |   21 ----
 linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_userdev.c    |    3 
 tools/python/xen/lowlevel/xu/xu.c                              |    2 
 tools/python/xen/xend/Blkctl.py                                |    3 
 tools/python/xen/xend/server/blkif.py                          |    6 -
 xen/include/public/io/domain_controller.h                      |    9 +
 8 files changed, 60 insertions(+), 33 deletions(-)


diff -Nru a/linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap.h 
b/linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap.h
--- a/linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap.h       2005-05-19 
18:04:20 -04:00
+++ b/linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap.h       2005-05-19 
18:04:20 -04:00
@@ -246,7 +246,8 @@
 extern void blkif_ctrlif_rx(ctrl_msg_t *msg, unsigned long id);
 
 /* debug */
-void print_vm_ring_idxs(void);
+void print_fe_ring_idxs(void);
+void print_be_ring_idxs(void);
         
 #define __BLKINT_H__
 #endif
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-05-19 18:04:20 -04:00
+++ b/linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_controlmsg.c    
2005-05-19 18:04:20 -04:00
@@ -104,7 +104,7 @@
 
     if ( (blkif = kmem_cache_alloc(blkif_cachep, GFP_KERNEL)) == NULL )
     {
-        DPRINTK("Could not create blkif: out of memory\n");
+        WPRINTK("Could not create blkif: out of memory\n");
         create->status = BLKIF_BE_STATUS_OUT_OF_MEMORY;
         return;
     }
@@ -122,7 +122,7 @@
     {
         if ( ((*pblkif)->domid == domid) && ((*pblkif)->handle == handle) )
         {
-            DPRINTK("Could not create blkif: already exists\n");
+            WPRINTK("Could not create blkif: already exists\n");
             create->status = BLKIF_BE_STATUS_INTERFACE_EXISTS;
             kmem_cache_free(blkif_cachep, blkif);
             return;
@@ -189,7 +189,7 @@
     blkif = blkif_find_by_handle(domid, handle);
     if ( unlikely(blkif == NULL) )
     {
-        DPRINTK("blkif_connect attempted for non-existent blkif (%u,%u)\n", 
+        WPRINTK("blkif_connect attempted for non-existent blkif (%u,%u)\n", 
                 connect->domid, connect->blkif_handle); 
         connect->status = BLKIF_BE_STATUS_INTERFACE_NOT_FOUND;
         return;
@@ -253,7 +253,7 @@
     blkif = blkif_find_by_handle(domid, handle);
     if ( unlikely(blkif == NULL) )
     {
-        DPRINTK("blkif_disconnect attempted for non-existent blkif"
+        WPRINTK("blkif_disconnect attempted for non-existent blkif"
                 " (%u,%u)\n", disconnect->domid, disconnect->blkif_handle); 
         disconnect->status = BLKIF_BE_STATUS_INTERFACE_NOT_FOUND;
         return 1; /* Caller will send response error message. */
@@ -499,3 +499,41 @@
     
     blktap_be_ring.sring = NULL;
 }
+
+
+
+/* Debug : print the current ring indices. */
+
+void print_fe_ring_idxs(void)
+{
+    int i;
+    blkif_t *blkif;
+            
+    WPRINTK("FE Rings: \n---------\n");
+    for ( i = 0; i < BLKIF_HASHSZ; i++) { 
+        blkif = blkif_hash[i];
+        while (blkif != NULL) {
+            if (blkif->status == DISCONNECTED) {
+                WPRINTK("(%2d,%2d) DISCONNECTED\n", 
+                   blkif->domid, blkif->handle);
+            } else if (blkif->status == DISCONNECTING) {
+                WPRINTK("(%2d,%2d) DISCONNECTING\n", 
+                   blkif->domid, blkif->handle);
+            } else if (blkif->blk_ring.sring == NULL) {
+                WPRINTK("(%2d,%2d) CONNECTED, but null sring!\n", 
+                   blkif->domid, blkif->handle);
+            } else {
+                blkif_get(blkif);
+                WPRINTK("(%2d,%2d): req_cons: %2d, rsp_prod_prv: %2d "
+                    "| req_prod: %2d, rsp_prod: %2d\n",
+                    blkif->domid, blkif->handle,
+                    blkif->blk_ring.req_cons,
+                    blkif->blk_ring.rsp_prod_pvt,
+                    blkif->blk_ring.sring->req_prod,
+                    blkif->blk_ring.sring->rsp_prod);
+                blkif_put(blkif);
+            } 
+            blkif = blkif->hash_next;
+        }
+    }
+}        
diff -Nru 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
--- a/linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_datapath.c      
2005-05-19 18:04:20 -04:00
+++ b/linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_datapath.c      
2005-05-19 18:04:20 -04:00
@@ -439,27 +439,8 @@
 
 /* Debug : print the current ring indices. */
 
-void print_vm_ring_idxs(void)
+void print_be_ring_idxs(void)
 {
-    int i;
-    blkif_t *blkif;
-            
-    WPRINTK("FE Rings: \n---------\n");
-    for ( i = 0; i < 50; i++) { 
-        blkif = blkif_find_by_handle((domid_t)i, 0);
-        if (blkif != NULL) {
-            if (blkif->blk_ring.sring != NULL) {
-                WPRINTK("%2d: req_cons: %2d, rsp_prod_prv: %2d "
-                    "| req_prod: %2d, rsp_prod: %2d\n", i, 
-                    blkif->blk_ring.req_cons,
-                    blkif->blk_ring.rsp_prod_pvt,
-                    blkif->blk_ring.sring->req_prod,
-                    blkif->blk_ring.sring->rsp_prod);
-            } else {
-                WPRINTK("%2d: [no device channel yet]\n", i);
-            }
-        }
-    }
     if (blktap_be_ring.sring != NULL) {
         WPRINTK("BE Ring: \n--------\n");
         WPRINTK("BE: rsp_cons: %2d, req_prod_prv: %2d "
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-05-19 18:04:20 -04:00
+++ b/linux-2.6.11-xen-sparse/drivers/xen/blktap/blktap_userdev.c       
2005-05-19 18:04:20 -04:00
@@ -227,7 +227,8 @@
         }
     case BLKTAP_IOCTL_PRINT_IDXS:
         {
-            print_vm_ring_idxs();
+            print_be_ring_idxs();
+            print_fe_ring_idxs();
             WPRINTK("User Rings: \n-----------\n");
             WPRINTK("UF: rsp_cons: %2d, req_prod_prv: %2d "
                             "| req_prod: %2d, rsp_prod: %2d\n",
diff -Nru a/tools/python/xen/lowlevel/xu/xu.c 
b/tools/python/xen/lowlevel/xu/xu.c
--- a/tools/python/xen/lowlevel/xu/xu.c 2005-05-19 18:04:20 -04:00
+++ b/tools/python/xen/lowlevel/xu/xu.c 2005-05-19 18:04:20 -04:00
@@ -624,6 +624,7 @@
         C2P(blkif_be_vbd_create_t, domid,        Int, Long);
         C2P(blkif_be_vbd_create_t, blkif_handle, Int, Long);
         C2P(blkif_be_vbd_create_t, pdevice,      Int, Long);
+        C2P(blkif_be_vbd_create_t, dev_handle,   Int, Long);
         C2P(blkif_be_vbd_create_t, vdevice,      Int, Long);
         C2P(blkif_be_vbd_create_t, readonly,     Int, Long);
         C2P(blkif_be_vbd_create_t, status,       Int, Long);
@@ -843,6 +844,7 @@
         P2C(blkif_be_vbd_create_t, domid,        u32);
         P2C(blkif_be_vbd_create_t, blkif_handle, u32);
         P2C(blkif_be_vbd_create_t, pdevice,      blkif_pdev_t);
+        P2C(blkif_be_vbd_create_t, dev_handle,   u32);
         P2C(blkif_be_vbd_create_t, vdevice,      blkif_vdev_t);
         P2C(blkif_be_vbd_create_t, readonly,     u16);
         break;
diff -Nru a/tools/python/xen/xend/Blkctl.py b/tools/python/xen/xend/Blkctl.py
--- a/tools/python/xen/xend/Blkctl.py   2005-05-19 18:04:20 -04:00
+++ b/tools/python/xen/xend/Blkctl.py   2005-05-19 18:04:20 -04:00
@@ -30,7 +30,8 @@
         raise ValueError('Invalid operation:' + op)
 
     # Special case phy devices - they don't require any (un)binding
-    if type == 'phy':
+    # Parallax also doesn't need script-based binding.
+    if (type == 'phy') or (type == 'parallax'):
         return dets
     
     if script is None:
diff -Nru a/tools/python/xen/xend/server/blkif.py 
b/tools/python/xen/xend/server/blkif.py
--- a/tools/python/xen/xend/server/blkif.py     2005-05-19 18:04:20 -04:00
+++ b/tools/python/xen/xend/server/blkif.py     2005-05-19 18:04:20 -04:00
@@ -166,6 +166,7 @@
         self.params = None
         self.node = None
         self.device = None
+        self.dev_handle = 0
         self.start_sector = None
         self.nr_sectors = None
         
@@ -232,12 +233,12 @@
         # NOTE: 
         # This clause is testing code for storage system experiments.
         # Add a new disk type that will just pass an opaque id in the
-        # start_sector and use an experimental device type.
+        # dev_handle and use an experimental device type.
         # Please contact andrew.warfield@xxxxxxxxxxxx with any concerns.
         if self.type == 'parallax':
             self.node   = node
             self.device =  61440 # (240,0)
-            self.start_sector = long(self.params)
+            self.dev_handle = long(self.params)
             self.nr_sectors = long(0)
             return
         # done.
@@ -330,6 +331,7 @@
                       { 'domid'        : self.frontendDomain,
                         'blkif_handle' : self.backendId,
                         'pdevice'      : self.device,
+                        'dev_handle'   : self.dev_handle,
                         'vdevice'      : self.vdev,
                         'readonly'     : self.readonly() })
         msg = self.backendChannel.requestResponse(msg)
diff -Nru a/xen/include/public/io/domain_controller.h 
b/xen/include/public/io/domain_controller.h
--- a/xen/include/public/io/domain_controller.h 2005-05-19 18:04:20 -04:00
+++ b/xen/include/public/io/domain_controller.h 2005-05-19 18:04:20 -04:00
@@ -280,11 +280,12 @@
     u16        __pad;
     u32        blkif_handle;  /*  4: ...ditto...                         */
     blkif_pdev_t pdevice;     /*  8 */
-    blkif_vdev_t vdevice;     /* 12: Interface-specific id for this VBD. */
-    u16        readonly;      /* 14: Non-zero -> VBD isn't writable.     */
+    u32        dev_handle;    /* 12: Extended device id field.           */
+    blkif_vdev_t vdevice;     /* 16: Interface-specific id for this VBD. */
+    u16        readonly;      /* 18: Non-zero -> VBD isn't writable.     */
     /* OUT */
-    u32        status;        /* 16 */
-} PACKED blkif_be_vbd_create_t; /* 20 bytes */
+    u32        status;        /* 20 */
+} PACKED blkif_be_vbd_create_t; /* 24 bytes */
 
 /* CMSG_BLKIF_BE_VBD_DESTROY */
 typedef struct {

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.