Loading drivers/infiniband/Kconfig +1 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ config INFINIBAND_USER_MAD config INFINIBAND_USER_ACCESS tristate "InfiniBand userspace access (verbs and CM)" select ANON_INODES ---help--- Userspace InfiniBand access support. This enables the kernel side of userspace verbs and the userspace Loading drivers/infiniband/core/ud_header.c +4 −10 Original line number Diff line number Diff line Loading @@ -181,6 +181,7 @@ static const struct ib_field deth_table[] = { * ib_ud_header_init - Initialize UD header structure * @payload_bytes:Length of packet payload * @grh_present:GRH flag (if non-zero, GRH will be included) * @immediate_present: specify if immediate data should be used * @header:Structure to initialize * * ib_ud_header_init() initializes the lrh.link_version, lrh.link_next_header, Loading @@ -191,21 +192,13 @@ static const struct ib_field deth_table[] = { */ void ib_ud_header_init(int payload_bytes, int grh_present, int immediate_present, struct ib_ud_header *header) { int header_len; u16 packet_length; memset(header, 0, sizeof *header); header_len = IB_LRH_BYTES + IB_BTH_BYTES + IB_DETH_BYTES; if (grh_present) { header_len += IB_GRH_BYTES; } header->lrh.link_version = 0; header->lrh.link_next_header = grh_present ? IB_LNH_IBA_GLOBAL : IB_LNH_IBA_LOCAL; Loading @@ -231,7 +224,8 @@ void ib_ud_header_init(int payload_bytes, header->lrh.packet_length = cpu_to_be16(packet_length); if (header->immediate_present) header->immediate_present = immediate_present; if (immediate_present) header->bth.opcode = IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE; else header->bth.opcode = IB_OPCODE_UD_SEND_ONLY; Loading drivers/infiniband/core/umem.c +1 −1 Original line number Diff line number Diff line Loading @@ -136,7 +136,7 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr, down_write(¤t->mm->mmap_sem); locked = npages + current->mm->locked_vm; lock_limit = current->signal->rlim[RLIMIT_MEMLOCK].rlim_cur >> PAGE_SHIFT; lock_limit = rlimit(RLIMIT_MEMLOCK) >> PAGE_SHIFT; if ((locked > lock_limit) && !capable(CAP_IPC_LOCK)) { ret = -ENOMEM; Loading drivers/infiniband/core/uverbs_main.c +5 −56 Original line number Diff line number Diff line Loading @@ -42,7 +42,8 @@ #include <linux/poll.h> #include <linux/sched.h> #include <linux/file.h> #include <linux/mount.h> #include <linux/cdev.h> #include <linux/anon_inodes.h> #include <asm/uaccess.h> Loading @@ -52,8 +53,6 @@ MODULE_AUTHOR("Roland Dreier"); MODULE_DESCRIPTION("InfiniBand userspace verbs access"); MODULE_LICENSE("Dual BSD/GPL"); #define INFINIBANDEVENTFS_MAGIC 0x49426576 /* "IBev" */ enum { IB_UVERBS_MAJOR = 231, IB_UVERBS_BASE_MINOR = 192, Loading Loading @@ -109,8 +108,6 @@ static ssize_t (*uverbs_cmd_table[])(struct ib_uverbs_file *file, [IB_USER_VERBS_CMD_DESTROY_SRQ] = ib_uverbs_destroy_srq, }; static struct vfsmount *uverbs_event_mnt; static void ib_uverbs_add_one(struct ib_device *device); static void ib_uverbs_remove_one(struct ib_device *device); Loading Loading @@ -490,7 +487,6 @@ struct file *ib_uverbs_alloc_event_file(struct ib_uverbs_file *uverbs_file, int is_async, int *fd) { struct ib_uverbs_event_file *ev_file; struct path path; struct file *filp; int ret; Loading @@ -513,27 +509,16 @@ struct file *ib_uverbs_alloc_event_file(struct ib_uverbs_file *uverbs_file, goto err; } /* * fops_get() can't fail here, because we're coming from a * system call on a uverbs file, which will already have a * module reference. */ path.mnt = uverbs_event_mnt; path.dentry = uverbs_event_mnt->mnt_root; path_get(&path); filp = alloc_file(&path, FMODE_READ, fops_get(&uverbs_event_fops)); filp = anon_inode_getfile("[uverbs-event]", &uverbs_event_fops, ev_file, O_RDONLY); if (!filp) { ret = -ENFILE; goto err_fd; } filp->private_data = ev_file; return filp; err_fd: fops_put(&uverbs_event_fops); path_put(&path); put_unused_fd(*fd); err: Loading Loading @@ -854,21 +839,6 @@ static void ib_uverbs_remove_one(struct ib_device *device) kfree(uverbs_dev); } static int uverbs_event_get_sb(struct file_system_type *fs_type, int flags, const char *dev_name, void *data, struct vfsmount *mnt) { return get_sb_pseudo(fs_type, "infinibandevent:", NULL, INFINIBANDEVENTFS_MAGIC, mnt); } static struct file_system_type uverbs_event_fs = { /* No owner field so module can be unloaded */ .name = "infinibandeventfs", .get_sb = uverbs_event_get_sb, .kill_sb = kill_litter_super }; static int __init ib_uverbs_init(void) { int ret; Loading @@ -893,33 +863,14 @@ static int __init ib_uverbs_init(void) goto out_class; } ret = register_filesystem(&uverbs_event_fs); if (ret) { printk(KERN_ERR "user_verbs: couldn't register infinibandeventfs\n"); goto out_class; } uverbs_event_mnt = kern_mount(&uverbs_event_fs); if (IS_ERR(uverbs_event_mnt)) { ret = PTR_ERR(uverbs_event_mnt); printk(KERN_ERR "user_verbs: couldn't mount infinibandeventfs\n"); goto out_fs; } ret = ib_register_client(&uverbs_client); if (ret) { printk(KERN_ERR "user_verbs: couldn't register client\n"); goto out_mnt; goto out_class; } return 0; out_mnt: mntput(uverbs_event_mnt); out_fs: unregister_filesystem(&uverbs_event_fs); out_class: class_destroy(uverbs_class); Loading @@ -933,8 +884,6 @@ static int __init ib_uverbs_init(void) static void __exit ib_uverbs_cleanup(void) { ib_unregister_client(&uverbs_client); mntput(uverbs_event_mnt); unregister_filesystem(&uverbs_event_fs); class_destroy(uverbs_class); unregister_chrdev_region(IB_UVERBS_BASE_DEV, IB_UVERBS_MAX_DEVICES); if (overflow_maj) Loading drivers/infiniband/hw/ipath/ipath_user_pages.c +1 −2 Original line number Diff line number Diff line Loading @@ -59,8 +59,7 @@ static int __get_user_pages(unsigned long start_page, size_t num_pages, size_t got; int ret; lock_limit = current->signal->rlim[RLIMIT_MEMLOCK].rlim_cur >> PAGE_SHIFT; lock_limit = rlimit(RLIMIT_MEMLOCK) >> PAGE_SHIFT; if (num_pages > lock_limit) { ret = -ENOMEM; Loading Loading
drivers/infiniband/Kconfig +1 −0 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ config INFINIBAND_USER_MAD config INFINIBAND_USER_ACCESS tristate "InfiniBand userspace access (verbs and CM)" select ANON_INODES ---help--- Userspace InfiniBand access support. This enables the kernel side of userspace verbs and the userspace Loading
drivers/infiniband/core/ud_header.c +4 −10 Original line number Diff line number Diff line Loading @@ -181,6 +181,7 @@ static const struct ib_field deth_table[] = { * ib_ud_header_init - Initialize UD header structure * @payload_bytes:Length of packet payload * @grh_present:GRH flag (if non-zero, GRH will be included) * @immediate_present: specify if immediate data should be used * @header:Structure to initialize * * ib_ud_header_init() initializes the lrh.link_version, lrh.link_next_header, Loading @@ -191,21 +192,13 @@ static const struct ib_field deth_table[] = { */ void ib_ud_header_init(int payload_bytes, int grh_present, int immediate_present, struct ib_ud_header *header) { int header_len; u16 packet_length; memset(header, 0, sizeof *header); header_len = IB_LRH_BYTES + IB_BTH_BYTES + IB_DETH_BYTES; if (grh_present) { header_len += IB_GRH_BYTES; } header->lrh.link_version = 0; header->lrh.link_next_header = grh_present ? IB_LNH_IBA_GLOBAL : IB_LNH_IBA_LOCAL; Loading @@ -231,7 +224,8 @@ void ib_ud_header_init(int payload_bytes, header->lrh.packet_length = cpu_to_be16(packet_length); if (header->immediate_present) header->immediate_present = immediate_present; if (immediate_present) header->bth.opcode = IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE; else header->bth.opcode = IB_OPCODE_UD_SEND_ONLY; Loading
drivers/infiniband/core/umem.c +1 −1 Original line number Diff line number Diff line Loading @@ -136,7 +136,7 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr, down_write(¤t->mm->mmap_sem); locked = npages + current->mm->locked_vm; lock_limit = current->signal->rlim[RLIMIT_MEMLOCK].rlim_cur >> PAGE_SHIFT; lock_limit = rlimit(RLIMIT_MEMLOCK) >> PAGE_SHIFT; if ((locked > lock_limit) && !capable(CAP_IPC_LOCK)) { ret = -ENOMEM; Loading
drivers/infiniband/core/uverbs_main.c +5 −56 Original line number Diff line number Diff line Loading @@ -42,7 +42,8 @@ #include <linux/poll.h> #include <linux/sched.h> #include <linux/file.h> #include <linux/mount.h> #include <linux/cdev.h> #include <linux/anon_inodes.h> #include <asm/uaccess.h> Loading @@ -52,8 +53,6 @@ MODULE_AUTHOR("Roland Dreier"); MODULE_DESCRIPTION("InfiniBand userspace verbs access"); MODULE_LICENSE("Dual BSD/GPL"); #define INFINIBANDEVENTFS_MAGIC 0x49426576 /* "IBev" */ enum { IB_UVERBS_MAJOR = 231, IB_UVERBS_BASE_MINOR = 192, Loading Loading @@ -109,8 +108,6 @@ static ssize_t (*uverbs_cmd_table[])(struct ib_uverbs_file *file, [IB_USER_VERBS_CMD_DESTROY_SRQ] = ib_uverbs_destroy_srq, }; static struct vfsmount *uverbs_event_mnt; static void ib_uverbs_add_one(struct ib_device *device); static void ib_uverbs_remove_one(struct ib_device *device); Loading Loading @@ -490,7 +487,6 @@ struct file *ib_uverbs_alloc_event_file(struct ib_uverbs_file *uverbs_file, int is_async, int *fd) { struct ib_uverbs_event_file *ev_file; struct path path; struct file *filp; int ret; Loading @@ -513,27 +509,16 @@ struct file *ib_uverbs_alloc_event_file(struct ib_uverbs_file *uverbs_file, goto err; } /* * fops_get() can't fail here, because we're coming from a * system call on a uverbs file, which will already have a * module reference. */ path.mnt = uverbs_event_mnt; path.dentry = uverbs_event_mnt->mnt_root; path_get(&path); filp = alloc_file(&path, FMODE_READ, fops_get(&uverbs_event_fops)); filp = anon_inode_getfile("[uverbs-event]", &uverbs_event_fops, ev_file, O_RDONLY); if (!filp) { ret = -ENFILE; goto err_fd; } filp->private_data = ev_file; return filp; err_fd: fops_put(&uverbs_event_fops); path_put(&path); put_unused_fd(*fd); err: Loading Loading @@ -854,21 +839,6 @@ static void ib_uverbs_remove_one(struct ib_device *device) kfree(uverbs_dev); } static int uverbs_event_get_sb(struct file_system_type *fs_type, int flags, const char *dev_name, void *data, struct vfsmount *mnt) { return get_sb_pseudo(fs_type, "infinibandevent:", NULL, INFINIBANDEVENTFS_MAGIC, mnt); } static struct file_system_type uverbs_event_fs = { /* No owner field so module can be unloaded */ .name = "infinibandeventfs", .get_sb = uverbs_event_get_sb, .kill_sb = kill_litter_super }; static int __init ib_uverbs_init(void) { int ret; Loading @@ -893,33 +863,14 @@ static int __init ib_uverbs_init(void) goto out_class; } ret = register_filesystem(&uverbs_event_fs); if (ret) { printk(KERN_ERR "user_verbs: couldn't register infinibandeventfs\n"); goto out_class; } uverbs_event_mnt = kern_mount(&uverbs_event_fs); if (IS_ERR(uverbs_event_mnt)) { ret = PTR_ERR(uverbs_event_mnt); printk(KERN_ERR "user_verbs: couldn't mount infinibandeventfs\n"); goto out_fs; } ret = ib_register_client(&uverbs_client); if (ret) { printk(KERN_ERR "user_verbs: couldn't register client\n"); goto out_mnt; goto out_class; } return 0; out_mnt: mntput(uverbs_event_mnt); out_fs: unregister_filesystem(&uverbs_event_fs); out_class: class_destroy(uverbs_class); Loading @@ -933,8 +884,6 @@ static int __init ib_uverbs_init(void) static void __exit ib_uverbs_cleanup(void) { ib_unregister_client(&uverbs_client); mntput(uverbs_event_mnt); unregister_filesystem(&uverbs_event_fs); class_destroy(uverbs_class); unregister_chrdev_region(IB_UVERBS_BASE_DEV, IB_UVERBS_MAX_DEVICES); if (overflow_maj) Loading
drivers/infiniband/hw/ipath/ipath_user_pages.c +1 −2 Original line number Diff line number Diff line Loading @@ -59,8 +59,7 @@ static int __get_user_pages(unsigned long start_page, size_t num_pages, size_t got; int ret; lock_limit = current->signal->rlim[RLIMIT_MEMLOCK].rlim_cur >> PAGE_SHIFT; lock_limit = rlimit(RLIMIT_MEMLOCK) >> PAGE_SHIFT; if (num_pages > lock_limit) { ret = -ENOMEM; Loading