WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] Incremental fixes to plx stuff.

ChangeSet 1.1311.8.1, 2005/03/21 19:57:02+00:00, akw27@xxxxxxxxxxxxxxxxxxxxxx

        Incremental fixes to plx stuff.
        
        Signed-off-by: andrew.warfield@xxxxxxxxxxxx



 Makefile            |   33 ++
 blktaplib.c         |   24 +
 blockstore-tls.c    |  161 ++++++++++++
 blockstore.c        |  218 ++++++++++++++++-
 blockstore.h        |   26 ++
 parallax-threaded.c |  654 ++++++++++++++++++++++++++++++++++++++++++++++++++++
 parallax-threaded.h |   23 +
 parallax.c          |    6 
 radix.c             |  125 ++++++++-
 radix.h             |    1 
 snaplog.c           |   64 +++++
 snaplog.h           |   11 
 vdi.c               |    5 
 vdi_snap_delete.c   |   48 +++
 vdi_snap_list.c     |   13 -
 15 files changed, 1352 insertions(+), 60 deletions(-)


diff -Nru a/tools/blktap/Makefile b/tools/blktap/Makefile
--- a/tools/blktap/Makefile     2005-03-22 05:03:11 -05:00
+++ b/tools/blktap/Makefile     2005-03-22 05:03:11 -05:00
@@ -21,8 +21,12 @@
 PLX_SRCS := 
 PLX_SRCS += vdi.c 
 PLX_SRCS += radix.c 
-PLX_SRCS += blockstore.c 
 PLX_SRCS += snaplog.c
+PLXT_SRCS := $(PLX_SRCS)
+#PLXT_SRCS += blockstore-tls.c
+PLXT_SRCS += blockstore.c
+PLXT_SRCS += parallax-threaded.c
+PLX_SRCS += blockstore.c 
 VDI_SRCS := $(PLX_SRCS)
 PLX_SRCS += parallax.c
 
@@ -31,6 +35,7 @@
 VDI_TOOLS += vdi_list
 VDI_TOOLS += vdi_snap
 VDI_TOOLS += vdi_snap_list
+VDI_TOOLS += vdi_snap_delete
 VDI_TOOLS += vdi_fill
 VDI_TOOLS += vdi_tree
 VDI_TOOLS += vdi_validate
@@ -91,7 +96,7 @@
 libblktap.so.$(MAJOR):
        ln -sf libblktap.so.$(MAJOR).$(MINOR) $@
 libblktap.so.$(MAJOR).$(MINOR): $(OBJS)
-       $(CC) -Wl,-soname -Wl,$(SONAME) -shared -o $@ $^ -L../libxutil -lxutil 
-lz
+       $(CC) -Wl,-soname -Wl,$(SONAME) -shared -o $@ $^ -lpthread 
-L../libxutil -lxutil -lz
 
 blkdump: $(LIB)
        $(CC) $(CFLAGS) -o blkdump -L$(XEN_LIBXC) -L$(XEN_LIBXUTIL) -L. -l 
blktap blkdump.c
@@ -117,6 +122,9 @@
 parallax: $(LIB) $(PLX_SRCS)
        $(CC) $(CFLAGS) -o parallax -L$(XEN_LIBXC) -L$(XEN_LIBXUTIL) -L. 
-lblktap $(PLX_SRCS) libgnbd/libgnbd.a
 
+parallax-threaded: $(LIB) $(PLXT_SRCS)
+       $(CC) $(CFLAGS) -o parallax-threaded -L$(XEN_LIBXC) -L$(XEN_LIBXUTIL) 
-L. -lpthread -lblktap $(PLXT_SRCS) libgnbd/libgnbd.a
+
 vdi_test: $(LIB) $(VDI_SRCS)
        $(CC) $(CFLAGS) -g3 -o vdi_test -DVDI_STANDALONE $(VDI_SRCS)
 
@@ -132,6 +140,9 @@
 vdi_snap_list: $(LIB) vdi_snap_list.c $(VDI_SRCS)
        $(CC) $(CFLAGS) -g3 -o vdi_snap_list vdi_snap_list.c $(VDI_SRCS)
 
+vdi_snap_delete: $(LIB) vdi_snap_delete.c $(VDI_SRCS)
+       $(CC) $(CFLAGS) -g3 -o vdi_snap_delete vdi_snap_delete.c $(VDI_SRCS)
+
 vdi_tree: $(LIB) vdi_tree.c $(VDI_SRCS)
        $(CC) $(CFLAGS) -g3 -o vdi_tree vdi_tree.c $(VDI_SRCS)
 
@@ -142,12 +153,22 @@
        $(CC) $(CFLAGS) -g3 -o vdi_validate vdi_validate.c $(VDI_SRCS)
 
 
-rdx_cmp: $(LIB) rdx_cmp.c $(VDI_SRCS)
-       $(CC) $(CFLAGS) -g3 -o rdx_cmp rdx_cmp.c $(VDI_SRCS)
-
-
 .PHONY: TAGS clean install mk-symlinks rpm
 TAGS:
        etags -t $(SRCS) *.h
 
 -include $(DEPS)
+
+#Random testing targets.  To be removed eventually.
+
+rdx_cmp: $(LIB) rdx_cmp.c $(VDI_SRCS)
+       $(CC) $(CFLAGS) -g3 -o rdx_cmp rdx_cmp.c $(VDI_SRCS)
+
+bb-tls: $(LIB) blockstore-benchmark.c
+       $(CC) $(CFLAGS) -o bb-tls blockstore-benchmark.c blockstore-tls.c 
-lpthread
+
+bb-trans: $(LIB) blockstore-benchmark.c
+       $(CC) $(CFLAGS) -o bb-trans blockstore-benchmark.c blockstore.c 
-lpthread
+
+radix-test: $(LIB) radix.c blockstore-threaded-trans.c
+       $(CC) $(CFLAGS) -g3 -D RADIX_STANDALONE -o radix-test radix.c 
blockstore-threaded-trans.c
diff -Nru a/tools/blktap/blktaplib.c b/tools/blktap/blktaplib.c
--- a/tools/blktap/blktaplib.c  2005-03-22 05:03:11 -05:00
+++ b/tools/blktap/blktaplib.c  2005-03-22 05:03:11 -05:00
@@ -3,6 +3,8 @@
  * 
  * userspace interface routines for the blktap driver.
  *
+ * (threadsafe(r) version) 
+ *
  * (c) 2004 Andrew Warfield.
  */
 
@@ -21,11 +23,13 @@
 #include <sys/ioctl.h>
 #include <string.h>
 #include <unistd.h>
+#include <pthread.h>
+
                                                                      
 #define __COMPILING_BLKTAP_LIB
 #include "blktaplib.h"
 
-#if 1
+#if 0
 #define DPRINTF(_f, _a...) printf ( _f , ## _a )
 #else
 #define DPRINTF(_f, _a...) ((void)0)
@@ -194,15 +198,19 @@
         
 /*-----[ Data to/from Backend (server) VM ]------------------------------*/
 
+
+
 inline int write_req_to_be_ring(blkif_request_t *req)
 {
     blkif_request_t *req_d;
+    static pthread_mutex_t be_prod_mutex = PTHREAD_MUTEX_INITIALIZER;
 
-    //req_d = FRONT_RING_NEXT_EMPTY_REQUEST(&be_ring);
+    pthread_mutex_lock(&be_prod_mutex);
     req_d = RING_GET_REQUEST(&be_ring, be_ring.req_prod_pvt);
     memcpy(req_d, req, sizeof(blkif_request_t));
     wmb();
     be_ring.req_prod_pvt++;
+    pthread_mutex_unlock(&be_prod_mutex);
     
     return 0;
 }
@@ -210,12 +218,14 @@
 inline int write_rsp_to_fe_ring(blkif_response_t *rsp)
 {
     blkif_response_t *rsp_d;
+    static pthread_mutex_t fe_prod_mutex = PTHREAD_MUTEX_INITIALIZER;
 
-    //rsp_d = BACK_RING_NEXT_EMPTY_RESPONSE(&fe_ring);
+    pthread_mutex_lock(&fe_prod_mutex);
     rsp_d = RING_GET_RESPONSE(&fe_ring, fe_ring.rsp_prod_pvt);
     memcpy(rsp_d, rsp, sizeof(blkif_response_t));
     wmb();
     fe_ring.rsp_prod_pvt++;
+    pthread_mutex_unlock(&fe_prod_mutex);
 
     return 0;
 }
@@ -336,6 +346,10 @@
     ctrl_sring_t     *csring;
     RING_IDX          rp, i, pfd_count; 
     
+    /* pending rings */
+    blkif_request_t req_pending[BLKIF_RING_SIZE];
+    blkif_response_t rsp_pending[BLKIF_RING_SIZE];
+    
     /* handler hooks: */
     request_hook_t   *req_hook;
     response_hook_t  *rsp_hook;
@@ -447,6 +461,8 @@
                 int done = 0; /* stop forwarding this request */
 
                 req = RING_GET_REQUEST(&fe_ring, i);
+                memcpy(&req_pending[ID_TO_IDX(req->id)], req, sizeof(*req));
+                req = &req_pending[ID_TO_IDX(req->id)];
 
                 DPRINTF("copying an fe request\n");
 
@@ -487,6 +503,8 @@
             {
 
                 rsp = RING_GET_RESPONSE(&be_ring, i);
+                memcpy(&rsp_pending[ID_TO_IDX(rsp->id)], rsp, sizeof(*rsp));
+                rsp = &rsp_pending[ID_TO_IDX(rsp->id)];
 
                 DPRINTF("copying a be request\n");
 
diff -Nru a/tools/blktap/blockstore-tls.c b/tools/blktap/blockstore-tls.c
--- /dev/null   Wed Dec 31 16:00:00 196900
+++ b/tools/blktap/blockstore-tls.c     2005-03-22 05:03:11 -05:00
@@ -0,0 +1,161 @@
+/**************************************************************************
+ * 
+ * blockstore.c
+ *
+ * Simple block store interface
+ *
+ */
+ 
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <pthread.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include "blockstore.h"
+#include "parallax-threaded.h"
+
+/*static int block_fp = -1;*/
+ 
+static int fd_list[READ_POOL_SIZE+1];
+ 
+/**
+ * readblock: read a block from disk
+ *   @id: block id to read
+ *
+ *   @return: pointer to block, NULL on error
+ */
+
+void *readblock(u64 id) 
+{
+    void *block;
+    int tid = (int)pthread_getspecific(tid_key);
+    
+    if (lseek64(fd_list[tid], ((off64_t) id - 1LL) * BLOCK_SIZE, SEEK_SET) < 
0) {
+        printf ("%Ld\n", (id - 1) * BLOCK_SIZE);
+        perror("readblock lseek");
+        goto err;
+    }
+    if ((block = malloc(BLOCK_SIZE)) == NULL) {
+        perror("readblock malloc");
+        goto err;
+    }
+    if (read(fd_list[tid], block, BLOCK_SIZE) != BLOCK_SIZE) {
+        perror("readblock read");
+        free(block);
+        goto err;
+    }
+    return block;
+    
+err:
+    return NULL;
+}
+
+/**
+ * writeblock: write an existing block to disk
+ *   @id: block id
+ *   @block: pointer to block
+ *
+ *   @return: zero on success, -1 on failure
+ */
+int writeblock(u64 id, void *block) 
+{
+    int tid = (int)pthread_getspecific(tid_key);
+    
+    if (lseek64(fd_list[tid], ((off64_t) id - 1LL) * BLOCK_SIZE, SEEK_SET) < 
0) {
+        perror("writeblock lseek");
+        goto err;
+    }
+    if (write(fd_list[tid], block, BLOCK_SIZE) < 0) {
+        perror("writeblock write");


-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/listinfo/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Incremental fixes to plx stuff., BitKeeper Bot <=