# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1263279681 0
# Node ID 5b45d08b7abf9316be1cc2b510631736a739064f
# Parent 5e1971bec8819c4ea55af24dfe8b30762e00965d
blktap: make memshr optional
Attached patch makes memshr optional for blktap/blktap2.
This fixes build for platforms where memshr isn't build on.
While there, make indentation consistent.
Signed-off-by: Christoph Egger <Christoph.Egger@xxxxxxx>
---
tools/blktap/drivers/Makefile | 8 +++
tools/blktap/drivers/blktapctrl.c | 4 +
tools/blktap2/drivers/Makefile | 8 +++
tools/blktap2/drivers/tapdisk-image.c | 10 +++-
tools/blktap2/drivers/tapdisk-vbd.c | 78 ++++++++++++++++++----------------
tools/blktap2/drivers/tapdisk.h | 4 +
tools/blktap2/drivers/tapdisk2.c | 15 ++++--
7 files changed, 82 insertions(+), 45 deletions(-)
diff -r 5e1971bec881 -r 5b45d08b7abf tools/blktap/drivers/Makefile
--- a/tools/blktap/drivers/Makefile Tue Jan 12 06:56:56 2010 +0000
+++ b/tools/blktap/drivers/Makefile Tue Jan 12 07:01:21 2010 +0000
@@ -23,7 +23,13 @@ CRYPT_LIB := -lcrypto
$(warning === libgcrypt not installed: falling back to libcrypto ===)
endif
-LDFLAGS_blktapctrl := $(LDFLAGS_libxenctrl) $(LDFLAGS_libxenstore)
$(MEMSHR_DIR)/libmemshr.a -L../lib -lblktap -lrt -lm
+MEMSHRLIBS :=
+ifeq ($(CONFIG_Linux), y)
+CFLAGS += -DMEMSHR
+MEMSHRLIBS += $(MEMSHR_DIR)/libmemshr.a
+endif
+
+LDFLAGS_blktapctrl := $(LDFLAGS_libxenctrl) $(LDFLAGS_libxenstore)
$(MEMSHRLIBS) -L../lib -lblktap -lrt -lm
LDFLAGS_img := $(LIBAIO_DIR)/libaio.a $(CRYPT_LIB) -lpthread -lz
BLK-OBJS-y := block-aio.o
diff -r 5e1971bec881 -r 5b45d08b7abf tools/blktap/drivers/blktapctrl.c
--- a/tools/blktap/drivers/blktapctrl.c Tue Jan 12 06:56:56 2010 +0000
+++ b/tools/blktap/drivers/blktapctrl.c Tue Jan 12 07:01:21 2010 +0000
@@ -859,7 +859,9 @@ int main(int argc, char *argv[])
goto open_failed;
}
- memshr_daemon_initialize();
+#ifdef MEMSHR
+ memshr_daemon_initialize();
+#endif
retry:
/* Set up store connection and watch. */
diff -r 5e1971bec881 -r 5b45d08b7abf tools/blktap2/drivers/Makefile
--- a/tools/blktap2/drivers/Makefile Tue Jan 12 06:56:56 2010 +0000
+++ b/tools/blktap2/drivers/Makefile Tue Jan 12 07:01:21 2010 +0000
@@ -55,7 +55,13 @@ REMUS-OBJS += hashtable_utility.o
LIBAIO_DIR = $(XEN_ROOT)/tools/libaio/src
MEMSHR_DIR = $(XEN_ROOT)/tools/memshr
-MEMSHRLIBS := $(MEMSHR_DIR)/libmemshr.a
+
+MEMSHRLIBS :=
+ifeq ($(CONFIG_Linux), y)
+CFLAGS += -DMEMSHR
+MEMSHRLIBS += $(MEMSHR_DIR)/libmemshr.a
+endif
+
tapdisk2 tapdisk-stream tapdisk-diff $(QCOW_UTIL): AIOLIBS :=
$(LIBAIO_DIR)/libaio.a
tapdisk-client tapdisk-stream tapdisk-diff $(QCOW_UTIL): CFLAGS +=
-I$(LIBAIO_DIR) -I$(XEN_LIBXC)
diff -r 5e1971bec881 -r 5b45d08b7abf tools/blktap2/drivers/tapdisk-image.c
--- a/tools/blktap2/drivers/tapdisk-image.c Tue Jan 12 06:56:56 2010 +0000
+++ b/tools/blktap2/drivers/tapdisk-image.c Tue Jan 12 07:01:21 2010 +0000
@@ -28,7 +28,9 @@
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
+#ifdef MEMSHR
#include <memshr.h>
+#endif
#include "tapdisk-image.h"
#include "tapdisk-driver.h"
@@ -57,7 +59,9 @@ tapdisk_image_allocate(char *file, int t
image->flags = flags;
image->storage = storage;
image->private = private;
- image->memshr_id = memshr_vbd_image_get(file);
+#ifdef MEMSHR
+ image->memshr_id = memshr_vbd_image_get(file);
+#endif
INIT_LIST_HEAD(&image->next);
return image;
@@ -71,7 +75,9 @@ tapdisk_image_free(td_image_t *image)
list_del(&image->next);
- memshr_vbd_image_put(image->memshr_id);
+#ifdef MEMSHR
+ memshr_vbd_image_put(image->memshr_id);
+#endif
free(image->name);
tapdisk_driver_free(image->driver);
free(image);
diff -r 5e1971bec881 -r 5b45d08b7abf tools/blktap2/drivers/tapdisk-vbd.c
--- a/tools/blktap2/drivers/tapdisk-vbd.c Tue Jan 12 06:56:56 2010 +0000
+++ b/tools/blktap2/drivers/tapdisk-vbd.c Tue Jan 12 07:01:21 2010 +0000
@@ -34,7 +34,9 @@
#include <libgen.h>
#include <sys/mman.h>
#include <sys/ioctl.h>
+#ifdef MEMSHR
#include <memshr.h>
+#endif
#include "libvhd.h"
#include "tapdisk-image.h"
@@ -107,7 +109,9 @@ tapdisk_vbd_initialize(int rfd, int wfd,
vbd->callback = tapdisk_vbd_callback;
vbd->argument = vbd;
- memshr_vbd_initialize();
+#ifdef MEMSHR
+ memshr_vbd_initialize();
+#endif
INIT_LIST_HEAD(&vbd->driver_stack);
INIT_LIST_HEAD(&vbd->images);
@@ -1455,18 +1459,23 @@ __tapdisk_vbd_complete_td_request(td_vbd
(treq.op == TD_OP_WRITE ? "write" : "read"),
treq.secs, treq.sec);
}
- } else
- if(treq.op == TD_OP_READ && td_flag_test(image->flags, TD_OPEN_RDONLY)) {
- uint64_t hnd = treq.memshr_hnd;
- uint16_t uid = image->memshr_id;
- blkif_request_t *breq = &vreq->req;
- uint64_t sec = tapdisk_vbd_breq_get_sector(breq, treq);
- int secs = breq->seg[treq.sidx].last_sect -
- breq->seg[treq.sidx].first_sect + 1;
-
- if(hnd != 0)
- memshr_vbd_complete_ro_request(hnd, uid, sec, secs);
- }
+ } else {
+#ifdef MEMSHR
+ if (treq.op == TD_OP_READ
+ && td_flag_test(image->flags, TD_OPEN_RDONLY)) {
+ uint64_t hnd = treq.memshr_hnd;
+ uint16_t uid = image->memshr_id;
+ blkif_request_t *breq = &vreq->req;
+ uint64_t sec = tapdisk_vbd_breq_get_sector(breq, treq);
+ int secs = breq->seg[treq.sidx].last_sect -
+ breq->seg[treq.sidx].first_sect + 1;
+
+ if (hnd != 0)
+ memshr_vbd_complete_ro_request(hnd, uid,
+ sec, secs);
+ }
+#endif
+ }
tapdisk_vbd_complete_vbd_request(vbd, vreq);
}
@@ -1518,29 +1527,28 @@ __tapdisk_vbd_reissue_td_request(td_vbd_
break;
case TD_OP_READ:
- if(td_flag_test(parent->flags, TD_OPEN_RDONLY))
- {
- int ret, seg = treq.sidx;
- blkif_request_t *breq = &vreq->req;
+#ifdef MEMSHR
+ if(td_flag_test(parent->flags, TD_OPEN_RDONLY)) {
+ int ret, seg = treq.sidx;
+ blkif_request_t *breq = &vreq->req;
- ret = memshr_vbd_issue_ro_request(treq.buf,
- breq->seg[seg].gref,
- parent->memshr_id,
- treq.sec,
- treq.secs,
- &treq.memshr_hnd);
- if(ret == 0)
- {
- /* Reset memshr handle. This'll prevent
- * memshr_vbd_complete_ro_request being called */
- treq.memshr_hnd = 0;
- td_complete_request(treq, 0);
- }
- else
- td_queue_read(parent, treq);
- }
- else
- td_queue_read(parent, treq);
+ ret = memshr_vbd_issue_ro_request(treq.buf,
+ breq->seg[seg].gref,
+ parent->memshr_id,
+ treq.sec,
+ treq.secs,
+ &treq.memshr_hnd);
+ if(ret == 0) {
+ /* Reset memshr handle. This'll prevent
+ * memshr_vbd_complete_ro_request being called
+ */
+ treq.memshr_hnd = 0;
+ td_complete_request(treq, 0);
+ } else
+ td_queue_read(parent, treq);
+ } else
+#endif
+ td_queue_read(parent, treq);
break;
}
diff -r 5e1971bec881 -r 5b45d08b7abf tools/blktap2/drivers/tapdisk.h
--- a/tools/blktap2/drivers/tapdisk.h Tue Jan 12 06:56:56 2010 +0000
+++ b/tools/blktap2/drivers/tapdisk.h Tue Jan 12 07:01:21 2010 +0000
@@ -132,7 +132,9 @@ struct td_request {
int sidx;
void *private;
- uint64_t memshr_hnd;
+#ifdef MEMSHR
+ uint64_t memshr_hnd;
+#endif
};
/*
diff -r 5e1971bec881 -r 5b45d08b7abf tools/blktap2/drivers/tapdisk2.c
--- a/tools/blktap2/drivers/tapdisk2.c Tue Jan 12 06:56:56 2010 +0000
+++ b/tools/blktap2/drivers/tapdisk2.c Tue Jan 12 07:01:21 2010 +0000
@@ -34,7 +34,9 @@
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
+#ifdef MEMSHR
#include <memshr.h>
+#endif
#include "tapdisk.h"
#include "blktap2.h"
@@ -419,10 +421,15 @@ main(int argc, char *argv[])
break;
case 'h':
usage(argv[0], 0);
- break;
- case 's':
- memshr_set_domid(atoi(optarg));
- break;
+ break;
+ case 's':
+#ifdef MEMSHR
+ memshr_set_domid(atoi(optarg));
+#else
+ fprintf(stderr, "MEMSHR support not compiled in.\n");
+ exit(EXIT_FAILURE);
+#endif
+ break;
default:
usage(argv[0], EINVAL);
}
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|