diff options
author | kfraser@localhost.localdomain <kfraser@localhost.localdomain> | 2006-11-07 11:01:35 +0000 |
---|---|---|
committer | kfraser@localhost.localdomain <kfraser@localhost.localdomain> | 2006-11-07 11:01:35 +0000 |
commit | 720860012a8cdeeb5bf810b767f30c1d4cc0a9c7 (patch) | |
tree | ef49f4d2a61da639c66e2c4d7fad0f6b8b2abd24 | |
parent | a30605d6ee86350b58ca43de86b599e09d3e4813 (diff) | |
download | xen-720860012a8cdeeb5bf810b767f30c1d4cc0a9c7.tar.gz xen-720860012a8cdeeb5bf810b767f30c1d4cc0a9c7.tar.bz2 xen-720860012a8cdeeb5bf810b767f30c1d4cc0a9c7.zip |
[BLKTAP] Various cleanups necessary for ia64 support.
- remove magic number 8 and 64.
page size / sector size is 8 on x86, however on ia64 page size is
16kb.
blkring size is 64 on x86. however it's 128 on ia64.
- replace 0xFFFF with INVALID_GRANT_HANDLE
- don't map io ring into user space with uncachable.
kernel access the page with cacable and tapdisk uses memory barrier
so that it isn't necessary.
- remove printk warning and inserted new line.
- remove unused variable, page.
- add one BUG()
Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
-rw-r--r-- | linux-2.6-xen-sparse/drivers/xen/blktap/blktap.c | 31 | ||||
-rw-r--r-- | linux-2.6-xen-sparse/drivers/xen/blktap/xenbus.c | 6 | ||||
-rw-r--r-- | tools/blktap/drivers/blktapctrl.c | 4 | ||||
-rw-r--r-- | tools/blktap/drivers/tapdisk.c | 4 | ||||
-rw-r--r-- | tools/blktap/drivers/tapdisk.h | 1 | ||||
-rw-r--r-- | tools/blktap/lib/blktaplib.h | 7 |
6 files changed, 28 insertions, 25 deletions
diff --git a/linux-2.6-xen-sparse/drivers/xen/blktap/blktap.c b/linux-2.6-xen-sparse/drivers/xen/blktap/blktap.c index 39e6c2e01e..d8bf091934 100644 --- a/linux-2.6-xen-sparse/drivers/xen/blktap/blktap.c +++ b/linux-2.6-xen-sparse/drivers/xen/blktap/blktap.c @@ -93,8 +93,9 @@ int setup_xen_class(void) * mmap_alloc is initialised to 2 and should be adjustable on the fly via * sysfs. */ -#define MAX_DYNAMIC_MEM 64 -#define MAX_PENDING_REQS 64 +#define BLK_RING_SIZE __RING_SIZE((blkif_sring_t *)0, PAGE_SIZE) +#define MAX_DYNAMIC_MEM BLK_RING_SIZE +#define MAX_PENDING_REQS BLK_RING_SIZE #define MMAP_PAGES (MAX_PENDING_REQS * BLKIF_MAX_SEGMENTS_PER_REQUEST) #define MMAP_VADDR(_start, _req,_seg) \ (_start + \ @@ -215,6 +216,7 @@ struct grant_handle_pair grant_handle_t kernel; grant_handle_t user; }; +#define INVALID_GRANT_HANDLE 0xFFFF static struct grant_handle_pair pending_grant_handles[MAX_DYNAMIC_MEM][MMAP_PAGES]; @@ -293,10 +295,11 @@ static inline int GET_NEXT_REQ(unsigned long *idx_map) #define BLKTAP_INVALID_HANDLE(_g) \ - (((_g->kernel) == 0xFFFF) && ((_g->user) == 0xFFFF)) + (((_g->kernel) == INVALID_GRANT_HANDLE) && \ + ((_g->user) == INVALID_GRANT_HANDLE)) #define BLKTAP_INVALIDATE_HANDLE(_g) do { \ - (_g)->kernel = 0xFFFF; (_g)->user = 0xFFFF; \ + (_g)->kernel = INVALID_GRANT_HANDLE; (_g)->user = INVALID_GRANT_HANDLE; \ } while(0) @@ -588,8 +591,6 @@ static int blktap_mmap(struct file *filp, struct vm_area_struct *vma) info->user_vstart = info->rings_vstart + (RING_PAGES << PAGE_SHIFT); /* Map the ring pages to the start of the region and reserve it. */ - vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot); - if (remap_pfn_range(vma, vma->vm_start, __pa(info->ufe_ring.sring) >> PAGE_SHIFT, PAGE_SIZE, vma->vm_page_prot)) { @@ -892,14 +893,14 @@ static void fast_flush_area(pending_req_t *req, int k_idx, int u_idx, khandle = &pending_handle(mmap_idx, k_idx, i); - if (khandle->kernel != 0xFFFF) { + if (khandle->kernel != INVALID_GRANT_HANDLE) { gnttab_set_unmap_op(&unmap[invcount], idx_to_kaddr(mmap_idx, k_idx, i), GNTMAP_host_map, khandle->kernel); invcount++; } - if (khandle->user != 0xFFFF) { + if (khandle->user != INVALID_GRANT_HANDLE) { if (create_lookup_pte_addr( info->vma->vm_mm, MMAP_VADDR(info->user_vstart, u_idx, i), @@ -1186,8 +1187,10 @@ static void dispatch_rw_block_io(blkif_t *blkif, /* Check we have space on user ring - should never fail. */ usr_idx = GET_NEXT_REQ(info->idx_map); - if (usr_idx == INVALID_REQ) + if (usr_idx == INVALID_REQ) { + BUG(); goto fail_response; + } /* Check that number of segments is sane. */ nseg = req->nr_segments; @@ -1221,14 +1224,12 @@ static void dispatch_rw_block_io(blkif_t *blkif, unsigned long uvaddr; unsigned long kvaddr; uint64_t ptep; - struct page *page; uint32_t flags; uvaddr = MMAP_VADDR(info->user_vstart, usr_idx, i); kvaddr = idx_to_kaddr(mmap_idx, pending_idx, i); - page = virt_to_page(kvaddr); - sector = req->sector_number + (8*i); + sector = req->sector_number + ((PAGE_SIZE / 512) * i); if( (blkif->sectors > 0) && (sector >= blkif->sectors) ) { WPRINTK("BLKTAP: Sector request greater" "than size\n"); @@ -1238,7 +1239,7 @@ static void dispatch_rw_block_io(blkif_t *blkif, BLKIF_OP_WRITE ? "WRITE" : "READ"), (long long unsigned) sector, (long long unsigned) sector>>9, - blkif->sectors); + (long long unsigned) blkif->sectors); } flags = GNTMAP_host_map; @@ -1281,14 +1282,14 @@ static void dispatch_rw_block_io(blkif_t *blkif, WPRINTK("invalid kernel buffer -- " "could not remap it\n"); ret |= 1; - map[i].handle = 0xFFFF; + map[i].handle = INVALID_GRANT_HANDLE; } if (unlikely(map[i+1].status != 0)) { WPRINTK("invalid user buffer -- " "could not remap it\n"); ret |= 1; - map[i+1].handle = 0xFFFF; + map[i+1].handle = INVALID_GRANT_HANDLE; } pending_handle(mmap_idx, pending_idx, i/2).kernel diff --git a/linux-2.6-xen-sparse/drivers/xen/blktap/xenbus.c b/linux-2.6-xen-sparse/drivers/xen/blktap/xenbus.c index b08e1dcc1d..553ad45c48 100644 --- a/linux-2.6-xen-sparse/drivers/xen/blktap/xenbus.c +++ b/linux-2.6-xen-sparse/drivers/xen/blktap/xenbus.c @@ -189,7 +189,7 @@ static int blktap_probe(struct xenbus_device *dev, return 0; fail: - DPRINTK("blktap probe failed"); + DPRINTK("blktap probe failed\n"); blktap_remove(dev); return err; } @@ -243,7 +243,7 @@ static void tap_frontend_changed(struct xenbus_device *dev, struct backend_info *be = dev->dev.driver_data; int err; - DPRINTK(""); + DPRINTK("\n"); switch (frontend_state) { case XenbusStateInitialising: @@ -318,7 +318,7 @@ static int connect_ring(struct backend_info *be) unsigned int evtchn; int err; - DPRINTK("%s", dev->otherend); + DPRINTK("%s\n", dev->otherend); err = xenbus_gather(XBT_NIL, dev->otherend, "ring-ref", "%lu", &ring_ref, "event-channel", "%u", &evtchn, NULL); diff --git a/tools/blktap/drivers/blktapctrl.c b/tools/blktap/drivers/blktapctrl.c index 0b00bc4bfd..ae76f60cad 100644 --- a/tools/blktap/drivers/blktapctrl.c +++ b/tools/blktap/drivers/blktapctrl.c @@ -607,9 +607,11 @@ int main(int argc, char *argv[]) struct xs_handle *h; struct pollfd pfd[NUM_POLL_FDS]; pid_t process; + char buf[128]; __init_blkif(); - openlog("BLKTAPCTRL", LOG_CONS|LOG_ODELAY, LOG_DAEMON); + snprintf(buf, sizeof(buf), "BLKTAPCTRL[%d]", getpid()); + openlog(buf, LOG_CONS|LOG_ODELAY, LOG_DAEMON); daemon(0,0); print_drivers(); diff --git a/tools/blktap/drivers/tapdisk.c b/tools/blktap/drivers/tapdisk.c index 859687d8b3..236e4ca2cf 100644 --- a/tools/blktap/drivers/tapdisk.c +++ b/tools/blktap/drivers/tapdisk.c @@ -562,12 +562,14 @@ int main(int argc, char *argv[]) fd_list_entry_t *ptr; struct tap_disk *drv; struct td_state *s; + char openlogbuf[128]; if (argc != 3) usage(); daemonize(); - openlog("TAPDISK", LOG_CONS|LOG_ODELAY, LOG_DAEMON); + snprintf(openlogbuf, sizeof(openlogbuf), "TAPDISK[%d]", getpid()); + openlog(openlogbuf, LOG_CONS|LOG_ODELAY, LOG_DAEMON); /*Setup signal handlers*/ signal (SIGBUS, sig_handler); signal (SIGINT, sig_handler); diff --git a/tools/blktap/drivers/tapdisk.h b/tools/blktap/drivers/tapdisk.h index 238350016b..2455b5282e 100644 --- a/tools/blktap/drivers/tapdisk.h +++ b/tools/blktap/drivers/tapdisk.h @@ -61,7 +61,6 @@ /* Things disks need to know about, these should probably be in a higher-level * header. */ -#define MAX_REQUESTS 64 #define MAX_SEGMENTS_PER_REQ 11 #define SECTOR_SHIFT 9 #define DEFAULT_SECTOR_SIZE 512 diff --git a/tools/blktap/lib/blktaplib.h b/tools/blktap/lib/blktaplib.h index 456a368786..456497a608 100644 --- a/tools/blktap/lib/blktaplib.h +++ b/tools/blktap/lib/blktaplib.h @@ -41,7 +41,7 @@ #include <sys/types.h> #include <unistd.h> -#define BLK_RING_SIZE __RING_SIZE((blkif_sring_t *)0, getpagesize()) +#define BLK_RING_SIZE __RING_SIZE((blkif_sring_t *)0, XC_PAGE_SIZE) /* size of the extra VMA area to map in attached pages. */ #define BLKTAP_VMA_PAGES BLK_RING_SIZE @@ -74,10 +74,10 @@ static inline int BLKTAP_MODE_VALID(unsigned long arg) ( arg == BLKTAP_MODE_INTERPOSE ) ); } -#define MAX_REQUESTS 64 +#define MAX_REQUESTS BLK_RING_SIZE #define BLKTAP_IOCTL_KICK 1 -#define MAX_PENDING_REQS 64 +#define MAX_PENDING_REQS BLK_RING_SIZE #define BLKTAP_DEV_DIR "/dev/xen" #define BLKTAP_DEV_NAME "blktap" #define BLKTAP_DEV_MINOR 0 @@ -199,7 +199,6 @@ int xs_fire_next_watch(struct xs_handle *h); /* Abitrary values, must match the underlying driver... */ -#define MAX_PENDING_REQS 64 #define MAX_TAP_DEV 100 /* Accessing attached data page mappings */ |