aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/core/uverbs_main.c
diff options
context:
space:
mode:
authorAlexander Chiang <achiang@hp.com>2010-02-02 14:07:49 -0500
committerRoland Dreier <rolandd@cisco.com>2010-02-24 13:23:39 -0500
commit055422ddbb0a7610c5f57a056743d7336a39e90f (patch)
tree656f63c23151a9b582bc570daa38398d5269246f /drivers/infiniband/core/uverbs_main.c
parent676ad585531e965416fd958747894541dabcec96 (diff)
IB/uverbs: Convert *cdev to cdev in struct ib_uverbs_device
Instead of storing a pointer to a cdev, embed the entire struct cdev. This change allows us to use the container_of() macro in ib_uverbs_open() in a future patch. This change increases the size of struct ib_uverbs_device to 168 bytes across 3 cachelines from 80 bytes in 2 cachelines. However, we rearrange the members so that everything fits into the first cacheline except for the struct cdev. Finally, we don't touch the cdev in any fastpaths, so this change shouldn't negatively affect performance. Signed-off-by: Alex Chiang <achiang@hp.com> Signed-off-by: Roland Dreier <rolandd@cisco.com>
Diffstat (limited to 'drivers/infiniband/core/uverbs_main.c')
-rw-r--r--drivers/infiniband/core/uverbs_main.c23
1 files changed, 10 insertions, 13 deletions
diff --git a/drivers/infiniband/core/uverbs_main.c b/drivers/infiniband/core/uverbs_main.c
index 5f284ffd430e..5da9a734959a 100644
--- a/drivers/infiniband/core/uverbs_main.c
+++ b/drivers/infiniband/core/uverbs_main.c
@@ -43,7 +43,6 @@
43#include <linux/sched.h> 43#include <linux/sched.h>
44#include <linux/file.h> 44#include <linux/file.h>
45#include <linux/mount.h> 45#include <linux/mount.h>
46#include <linux/cdev.h>
47 46
48#include <asm/uaccess.h> 47#include <asm/uaccess.h>
49 48
@@ -761,17 +760,15 @@ static void ib_uverbs_add_one(struct ib_device *device)
761 uverbs_dev->ib_dev = device; 760 uverbs_dev->ib_dev = device;
762 uverbs_dev->num_comp_vectors = device->num_comp_vectors; 761 uverbs_dev->num_comp_vectors = device->num_comp_vectors;
763 762
764 uverbs_dev->cdev = cdev_alloc(); 763 cdev_init(&uverbs_dev->cdev, NULL);
765 if (!uverbs_dev->cdev) 764 uverbs_dev->cdev.owner = THIS_MODULE;
766 goto err; 765 uverbs_dev->cdev.ops = device->mmap ? &uverbs_mmap_fops : &uverbs_fops;
767 uverbs_dev->cdev->owner = THIS_MODULE; 766 kobject_set_name(&uverbs_dev->cdev.kobj, "uverbs%d", uverbs_dev->devnum);
768 uverbs_dev->cdev->ops = device->mmap ? &uverbs_mmap_fops : &uverbs_fops; 767 if (cdev_add(&uverbs_dev->cdev, IB_UVERBS_BASE_DEV + uverbs_dev->devnum, 1))
769 kobject_set_name(&uverbs_dev->cdev->kobj, "uverbs%d", uverbs_dev->devnum);
770 if (cdev_add(uverbs_dev->cdev, IB_UVERBS_BASE_DEV + uverbs_dev->devnum, 1))
771 goto err_cdev; 768 goto err_cdev;
772 769
773 uverbs_dev->dev = device_create(uverbs_class, device->dma_device, 770 uverbs_dev->dev = device_create(uverbs_class, device->dma_device,
774 uverbs_dev->cdev->dev, uverbs_dev, 771 uverbs_dev->cdev.dev, uverbs_dev,
775 "uverbs%d", uverbs_dev->devnum); 772 "uverbs%d", uverbs_dev->devnum);
776 if (IS_ERR(uverbs_dev->dev)) 773 if (IS_ERR(uverbs_dev->dev))
777 goto err_cdev; 774 goto err_cdev;
@@ -790,10 +787,10 @@ static void ib_uverbs_add_one(struct ib_device *device)
790 return; 787 return;
791 788
792err_class: 789err_class:
793 device_destroy(uverbs_class, uverbs_dev->cdev->dev); 790 device_destroy(uverbs_class, uverbs_dev->cdev.dev);
794 791
795err_cdev: 792err_cdev:
796 cdev_del(uverbs_dev->cdev); 793 cdev_del(&uverbs_dev->cdev);
797 clear_bit(uverbs_dev->devnum, dev_map); 794 clear_bit(uverbs_dev->devnum, dev_map);
798 795
799err: 796err:
@@ -811,8 +808,8 @@ static void ib_uverbs_remove_one(struct ib_device *device)
811 return; 808 return;
812 809
813 dev_set_drvdata(uverbs_dev->dev, NULL); 810 dev_set_drvdata(uverbs_dev->dev, NULL);
814 device_destroy(uverbs_class, uverbs_dev->cdev->dev); 811 device_destroy(uverbs_class, uverbs_dev->cdev.dev);
815 cdev_del(uverbs_dev->cdev); 812 cdev_del(&uverbs_dev->cdev);
816 813
817 spin_lock(&map_lock); 814 spin_lock(&map_lock);
818 dev_table[uverbs_dev->devnum] = NULL; 815 dev_table[uverbs_dev->devnum] = NULL;