static int tpmfront_probe(struct xenbus_device *dev, const struct xenbus_device_id *id) { struct tpm_private *priv; int rv; priv = kzalloc(sizeof(*priv), GFP_KERNEL); if (!priv) { xenbus_dev_fatal(dev, -ENOMEM, "allocating priv structure"); return -ENOMEM; } rv = setup_chip(&dev->dev, priv); if (rv) { kfree(priv); return rv; } rv = setup_ring(dev, priv); if (rv) { ring_free(priv); return rv; } tpm_get_timeouts(priv->chip); return tpm_chip_register(priv->chip); }
int do_ring (struct layer *l, struct pdb_ATOM *model) { struct ring curr_ring; double rho; int new_site=-1; for (rho = l->rhomin; rho <= l->rhomax; rho+=(l->dr)) { curr_ring = setup_ring (rho, l); /* hack for flagging cavity exposed atoms */ curr_ring.bExposed = (rho == l->rhomin); print_ring(&curr_ring); new_site = do_site (&curr_ring, model); }; return new_site; };
int main(int argc, char *argv[]) { struct submitter *s = &submitters[0]; unsigned long done, calls, reap, cache_hit, cache_miss; int err, i, flags, fd; char *fdepths; void *ret; if (!do_nop && argc < 2) { printf("%s: filename\n", argv[0]); return 1; } flags = O_RDONLY | O_NOATIME; if (!buffered) flags |= O_DIRECT; i = 1; while (!do_nop && i < argc) { struct file *f = &s->files[s->nr_files]; fd = open(argv[i], flags); if (fd < 0) { perror("open"); return 1; } f->real_fd = fd; if (get_file_size(f)) { printf("failed getting size of device/file\n"); return 1; } if (f->max_blocks <= 1) { printf("Zero file/device size?\n"); return 1; } f->max_blocks--; printf("Added file %s\n", argv[i]); s->nr_files++; i++; } if (fixedbufs) { struct rlimit rlim; rlim.rlim_cur = RLIM_INFINITY; rlim.rlim_max = RLIM_INFINITY; if (setrlimit(RLIMIT_MEMLOCK, &rlim) < 0) { perror("setrlimit"); return 1; } } arm_sig_int(); for (i = 0; i < DEPTH; i++) { void *buf; if (posix_memalign(&buf, BS, BS)) { printf("failed alloc\n"); return 1; } s->iovecs[i].iov_base = buf; s->iovecs[i].iov_len = BS; } err = setup_ring(s); if (err) { printf("ring setup failed: %s, %d\n", strerror(errno), err); return 1; } printf("polled=%d, fixedbufs=%d, buffered=%d", polled, fixedbufs, buffered); printf(" QD=%d, sq_ring=%d, cq_ring=%d\n", DEPTH, *s->sq_ring.ring_entries, *s->cq_ring.ring_entries); pthread_create(&s->thread, NULL, submitter_fn, s); fdepths = malloc(8 * s->nr_files); cache_hit = cache_miss = reap = calls = done = 0; do { unsigned long this_done = 0; unsigned long this_reap = 0; unsigned long this_call = 0; unsigned long this_cache_hit = 0; unsigned long this_cache_miss = 0; unsigned long rpc = 0, ipc = 0; double hit = 0.0; sleep(1); this_done += s->done; this_call += s->calls; this_reap += s->reaps; this_cache_hit += s->cachehit; this_cache_miss += s->cachemiss; if (this_cache_hit && this_cache_miss) { unsigned long hits, total; hits = this_cache_hit - cache_hit; total = hits + this_cache_miss - cache_miss; hit = (double) hits / (double) total; hit *= 100.0; } if (this_call - calls) { rpc = (this_done - done) / (this_call - calls); ipc = (this_reap - reap) / (this_call - calls); } else rpc = ipc = -1; file_depths(fdepths); printf("IOPS=%lu, IOS/call=%ld/%ld, inflight=%u (%s), Cachehit=%0.2f%%\n", this_done - done, rpc, ipc, s->inflight, fdepths, hit); done = this_done; calls = this_call; reap = this_reap; cache_hit = s->cachehit; cache_miss = s->cachemiss; } while (!finish); pthread_join(s->thread, &ret); close(s->ring_fd); free(fdepths); return 0; }