Commit fe8875e5 authored by Roland Dreier's avatar Roland Dreier

Merge branch 'misc' into for-next

Conflicts:
	drivers/infiniband/core/uverbs_main.c
parents f5772150 a265e558
...@@ -20,6 +20,7 @@ config INFINIBAND_USER_MAD ...@@ -20,6 +20,7 @@ config INFINIBAND_USER_MAD
config INFINIBAND_USER_ACCESS config INFINIBAND_USER_ACCESS
tristate "InfiniBand userspace access (verbs and CM)" tristate "InfiniBand userspace access (verbs and CM)"
select ANON_INODES
---help--- ---help---
Userspace InfiniBand access support. This enables the Userspace InfiniBand access support. This enables the
kernel side of userspace verbs and the userspace kernel side of userspace verbs and the userspace
......
...@@ -181,6 +181,7 @@ static const struct ib_field deth_table[] = { ...@@ -181,6 +181,7 @@ static const struct ib_field deth_table[] = {
* ib_ud_header_init - Initialize UD header structure * ib_ud_header_init - Initialize UD header structure
* @payload_bytes:Length of packet payload * @payload_bytes:Length of packet payload
* @grh_present:GRH flag (if non-zero, GRH will be included) * @grh_present:GRH flag (if non-zero, GRH will be included)
* @immediate_present: specify if immediate data should be used
* @header:Structure to initialize * @header:Structure to initialize
* *
* ib_ud_header_init() initializes the lrh.link_version, lrh.link_next_header, * ib_ud_header_init() initializes the lrh.link_version, lrh.link_next_header,
...@@ -191,21 +192,13 @@ static const struct ib_field deth_table[] = { ...@@ -191,21 +192,13 @@ static const struct ib_field deth_table[] = {
*/ */
void ib_ud_header_init(int payload_bytes, void ib_ud_header_init(int payload_bytes,
int grh_present, int grh_present,
int immediate_present,
struct ib_ud_header *header) struct ib_ud_header *header)
{ {
int header_len;
u16 packet_length; u16 packet_length;
memset(header, 0, sizeof *header); 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_version = 0;
header->lrh.link_next_header = header->lrh.link_next_header =
grh_present ? IB_LNH_IBA_GLOBAL : IB_LNH_IBA_LOCAL; grh_present ? IB_LNH_IBA_GLOBAL : IB_LNH_IBA_LOCAL;
...@@ -231,7 +224,8 @@ void ib_ud_header_init(int payload_bytes, ...@@ -231,7 +224,8 @@ void ib_ud_header_init(int payload_bytes,
header->lrh.packet_length = cpu_to_be16(packet_length); 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; header->bth.opcode = IB_OPCODE_UD_SEND_ONLY_WITH_IMMEDIATE;
else else
header->bth.opcode = IB_OPCODE_UD_SEND_ONLY; header->bth.opcode = IB_OPCODE_UD_SEND_ONLY;
......
...@@ -136,7 +136,7 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr, ...@@ -136,7 +136,7 @@ struct ib_umem *ib_umem_get(struct ib_ucontext *context, unsigned long addr,
down_write(&current->mm->mmap_sem); down_write(&current->mm->mmap_sem);
locked = npages + current->mm->locked_vm; 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)) { if ((locked > lock_limit) && !capable(CAP_IPC_LOCK)) {
ret = -ENOMEM; ret = -ENOMEM;
......
...@@ -42,7 +42,8 @@ ...@@ -42,7 +42,8 @@
#include <linux/poll.h> #include <linux/poll.h>
#include <linux/sched.h> #include <linux/sched.h>
#include <linux/file.h> #include <linux/file.h>
#include <linux/mount.h> #include <linux/cdev.h>
#include <linux/anon_inodes.h>
#include <asm/uaccess.h> #include <asm/uaccess.h>
...@@ -52,8 +53,6 @@ MODULE_AUTHOR("Roland Dreier"); ...@@ -52,8 +53,6 @@ MODULE_AUTHOR("Roland Dreier");
MODULE_DESCRIPTION("InfiniBand userspace verbs access"); MODULE_DESCRIPTION("InfiniBand userspace verbs access");
MODULE_LICENSE("Dual BSD/GPL"); MODULE_LICENSE("Dual BSD/GPL");
#define INFINIBANDEVENTFS_MAGIC 0x49426576 /* "IBev" */
enum { enum {
IB_UVERBS_MAJOR = 231, IB_UVERBS_MAJOR = 231,
IB_UVERBS_BASE_MINOR = 192, IB_UVERBS_BASE_MINOR = 192,
...@@ -109,8 +108,6 @@ static ssize_t (*uverbs_cmd_table[])(struct ib_uverbs_file *file, ...@@ -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, [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_add_one(struct ib_device *device);
static void ib_uverbs_remove_one(struct ib_device *device); static void ib_uverbs_remove_one(struct ib_device *device);
...@@ -490,7 +487,6 @@ struct file *ib_uverbs_alloc_event_file(struct ib_uverbs_file *uverbs_file, ...@@ -490,7 +487,6 @@ struct file *ib_uverbs_alloc_event_file(struct ib_uverbs_file *uverbs_file,
int is_async, int *fd) int is_async, int *fd)
{ {
struct ib_uverbs_event_file *ev_file; struct ib_uverbs_event_file *ev_file;
struct path path;
struct file *filp; struct file *filp;
int ret; int ret;
...@@ -513,27 +509,16 @@ struct file *ib_uverbs_alloc_event_file(struct ib_uverbs_file *uverbs_file, ...@@ -513,27 +509,16 @@ struct file *ib_uverbs_alloc_event_file(struct ib_uverbs_file *uverbs_file,
goto err; goto err;
} }
/* filp = anon_inode_getfile("[uverbs-event]", &uverbs_event_fops,
* fops_get() can't fail here, because we're coming from a ev_file, O_RDONLY);
* 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));
if (!filp) { if (!filp) {
ret = -ENFILE; ret = -ENFILE;
goto err_fd; goto err_fd;
} }
filp->private_data = ev_file;
return filp; return filp;
err_fd: err_fd:
fops_put(&uverbs_event_fops);
path_put(&path);
put_unused_fd(*fd); put_unused_fd(*fd);
err: err:
...@@ -854,21 +839,6 @@ static void ib_uverbs_remove_one(struct ib_device *device) ...@@ -854,21 +839,6 @@ static void ib_uverbs_remove_one(struct ib_device *device)
kfree(uverbs_dev); 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) static int __init ib_uverbs_init(void)
{ {
int ret; int ret;
...@@ -893,33 +863,14 @@ static int __init ib_uverbs_init(void) ...@@ -893,33 +863,14 @@ static int __init ib_uverbs_init(void)
goto out_class; 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); ret = ib_register_client(&uverbs_client);
if (ret) { if (ret) {
printk(KERN_ERR "user_verbs: couldn't register client\n"); printk(KERN_ERR "user_verbs: couldn't register client\n");
goto out_mnt; goto out_class;
} }
return 0; return 0;
out_mnt:
mntput(uverbs_event_mnt);
out_fs:
unregister_filesystem(&uverbs_event_fs);
out_class: out_class:
class_destroy(uverbs_class); class_destroy(uverbs_class);
...@@ -933,8 +884,6 @@ out: ...@@ -933,8 +884,6 @@ out:
static void __exit ib_uverbs_cleanup(void) static void __exit ib_uverbs_cleanup(void)
{ {
ib_unregister_client(&uverbs_client); ib_unregister_client(&uverbs_client);
mntput(uverbs_event_mnt);
unregister_filesystem(&uverbs_event_fs);
class_destroy(uverbs_class); class_destroy(uverbs_class);
unregister_chrdev_region(IB_UVERBS_BASE_DEV, IB_UVERBS_MAX_DEVICES); unregister_chrdev_region(IB_UVERBS_BASE_DEV, IB_UVERBS_MAX_DEVICES);
if (overflow_maj) if (overflow_maj)
......
...@@ -59,8 +59,7 @@ static int __get_user_pages(unsigned long start_page, size_t num_pages, ...@@ -59,8 +59,7 @@ static int __get_user_pages(unsigned long start_page, size_t num_pages,
size_t got; size_t got;
int ret; int ret;
lock_limit = current->signal->rlim[RLIMIT_MEMLOCK].rlim_cur >> lock_limit = rlimit(RLIMIT_MEMLOCK) >> PAGE_SHIFT;
PAGE_SHIFT;
if (num_pages > lock_limit) { if (num_pages > lock_limit) {
ret = -ENOMEM; ret = -ENOMEM;
......
...@@ -1228,7 +1228,7 @@ static int build_mlx_header(struct mlx4_ib_sqp *sqp, struct ib_send_wr *wr, ...@@ -1228,7 +1228,7 @@ static int build_mlx_header(struct mlx4_ib_sqp *sqp, struct ib_send_wr *wr,
for (i = 0; i < wr->num_sge; ++i) for (i = 0; i < wr->num_sge; ++i)
send_size += wr->sg_list[i].length; send_size += wr->sg_list[i].length;
ib_ud_header_init(send_size, mlx4_ib_ah_grh_present(ah), &sqp->ud_header); ib_ud_header_init(send_size, mlx4_ib_ah_grh_present(ah), 0, &sqp->ud_header);
sqp->ud_header.lrh.service_level = sqp->ud_header.lrh.service_level =
be32_to_cpu(ah->av.sl_tclass_flowlabel) >> 28; be32_to_cpu(ah->av.sl_tclass_flowlabel) >> 28;
......
...@@ -1494,7 +1494,7 @@ static int build_mlx_header(struct mthca_dev *dev, struct mthca_sqp *sqp, ...@@ -1494,7 +1494,7 @@ static int build_mlx_header(struct mthca_dev *dev, struct mthca_sqp *sqp,
u16 pkey; u16 pkey;
ib_ud_header_init(256, /* assume a MAD */ ib_ud_header_init(256, /* assume a MAD */
mthca_ah_grh_present(to_mah(wr->wr.ud.ah)), mthca_ah_grh_present(to_mah(wr->wr.ud.ah)), 0,
&sqp->ud_header); &sqp->ud_header);
err = mthca_read_ah(dev, to_mah(wr->wr.ud.ah), &sqp->ud_header); err = mthca_read_ah(dev, to_mah(wr->wr.ud.ah), &sqp->ud_header);
......
...@@ -232,6 +232,7 @@ void ib_unpack(const struct ib_field *desc, ...@@ -232,6 +232,7 @@ void ib_unpack(const struct ib_field *desc,
void ib_ud_header_init(int payload_bytes, void ib_ud_header_init(int payload_bytes,
int grh_present, int grh_present,
int immediate_present,
struct ib_ud_header *header); struct ib_ud_header *header);
int ib_ud_header_pack(struct ib_ud_header *header, int ib_ud_header_pack(struct ib_ud_header *header,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment