]> xenbits.xensource.com Git - people/dstodden/blktap.git/commitdiff
EA-1001: Build VBD ring macros from kernel, not xen headers.
authorDaniel Stodden <daniel.stodden@citrix.com>
Tue, 18 Jan 2011 19:53:23 +0000 (11:53 -0800)
committerDaniel Stodden <daniel.stodden@citrix.com>
Tue, 18 Jan 2011 19:53:23 +0000 (11:53 -0800)
Includes linux/blktap.h, not xen/io/blkif.h. Make therefore wants a
KBUILD argument to find the kernel headers.

Fallout:

 * Presently comes with loads of ugly blkif_t/ypedefs and defines to
   reduce noise under drivers/. Will go away with later VBD patches.

 * BLKTAP_RING_SIZE isn't constant anymore (due to _SC_PAGE_SIZE).
   Substituted with a MAX_REQUESTS defined to a fixed 32U. More
   flexible queue size dimensions are clearly a field for future work.

Signed-off-by: Daniel Stodden <daniel.stodden@citrix.com>
19 files changed:
control/tap-ctl-open.c
drivers/Makefile
drivers/block-lcache.c
drivers/block-vhd.c
drivers/log.h
drivers/tapdisk-control.c
drivers/tapdisk-image.h
drivers/tapdisk-log.c
drivers/tapdisk-log.h
drivers/tapdisk-stream.c
drivers/tapdisk-syslog.c
drivers/tapdisk-utils.c
drivers/tapdisk-utils.h
drivers/tapdisk-vbd.c
drivers/tapdisk-vbd.h
drivers/tapdisk.h
include/blktap.h [new file with mode: 0644]
mk/Makefile
mk/blktap.spec.in

index 274ac0434e429bd10c942421c1c26a9d65f5b89b..a8b8a9d3fe64ef0ebc3ee9c679fc6533f6a41792 100644 (file)
@@ -33,7 +33,6 @@
 #include <getopt.h>
 
 #include "tap-ctl.h"
-#include "blktaplib.h"
 
 int
 tap_ctl_open(const int id, const int minor, const char *params, int flags,
index 83c4680b3f6325b19ed525c36910c3e7960213ef..484ac7515be9795a3141de441b9245f47ef4b2f7 100644 (file)
@@ -10,7 +10,7 @@ INST_DIR   = /usr/sbin
 CFLAGS    += -Werror -g
 CFLAGS    += -Wno-unused
 CFLAGS    += -fno-strict-aliasing
-CFLAGS    += -I../include
+CFLAGS    += -I../include -I$(KBUILD)/include
 CFLAGS    += -D_GNU_SOURCE
 CFLAGS    += -DUSE_NFS_LOCKS
 CFLAGS    += -DTAPDISK
index dd9dba8098fd5abe1c0bb9ec29b9200da5b85dd4..083cf346a2c33c9cb73070617eb98672748abc0b 100644 (file)
@@ -52,7 +52,7 @@
 #define BUG()           td_panic()
 #define BUG_ON(_cond)   if (_cond) { td_panic(); }
 
-#define LOCAL_CACHE_REQUESTS            (BLK_RING_SIZE*2)
+#define LOCAL_CACHE_REQUESTS            (MAX_REQUESTS*2)
 
 typedef struct local_cache              local_cache_t;
 
index 59fa5ea8e8775daf2798a6e66e6e7afeb8b578a4..663b4e1a762ed5c652f91960813c3f8f54284480 100644 (file)
@@ -82,7 +82,7 @@ unsigned int SPB;
        do {                                                            \
                DBG(TLOG_DBG, "%s: QUEUED: %" PRIu64 ", COMPLETED: %"   \
                    PRIu64", RETURNED: %" PRIu64 ", DATA_ALLOCATED: "   \
-                   "%lu, BBLK: 0x%04x\n",                              \
+                   "%u, BBLK: 0x%04x\n",                               \
                    s->vhd.file, s->queued, s->completed, s->returned,  \
                    VHD_REQS_DATA - s->vreq_free_count,                 \
                    s->bat.pbw_blk);                                    \
@@ -2370,7 +2370,7 @@ vhd_debug(td_driver_t *driver)
        DBG(TLOG_WARN, "READS: 0x%08"PRIx64", AVG_READ_SIZE: %f\n",
            s->reads, (s->reads ? ((float)s->read_size / s->reads) : 0.0));
 
-       DBG(TLOG_WARN, "ALLOCATED REQUESTS: (%lu total)\n", VHD_REQS_DATA);
+       DBG(TLOG_WARN, "ALLOCATED REQUESTS: (%u total)\n", VHD_REQS_DATA);
        for (i = 0; i < VHD_REQS_DATA; i++) {
                struct vhd_request *r = &s->vreq_list[i];
                td_request_t *t       = &r->treq;
index a0598116bec167aa8c585f72f901ab125e3f581b..d1be7bebfac02695c47fce70495067977039bc65 100644 (file)
 
 #include <inttypes.h>
 
-/* for wmb et al */
-#include <xenctrl.h>
-#include <xen/io/ring.h>
-
 #define LOGCMD_SHMP  "shmp"
 #define LOGCMD_PEEK  "peek"
 #define LOGCMD_CLEAR "clrw"
index 2026ae76ff3f50d88634648aef3c33f5887619bb..cc0f0a7409aa250d5c4a470273dbd9e8f75738fc 100644 (file)
 #include <sys/mman.h>
 
 #include "list.h"
-#include "tapdisk.h"
-#include "blktap2.h"
-#include "blktaplib.h"
+#include "blktap.h"
 #include "tapdisk-vbd.h"
+#include "tapdisk.h"
 #include "tapdisk-utils.h"
 #include "tapdisk-server.h"
 #include "tapdisk-message.h"
index 60f529b9dc2479ee17127f3159f42aa6819aba8c..f99e0a5530f0050aa33e6abac5dbb2df8492effd 100644 (file)
@@ -29,7 +29,7 @@
 #define _TAPDISK_IMAGE_H_
 
 #include "tapdisk.h"
-#include <xen/io/blkif.h>
+#include "blktap.h"
 
 struct td_image_handle {
        int                          type;
index ebbc6740eb0519f50f7255b6be954ded93de3c9d..bf7cdd6b2cf557b109040e5c64d847ccffcec3db 100644 (file)
@@ -35,7 +35,6 @@
 #include <sys/stat.h>
 #include <sys/types.h>
 
-#include "blktaplib.h"
 #include "tapdisk-log.h"
 #include "tapdisk-utils.h"
 #include "tapdisk-logfile.h"
index 68cadc27f7189164fb9765bcbf7546ecbbf80844..678d78b68a959066d7cf11716efcbc3323c9eb24 100644 (file)
@@ -43,6 +43,12 @@ void tlog_precious(void);
 void tlog_vsyslog(int, const char *, va_list);
 void tlog_syslog(int, const char *, ...);
 
+#include <syslog.h>
+
+#define EPRINTF(_f, _a...) syslog(LOG_ERR, "tap-err:%s: " _f, __func__, ##_a)
+#define DPRINTF(_f, _a...) syslog(LOG_INFO, _f, ##_a)
+#define PERROR(_f, _a...)  EPRINTF(_f ": %s", ##_a, strerror(errno))
+
 void __tlog_write(int, const char *, ...)
        __attribute__((format(printf, 2, 3)));
 
index 2328a7d4ddd54595800aafba44f75a61e38d8cca..095160d724269bb3470f1ed2227314e74fd333ec 100644 (file)
@@ -38,6 +38,7 @@
 #include "tapdisk-vbd.h"
 #include "tapdisk-server.h"
 #include "tapdisk-disktype.h"
+#include "blktap.h"
 
 #define POLL_READ                        0
 #define POLL_WRITE                       1
index e776c13854378788ad8a0a074e4cc2d12512b318..8c8924e1a6f3063f2963aef07a674de91fec88b8 100644 (file)
@@ -44,7 +44,6 @@
 #include <sys/socket.h>
 #include <sys/un.h>
 
-#include <blktaplib.h>
 #include "tapdisk-server.h"
 #include "tapdisk-syslog.h"
 #include "tapdisk-utils.h"
index c563170773cb979cde61baa5e3acee2f246bc3eb..5648a85eee799259e9ab99e177a8481b6df17523 100644 (file)
@@ -45,7 +45,6 @@
 #include <syslog.h>
 
 #include "tapdisk.h"
-#include "blktaplib.h"
 #include "tapdisk-log.h"
 #include "tapdisk-utils.h"
 #include "tapdisk-syslog.h"
index 696dc9c3646df6544446ab94048be82b8e5750a5..2aca8266688d20388dc2d094e5c5c3f0848aca44 100644 (file)
@@ -29,6 +29,7 @@
 #define _TAPDISK_UTILS_H_
 
 #include <inttypes.h>
+#include <sys/time.h>
 
 #define MAX_NAME_LEN          1000
 #define TD_SYSLOG_IDENT_MAX   32
index 43199996f499cdff74f021359efca59811786562..0af56060852cad25cb9091f7f566e1aeb1e082c3 100644 (file)
@@ -38,6 +38,7 @@
 #include <sys/mman.h>
 #include <sys/ioctl.h>
 
+#include "blktap.h"
 #include "libvhd.h"
 #include "tapdisk-image.h"
 #include "tapdisk-driver.h"
@@ -48,8 +49,6 @@
 #include "tapdisk-stats.h"
 #include "tapdisk-storage.h"
 
-#include "blktap2.h"
-
 #define DBG(_level, _f, _a...) tlog_write(_level, _f, ##_a)
 #define ERR(_err, _f, _a...) tlog_error(_err, _f, ##_a)
 
@@ -708,8 +707,6 @@ tapdisk_vbd_map_device(td_vbd_t *vbd, const char *devname)
        ring->vstart =
                (unsigned long)ring->mem + (BLKTAP_RING_PAGES * psize);
 
-       ioctl(ring->fd, BLKTAP_IOCTL_SETMODE, BLKTAP_MODE_INTERPOSE);
-
        return 0;
 
 fail:
index 8851dc9d577cbdb259f0b1dc8fee6659b4ba78d3..d8e0f8a21ca47c9da085afc055f6ed0da63b59fe 100644 (file)
 #define _TAPDISK_VBD_H_
 
 #include <sys/time.h>
-#include <xenctrl.h>
-#include <xen/io/blkif.h>
 
 #include "tapdisk.h"
+#include "blktap.h"
 #include "scheduler.h"
 #include "tapdisk-image.h"
 
@@ -199,6 +198,12 @@ void tapdisk_vbd_detach(td_vbd_t *);
 
 void tapdisk_vbd_forward_request(td_request_t);
 
+typedef struct image {
+       unsigned long long size;
+       unsigned long secsize;
+       unsigned int info;
+} image_t;
+
 int tapdisk_vbd_get_image_info(td_vbd_t *, image_t *);
 int tapdisk_vbd_retry_needed(td_vbd_t *);
 int tapdisk_vbd_quiesce_queue(td_vbd_t *);
index 58aa661eee732ba4c78b87c0f9998025a64e3267..d552b288e3ff774976cf5ea404b13a9367fa1b9e 100644 (file)
 #include <stdint.h>
 
 #include "list.h"
-#include "blktaplib.h"
 #include "tapdisk-log.h"
 #include "tapdisk-utils.h"
 #include "tapdisk-stats.h"
 
 #define MAX_SEGMENTS_PER_REQ         11
+#define MAX_REQUESTS                 32U
 #define SECTOR_SHIFT                 9
 #define DEFAULT_SECTOR_SIZE          512
 
diff --git a/include/blktap.h b/include/blktap.h
new file mode 100644 (file)
index 0000000..ca8fe00
--- /dev/null
@@ -0,0 +1,96 @@
+/*
+ * Copyright (c) 2008, XenSource Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *     * Redistributions of source code must retain the above copyright
+ *       notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright
+ *       notice, this list of conditions and the following disclaimer in the
+ *       documentation and/or other materials provided with the distribution.
+ *     * Neither the name of XenSource Inc. nor the names of its contributors
+ *       may be used to endorse or promote products derived from this software
+ *       without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _TD_BLKTAP_H_
+#define _TD_BLKTAP_H_
+
+#include <stdint.h>
+#include <stddef.h>
+#include <linux/blktap.h>
+
+#define BLKTAP_PAGE_SIZE sysconf(_SC_PAGE_SIZE)
+#define wmb()
+
+#define BLKTAP2_SYSFS_DIR              "/sys/class/blktap2"
+#define BLKTAP2_CONTROL_NAME           "blktap-control"
+#define BLKTAP2_CONTROL_DIR            "/var/run/"BLKTAP2_CONTROL_NAME
+#define BLKTAP2_CONTROL_SOCKET         "ctl"
+#define BLKTAP2_DIRECTORY              "/dev/xen/blktap-2"
+#define BLKTAP2_CONTROL_DEVICE         BLKTAP2_DIRECTORY"/control"
+#define BLKTAP2_RING_DEVICE            BLKTAP2_DIRECTORY"/blktap"
+#define BLKTAP2_IO_DEVICE              BLKTAP2_DIRECTORY"/tapdev"
+#define BLKTAP2_ENOSPC_SIGNAL_FILE     "/var/run/tapdisk-enospc"
+
+/*
+ * compat crap to reduce patch size for now.
+ */
+
+typedef blktap_sring_t     blkif_sring_t;
+typedef blktap_back_ring_t blkif_back_ring_t;
+typedef blktap_ring_req_t  blkif_request_t;
+typedef blktap_ring_rsp_t  blkif_response_t;
+#define blktap2_params blktap_device_info
+
+#define blkif_request_segment blktap_segment
+#define blktap_params blktap_device_info
+
+#define BLKIF_OP_WRITE  BLKTAP_OP_WRITE
+#define BLKIF_OP_READ   BLKTAP_OP_READ
+
+#define BLKIF_RSP_ERROR BLKTAP_RSP_ERROR
+#define BLKIF_RSP_OKAY  BLKTAP_RSP_OKAY
+
+#define BLKIF_MAX_SEGMENTS_PER_REQUEST BLKTAP_SEGMENT_MAX
+#define rmb()
+
+#define BLKTAP_MMAP_PAGES       (BLKTAP_RING_SIZE * BLKTAP_SEGMENT_MAX)
+#define BLKTAP_RING_PAGES       1
+#define BLKTAP_MMAP_REGION_SIZE (BLKTAP_RING_PAGES + BLKTAP_MMAP_PAGES)
+#define MMAP_VADDR(_vstart,_req,_seg)                   \
+    ((_vstart) +                                        \
+     ((_req) * BLKTAP_SEGMENT_MAX * BLKTAP_PAGE_SIZE) +    \
+     ((_seg) * BLKTAP_PAGE_SIZE))
+
+#define BLKTAP_IOCTL_KICK_FE           BLKTAP_IOCTL_RESPOND
+#define BLKTAP2_IOCTL_ALLOC_TAP        BLKTAP_IOCTL_ALLOC_TAP
+#define BLKTAP2_IOCTL_FREE_TAP         BLKTAP_IOCTL_FREE_TAP
+#define BLKTAP2_IOCTL_CREATE_DEVICE    BLKTAP_IOCTL_CREATE_DEVICE
+#define BLKTAP2_IOCTL_REMOVE_DEVICE    BLKTAP_IOCTL_REMOVE_DEVICE
+
+#define BLKTAP2_IOCTL_SET_PARAMS       203
+#define BLKTAP2_IOCTL_PAUSE            204
+#define BLKTAP2_IOCTL_REOPEN           205
+#define BLKTAP2_IOCTL_RESUME           206
+
+#define BLKTAP2_MAX_MESSAGE_LEN        BLKTAP_NAME_MAX
+
+#define BLKTAP2_RING_MESSAGE_PAUSE     1
+#define BLKTAP2_RING_MESSAGE_RESUME    2
+#define BLKTAP2_RING_MESSAGE_CLOSE     BLKTAP_RING_MESSAGE_CLOSE
+
+#endif /* _TD_BLKTAP_H_ */
index efc9b5bb42d5eab598e6f9a549db89c00ad9644c..8427bf7e35e44c603c270af0d56c1154bfa9285b 100644 (file)
@@ -2,6 +2,7 @@ USE_BRANDING := yes
 IMPORT_BRANDING := yes
 include $(B_BASE)/common.mk
 include $(B_BASE)/rpmbuild.mk
+include $(PROJECT_OUTPUTDIR)/kernel-dom0/kernel.inc
 
 REPO_NAME= blktap
 REPO=$(call hg_loc,blktap)
@@ -63,7 +64,9 @@ $(RPM_SPECSDIR)/blktap.spec: blktap.spec.in $(RPM_SPECSDIR)/.dirstamp
        -rm changelog.tmp
 
 $(RPM_BUILD_COOKIE): $(RPM_DIRECTORIES) $(SOURCES)
-       $(RPMBUILD) --target $(DOMAIN0_ARCH_OPTIMIZED) -ba $(RPM_SPECSDIR)/blktap.spec
+       $(RPMBUILD) --target $(DOMAIN0_ARCH_OPTIMIZED) \
+                   -ba $(RPM_SPECSDIR)/blktap.spec    \
+                   --define "kernel_version $(KERNEL_VERSION)"
        @touch $@
 
 $(MY_SOURCES)/MANIFEST: $(MY_SOURCES_DIRSTAMP)
index 74c3ea5748c5ffe69a6bbef75d51456d924102ad..04313184a525d9cb99571b0b94230b561f798e79 100644 (file)
@@ -1,3 +1,5 @@
+%define uname %{kernel_version}%{?flavour}
+
 Summary: blktap user space utilities
 Name: blktap
 Version: @BLKTAP_VERSION@
@@ -9,7 +11,7 @@ Source0: %{name}-%{version}.tar.bz2
 Patch1: %{name}-udev-ignore-tapdevs.patch
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
 Obsoletes: xen-blktap
-BuildRequires: e2fsprogs-devel, xen-devel
+BuildRequires: e2fsprogs-devel, kernel-xen-devel
 %description
 This package contains the blktap userspace utilities
 
@@ -27,7 +29,7 @@ This package contains the blktap development libraries and header files.
 %patch1 -p1
 
 %build
-%{__make} USE_SYSTEM_LIBRARIES=y
+%{__make} USE_SYSTEM_LIBRARIES=y KBUILD=/lib/modules/%{uname}/build
 
 %install
 rm -rf $RPM_BUILD_ROOT