#include #include #include #include #include #include #include #include #include #include "xenfs.h" #define XEN_KSYM_NAME_LEN 127 /* Hypervisor may have different name length */ struct xensyms { struct xen_platform_op op; char *name; uint32_t namelen; }; /* Grab next output page from the hypervisor */ static int xensyms_next_sym(struct xensyms *xs) { int ret; struct xenpf_symdata *symdata = &xs->op.u.symdata; uint64_t symnum; memset(xs->name, 0, xs->namelen); symdata->namelen = xs->namelen; symnum = symdata->symnum; ret = HYPERVISOR_platform_op(&xs->op); if (ret < 0) return ret; /* * If hypervisor's symbol didn't fit into the buffer then allocate * a larger buffer and try again. */ if (unlikely(symdata->namelen > xs->namelen)) { kfree(xs->name); xs->namelen = symdata->namelen; xs->name = kzalloc(xs->namelen, GFP_KERNEL); if (!xs->name) return -ENOMEM; set_xen_guest_handle(symdata->name, xs->name); symdata->symnum--; /* Rewind */ ret = HYPERVISOR_platform_op(&xs->op); if (ret < 0) return ret; } if (symdata->symnum == symnum) /* End of symbols */ return 1; return 0; } static void *xensyms_start(struct seq_file *m, loff_t *pos) { struct xensyms *xs = (struct xensyms *)m->private; xs->op.u.symdata.symnum = *pos; if (xensyms_next_sym(xs)) return NULL; return m->private; } static void *xensyms_next(struct seq_file *m, void *p, loff_t *pos) { struct xensyms *xs = (struct xensyms *)m->private; xs->op.u.symdata.symnum = ++(*pos); if (xensyms_next_sym(xs)) return NULL; return p; } static int xensyms_show(struct seq_file *m, void *p) { struct xensyms *xs = (struct xensyms *)m->private; struct xenpf_symdata *symdata = &xs->op.u.symdata; seq_printf(m, "%016llx %c %s\n", symdata->address, symdata->type, xs->name); return 0; } static void xensyms_stop(struct seq_file *m, void *p) { } static const struct seq_operations xensyms_seq_ops = { .start = xensyms_start, .next = xensyms_next, .show = xensyms_show, .stop = xensyms_stop, }; static int xensyms_open(struct inode *inode, struct file *file) { struct seq_file *m; struct xensyms *xs; int ret; ret = seq_open_private(file, &xensyms_seq_ops, sizeof(struct xensyms)); if (ret) return ret; m = file->private_data; xs = (struct xensyms *)m->private; xs->namelen = XEN_KSYM_NAME_LEN + 1; xs->name = kzalloc(xs->namelen, GFP_KERNEL); if (!xs->name) { seq_release_private(inode, file); return -ENOMEM; } set_xen_guest_handle(xs->op.u.symdata.name, xs->name); xs->op.cmd = XENPF_get_symbol; xs->op.u.symdata.namelen = xs->namelen; return 0; } static int xensyms_release(struct inode *inode, struct file *file) { struct seq_file *m = file->private_data; struct xensyms *xs = (struct xensyms *)m->private; kfree(xs->name); return seq_release_private(inode, file); } const struct file_operations xensyms_ops = { .open = xensyms_open, .read = seq_read, .llseek = seq_lseek, .release = xensyms_release }; ext.git/commit/sound?h=nds-private-remove&id=2e4333c14de06a333783d6812cf3c4998f78b0c8'>sound/soc/generic/simple-scu-card.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2016-12-11 10:17:39 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2016-12-11 10:17:39 -0800
commit2e4333c14de06a333783d6812cf3c4998f78b0c8 (patch)
tree368428514d70f34f2261c7f954f241f886d6bb51 /sound/soc/generic/simple-scu-card.c
parent045169816b31b10faed984b01c390db1b32ee4c1 (diff)
parentba735155b9647b6167fd50276ca0fbfbce4e836c (diff)
Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus
Pull MIPS fixes from Ralf Baechle: "Two more MIPS fixes for 4.9: - RTC: Return -ENODEV so an external RTC will be tried - Fix mask of GPE frequency These two have been tested on Imagination's automated test system and also both received positive reviews on the linux-mips mailing list" * 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus: MIPS: Lantiq: Fix mask of GPE frequency MIPS: Return -ENODEV from weak implementation of rtc_mips_set_time
Diffstat (limited to 'sound/soc/generic/simple-scu-card.c')