[PATCH 28/38] staging: comedi: mite: add mite_alloc() and mite_free()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Add `mite_alloc()` to allow drivers to allocate and initialize a `struct
mite_struct` dynamically and export it.  Add `mite_free()`, which is
currently just an inline wrapper for `kfree()`.

Signed-off-by: Ian Abbott <abbotti@xxxxxxxxx>
---
 drivers/staging/comedi/drivers/mite.c | 33 ++++++++++++++++++++++-----------
 drivers/staging/comedi/drivers/mite.h |  7 +++++++
 2 files changed, 29 insertions(+), 11 deletions(-)

diff --git a/drivers/staging/comedi/drivers/mite.c b/drivers/staging/comedi/drivers/mite.c
index b63f86c..7355455 100644
--- a/drivers/staging/comedi/drivers/mite.c
+++ b/drivers/staging/comedi/drivers/mite.c
@@ -66,6 +66,25 @@ EXPORT_SYMBOL(mite_devices);
 
 #define TOP_OF_PAGE(x) ((x)|(~(PAGE_MASK)))
 
+struct mite_struct *mite_alloc(struct pci_dev *pcidev)
+{
+	struct mite_struct *mite;
+	unsigned int i;
+
+	mite = kzalloc(sizeof(*mite), GFP_KERNEL);
+	if (mite) {
+		spin_lock_init(&mite->lock);
+		mite->pcidev = pcidev;
+		for (i = 0; i < MAX_MITE_DMA_CHANNELS; ++i) {
+			mite->channels[i].mite = mite;
+			mite->channels[i].channel = i;
+			mite->channels[i].done = 1;
+		}
+	}
+	return mite;
+}
+EXPORT_SYMBOL(mite_alloc);
+
 static void mite_init(void)
 {
 	struct pci_dev *pcidev = NULL;
@@ -73,21 +92,13 @@ static void mite_init(void)
 
 	for_each_pci_dev(pcidev) {
 		if (pcidev->vendor == PCI_VENDOR_ID_NI) {
-			unsigned i;
-
-			mite = kzalloc(sizeof(*mite), GFP_KERNEL);
+			mite = mite_alloc(pcidev);
 			if (!mite) {
 				pr_err("allocation failed\n");
 				pci_dev_put(pcidev);
 				return;
 			}
-			spin_lock_init(&mite->lock);
-			mite->pcidev = pci_dev_get(pcidev);
-			for (i = 0; i < MAX_MITE_DMA_CHANNELS; ++i) {
-				mite->channels[i].mite = mite;
-				mite->channels[i].channel = i;
-				mite->channels[i].done = 1;
-			}
+			pci_dev_get(pcidev);
 			mite->next = mite_devices;
 			mite_devices = mite;
 		}
@@ -213,7 +224,7 @@ static void mite_cleanup(void)
 	for (mite = mite_devices; mite; mite = next) {
 		pci_dev_put(mite->pcidev);
 		next = mite->next;
-		kfree(mite);
+		mite_free(mite);
 	}
 }
 
diff --git a/drivers/staging/comedi/drivers/mite.h b/drivers/staging/comedi/drivers/mite.h
index c5157c3..912bae1 100644
--- a/drivers/staging/comedi/drivers/mite.h
+++ b/drivers/staging/comedi/drivers/mite.h
@@ -80,6 +80,13 @@ struct mite_struct {
 
 extern struct mite_struct *mite_devices;
 
+struct mite_struct *mite_alloc(struct pci_dev *pcidev);
+
+static inline void mite_free(struct mite_struct *mite)
+{
+	kfree(mite);
+}
+
 static inline unsigned int mite_irq(struct mite_struct *mite)
 {
 	return mite->pcidev->irq;
-- 
1.7.12

_______________________________________________
devel mailing list
devel@xxxxxxxxxxxxxxxxxxxxxx
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel


[Index of Archives]     [Linux Driver Backports]     [DMA Engine]     [Linux GPIO]     [Linux SPI]     [Video for Linux]     [Linux USB Devel]     [Linux Coverity]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]
  Powered by Linux