aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2015-09-26 20:56:50 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2015-09-26 20:56:50 -0400
commitb11e7b81bf94f633ae44f12a3d2e198277781952 (patch)
treeefdd8d386afe0e3f2e1038090c2a25a9a05895a7
parent7c1efeae6d7d7b1ba10453e35ee4c2de1d814c2b (diff)
parent74c600e36455af85c593702670f38709ca1951ce (diff)
Merge tag 'staging-4.3-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging
Pull staging driver fixes from Greg KH: "Here are some tiny staging driver and documentation fixes for 4.3-rc3. All of these resolve reported issues that people have found and have been in the linux-next tree for a while with no problems" * tag 'staging-4.3-rc3' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/staging: MAINTAINERS: Update email address for Martyn Welch staging: ion: fix corruption of ion_import_dma_buf staging: dgap: Remove myself from the MAINTAINERS file staging: most: Add dependency to HAS_IOMEM staging: unisys: remove reference of visorutil staging: unisys: visornic: handle error return from device registration staging: unisys: stop device registration before visorbus registration staging: unisys: visorbus: Unregister driver on error staging: unisys: visornic: Fix receive bytes statistics staging: unisys: unregister netdev when create debugfs fails staging: fbtft: replace master->setup() with spi_setup() staging: fbtft: fix 9-bit SPI support detection staging/lustre: change Lustre URLs and mailing list staging/android: Update ION TODO per LPC discussion Staging: most: MOST and MOSTCORE should depend on HAS_DMA staging: most: fix HDM_USB dependencies and build errors
-rw-r--r--MAINTAINERS7
-rw-r--r--drivers/staging/android/TODO20
-rw-r--r--drivers/staging/android/ion/ion.c6
-rw-r--r--drivers/staging/fbtft/fb_uc1611.c2
-rw-r--r--drivers/staging/fbtft/fb_watterott.c4
-rw-r--r--drivers/staging/fbtft/fbtft-core.c10
-rw-r--r--drivers/staging/fbtft/flexfb.c11
-rw-r--r--drivers/staging/lustre/README.txt16
-rw-r--r--drivers/staging/most/Kconfig1
-rw-r--r--drivers/staging/most/hdm-dim2/Kconfig1
-rw-r--r--drivers/staging/most/hdm-usb/Kconfig2
-rw-r--r--drivers/staging/most/mostcore/Kconfig1
-rw-r--r--drivers/staging/unisys/visorbus/Makefile1
-rw-r--r--drivers/staging/unisys/visorbus/visorbus_main.c13
-rw-r--r--drivers/staging/unisys/visornic/visornic_main.c18
15 files changed, 66 insertions, 47 deletions
diff --git a/MAINTAINERS b/MAINTAINERS
index 5de7c7945022..a3077df7e68a 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -3401,7 +3401,6 @@ F: drivers/staging/dgnc/
3401 3401
3402DIGI EPCA PCI PRODUCTS 3402DIGI EPCA PCI PRODUCTS
3403M: Lidza Louina <lidza.louina@gmail.com> 3403M: Lidza Louina <lidza.louina@gmail.com>
3404M: Mark Hounschell <markh@compro.net>
3405M: Daeseok Youn <daeseok.youn@gmail.com> 3404M: Daeseok Youn <daeseok.youn@gmail.com>
3406L: driverdev-devel@linuxdriverproject.org 3405L: driverdev-devel@linuxdriverproject.org
3407S: Maintained 3406S: Maintained
@@ -9910,8 +9909,8 @@ F: drivers/staging/media/lirc/
9910STAGING - LUSTRE PARALLEL FILESYSTEM 9909STAGING - LUSTRE PARALLEL FILESYSTEM
9911M: Oleg Drokin <oleg.drokin@intel.com> 9910M: Oleg Drokin <oleg.drokin@intel.com>
9912M: Andreas Dilger <andreas.dilger@intel.com> 9911M: Andreas Dilger <andreas.dilger@intel.com>
9913L: HPDD-discuss@lists.01.org (moderated for non-subscribers) 9912L: lustre-devel@lists.lustre.org (moderated for non-subscribers)
9914W: http://lustre.opensfs.org/ 9913W: http://wiki.lustre.org/
9915S: Maintained 9914S: Maintained
9916F: drivers/staging/lustre 9915F: drivers/staging/lustre
9917 9916
@@ -11203,7 +11202,7 @@ F: drivers/vlynq/vlynq.c
11203F: include/linux/vlynq.h 11202F: include/linux/vlynq.h
11204 11203
11205VME SUBSYSTEM 11204VME SUBSYSTEM
11206M: Martyn Welch <martyn.welch@ge.com> 11205M: Martyn Welch <martyn@welchs.me.uk>
11207M: Manohar Vanga <manohar.vanga@gmail.com> 11206M: Manohar Vanga <manohar.vanga@gmail.com>
11208M: Greg Kroah-Hartman <gregkh@linuxfoundation.org> 11207M: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
11209L: devel@driverdev.osuosl.org 11208L: devel@driverdev.osuosl.org
diff --git a/drivers/staging/android/TODO b/drivers/staging/android/TODO
index 20288fc53946..8f3ac37bfe12 100644
--- a/drivers/staging/android/TODO
+++ b/drivers/staging/android/TODO
@@ -5,5 +5,25 @@ TODO:
5 - add proper arch dependencies as needed 5 - add proper arch dependencies as needed
6 - audit userspace interfaces to make sure they are sane 6 - audit userspace interfaces to make sure they are sane
7 7
8
9ion/
10 - Remove ION_IOC_SYNC: Flushing for devices should be purely a kernel internal
11 interface on top of dma-buf. flush_for_device needs to be added to dma-buf
12 first.
13 - Remove ION_IOC_CUSTOM: Atm used for cache flushing for cpu access in some
14 vendor trees. Should be replaced with an ioctl on the dma-buf to expose the
15 begin/end_cpu_access hooks to userspace.
16 - Clarify the tricks ion plays with explicitly managing coherency behind the
17 dma api's back (this is absolutely needed for high-perf gpu drivers): Add an
18 explicit coherency management mode to flush_for_device to be used by drivers
19 which want to manage caches themselves and which indicates whether cpu caches
20 need flushing.
21 - With those removed there's probably no use for ION_IOC_IMPORT anymore either
22 since ion would just be the central allocator for shared buffers.
23 - Add dt-binding to expose cma regions as ion heaps, with the rule that any
24 such cma regions must already be used by some device for dma. I.e. ion only
25 exposes existing cma regions and doesn't reserve unecessarily memory when
26 booting a system which doesn't use ion.
27
8Please send patches to Greg Kroah-Hartman <greg@kroah.com> and Cc: 28Please send patches to Greg Kroah-Hartman <greg@kroah.com> and Cc:
9Arve Hjønnevåg <arve@android.com> and Riley Andrews <riandrews@android.com> 29Arve Hjønnevåg <arve@android.com> and Riley Andrews <riandrews@android.com>
diff --git a/drivers/staging/android/ion/ion.c b/drivers/staging/android/ion/ion.c
index 217aa537c4eb..6e8d8392ca38 100644
--- a/drivers/staging/android/ion/ion.c
+++ b/drivers/staging/android/ion/ion.c
@@ -1179,13 +1179,13 @@ struct ion_handle *ion_import_dma_buf(struct ion_client *client, int fd)
1179 mutex_unlock(&client->lock); 1179 mutex_unlock(&client->lock);
1180 goto end; 1180 goto end;
1181 } 1181 }
1182 mutex_unlock(&client->lock);
1183 1182
1184 handle = ion_handle_create(client, buffer); 1183 handle = ion_handle_create(client, buffer);
1185 if (IS_ERR(handle)) 1184 if (IS_ERR(handle)) {
1185 mutex_unlock(&client->lock);
1186 goto end; 1186 goto end;
1187 }
1187 1188
1188 mutex_lock(&client->lock);
1189 ret = ion_handle_add(client, handle); 1189 ret = ion_handle_add(client, handle);
1190 mutex_unlock(&client->lock); 1190 mutex_unlock(&client->lock);
1191 if (ret) { 1191 if (ret) {
diff --git a/drivers/staging/fbtft/fb_uc1611.c b/drivers/staging/fbtft/fb_uc1611.c
index 32f3a9d921d6..5cafa50d1fac 100644
--- a/drivers/staging/fbtft/fb_uc1611.c
+++ b/drivers/staging/fbtft/fb_uc1611.c
@@ -76,7 +76,7 @@ static int init_display(struct fbtft_par *par)
76 76
77 /* Set CS active high */ 77 /* Set CS active high */
78 par->spi->mode |= SPI_CS_HIGH; 78 par->spi->mode |= SPI_CS_HIGH;
79 ret = par->spi->master->setup(par->spi); 79 ret = spi_setup(par->spi);
80 if (ret) { 80 if (ret) {
81 dev_err(par->info->device, "Could not set SPI_CS_HIGH\n"); 81 dev_err(par->info->device, "Could not set SPI_CS_HIGH\n");
82 return ret; 82 return ret;
diff --git a/drivers/staging/fbtft/fb_watterott.c b/drivers/staging/fbtft/fb_watterott.c
index 88fb2c0132d5..8eae6ef25846 100644
--- a/drivers/staging/fbtft/fb_watterott.c
+++ b/drivers/staging/fbtft/fb_watterott.c
@@ -169,7 +169,7 @@ static int init_display(struct fbtft_par *par)
169 /* enable SPI interface by having CS and MOSI low during reset */ 169 /* enable SPI interface by having CS and MOSI low during reset */
170 save_mode = par->spi->mode; 170 save_mode = par->spi->mode;
171 par->spi->mode |= SPI_CS_HIGH; 171 par->spi->mode |= SPI_CS_HIGH;
172 ret = par->spi->master->setup(par->spi); /* set CS inactive low */ 172 ret = spi_setup(par->spi); /* set CS inactive low */
173 if (ret) { 173 if (ret) {
174 dev_err(par->info->device, "Could not set SPI_CS_HIGH\n"); 174 dev_err(par->info->device, "Could not set SPI_CS_HIGH\n");
175 return ret; 175 return ret;
@@ -180,7 +180,7 @@ static int init_display(struct fbtft_par *par)
180 par->fbtftops.reset(par); 180 par->fbtftops.reset(par);
181 mdelay(1000); 181 mdelay(1000);
182 par->spi->mode = save_mode; 182 par->spi->mode = save_mode;
183 ret = par->spi->master->setup(par->spi); 183 ret = spi_setup(par->spi);
184 if (ret) { 184 if (ret) {
185 dev_err(par->info->device, "Could not restore SPI mode\n"); 185 dev_err(par->info->device, "Could not restore SPI mode\n");
186 return ret; 186 return ret;
diff --git a/drivers/staging/fbtft/fbtft-core.c b/drivers/staging/fbtft/fbtft-core.c
index 23392eb6799e..7f5fa3d1cab0 100644
--- a/drivers/staging/fbtft/fbtft-core.c
+++ b/drivers/staging/fbtft/fbtft-core.c
@@ -1436,15 +1436,11 @@ int fbtft_probe_common(struct fbtft_display *display,
1436 1436
1437 /* 9-bit SPI setup */ 1437 /* 9-bit SPI setup */
1438 if (par->spi && display->buswidth == 9) { 1438 if (par->spi && display->buswidth == 9) {
1439 par->spi->bits_per_word = 9; 1439 if (par->spi->master->bits_per_word_mask & SPI_BPW_MASK(9)) {
1440 ret = par->spi->master->setup(par->spi); 1440 par->spi->bits_per_word = 9;
1441 if (ret) { 1441 } else {
1442 dev_warn(&par->spi->dev, 1442 dev_warn(&par->spi->dev,
1443 "9-bit SPI not available, emulating using 8-bit.\n"); 1443 "9-bit SPI not available, emulating using 8-bit.\n");
1444 par->spi->bits_per_word = 8;
1445 ret = par->spi->master->setup(par->spi);
1446 if (ret)
1447 goto out_release;
1448 /* allocate buffer with room for dc bits */ 1444 /* allocate buffer with room for dc bits */
1449 par->extra = devm_kzalloc(par->info->device, 1445 par->extra = devm_kzalloc(par->info->device,
1450 par->txbuf.len + (par->txbuf.len / 8) + 8, 1446 par->txbuf.len + (par->txbuf.len / 8) + 8,
diff --git a/drivers/staging/fbtft/flexfb.c b/drivers/staging/fbtft/flexfb.c
index c763efc5de7d..3f380a0086c3 100644
--- a/drivers/staging/fbtft/flexfb.c
+++ b/drivers/staging/fbtft/flexfb.c
@@ -463,15 +463,12 @@ static int flexfb_probe_common(struct spi_device *sdev,
463 } 463 }
464 par->fbtftops.write_register = fbtft_write_reg8_bus9; 464 par->fbtftops.write_register = fbtft_write_reg8_bus9;
465 par->fbtftops.write_vmem = fbtft_write_vmem16_bus9; 465 par->fbtftops.write_vmem = fbtft_write_vmem16_bus9;
466 sdev->bits_per_word = 9; 466 if (par->spi->master->bits_per_word_mask
467 ret = sdev->master->setup(sdev); 467 & SPI_BPW_MASK(9)) {
468 if (ret) { 468 par->spi->bits_per_word = 9;
469 } else {
469 dev_warn(dev, 470 dev_warn(dev,
470 "9-bit SPI not available, emulating using 8-bit.\n"); 471 "9-bit SPI not available, emulating using 8-bit.\n");
471 sdev->bits_per_word = 8;
472 ret = sdev->master->setup(sdev);
473 if (ret)
474 goto out_release;
475 /* allocate buffer with room for dc bits */ 472 /* allocate buffer with room for dc bits */
476 par->extra = devm_kzalloc(par->info->device, 473 par->extra = devm_kzalloc(par->info->device,
477 par->txbuf.len + (par->txbuf.len / 8) + 8, 474 par->txbuf.len + (par->txbuf.len / 8) + 8,
diff --git a/drivers/staging/lustre/README.txt b/drivers/staging/lustre/README.txt
index cf0ca50ff83b..0676243eea9e 100644
--- a/drivers/staging/lustre/README.txt
+++ b/drivers/staging/lustre/README.txt
@@ -14,10 +14,8 @@ Unlike shared disk storage cluster filesystems (e.g. OCFS2, GFS, GPFS),
14Lustre has independent Metadata and Data servers that clients can access 14Lustre has independent Metadata and Data servers that clients can access
15in parallel to maximize performance. 15in parallel to maximize performance.
16 16
17In order to use Lustre client you will need to download lustre client 17In order to use Lustre client you will need to download the "lustre-client"
18tools from 18package that contains the userspace tools from http://lustre.org/download/
19https://downloads.hpdd.intel.com/public/lustre/latest-feature-release/
20the package name is lustre-client.
21 19
22You will need to install and configure your Lustre servers separately. 20You will need to install and configure your Lustre servers separately.
23 21
@@ -76,12 +74,10 @@ Mount Options
76 74
77More Information 75More Information
78================ 76================
79You can get more information at 77You can get more information at the Lustre website: http://wiki.lustre.org/
80OpenSFS website: http://lustre.opensfs.org/about/
81Intel HPDD wiki: https://wiki.hpdd.intel.com
82 78
83Out of tree Lustre client and server code is available at: 79Source for the userspace tools and out-of-tree client and server code
84http://git.whamcloud.com/fs/lustre-release.git 80is available at: http://git.hpdd.intel.com/fs/lustre-release.git
85 81
86Latest binary packages: 82Latest binary packages:
87http://lustre.opensfs.org/download-lustre/ 83http://lustre.org/download/
diff --git a/drivers/staging/most/Kconfig b/drivers/staging/most/Kconfig
index d50de03de7b9..0b9b9b539f70 100644
--- a/drivers/staging/most/Kconfig
+++ b/drivers/staging/most/Kconfig
@@ -1,5 +1,6 @@
1menuconfig MOST 1menuconfig MOST
2 tristate "MOST driver" 2 tristate "MOST driver"
3 depends on HAS_DMA
3 select MOSTCORE 4 select MOSTCORE
4 default n 5 default n
5 ---help--- 6 ---help---
diff --git a/drivers/staging/most/hdm-dim2/Kconfig b/drivers/staging/most/hdm-dim2/Kconfig
index 1d4ad1d67758..fc548769479b 100644
--- a/drivers/staging/most/hdm-dim2/Kconfig
+++ b/drivers/staging/most/hdm-dim2/Kconfig
@@ -5,6 +5,7 @@
5config HDM_DIM2 5config HDM_DIM2
6 tristate "DIM2 HDM" 6 tristate "DIM2 HDM"
7 depends on AIM_NETWORK 7 depends on AIM_NETWORK
8 depends on HAS_IOMEM
8 9
9 ---help--- 10 ---help---
10 Say Y here if you want to connect via MediaLB to network transceiver. 11 Say Y here if you want to connect via MediaLB to network transceiver.
diff --git a/drivers/staging/most/hdm-usb/Kconfig b/drivers/staging/most/hdm-usb/Kconfig
index a482c3fdf34b..ec1546312ee6 100644
--- a/drivers/staging/most/hdm-usb/Kconfig
+++ b/drivers/staging/most/hdm-usb/Kconfig
@@ -4,7 +4,7 @@
4 4
5config HDM_USB 5config HDM_USB
6 tristate "USB HDM" 6 tristate "USB HDM"
7 depends on USB 7 depends on USB && NET
8 select AIM_NETWORK 8 select AIM_NETWORK
9 ---help--- 9 ---help---
10 Say Y here if you want to connect via USB to network tranceiver. 10 Say Y here if you want to connect via USB to network tranceiver.
diff --git a/drivers/staging/most/mostcore/Kconfig b/drivers/staging/most/mostcore/Kconfig
index 38abf1b21b66..47172546d728 100644
--- a/drivers/staging/most/mostcore/Kconfig
+++ b/drivers/staging/most/mostcore/Kconfig
@@ -4,6 +4,7 @@
4 4
5config MOSTCORE 5config MOSTCORE
6 tristate "MOST Core" 6 tristate "MOST Core"
7 depends on HAS_DMA
7 8
8 ---help--- 9 ---help---
9 Say Y here if you want to enable MOST support. 10 Say Y here if you want to enable MOST support.
diff --git a/drivers/staging/unisys/visorbus/Makefile b/drivers/staging/unisys/visorbus/Makefile
index fa27ee5f336c..fc790e7592fc 100644
--- a/drivers/staging/unisys/visorbus/Makefile
+++ b/drivers/staging/unisys/visorbus/Makefile
@@ -10,4 +10,3 @@ visorbus-y += visorchipset.o
10visorbus-y += periodic_work.o 10visorbus-y += periodic_work.o
11 11
12ccflags-y += -Idrivers/staging/unisys/include 12ccflags-y += -Idrivers/staging/unisys/include
13ccflags-y += -Idrivers/staging/unisys/visorutil
diff --git a/drivers/staging/unisys/visorbus/visorbus_main.c b/drivers/staging/unisys/visorbus/visorbus_main.c
index 2309f5f2b238..a272b48bab28 100644
--- a/drivers/staging/unisys/visorbus/visorbus_main.c
+++ b/drivers/staging/unisys/visorbus/visorbus_main.c
@@ -37,6 +37,8 @@ static int visorbus_debugref;
37#define POLLJIFFIES_TESTWORK 100 37#define POLLJIFFIES_TESTWORK 100
38#define POLLJIFFIES_NORMALCHANNEL 10 38#define POLLJIFFIES_NORMALCHANNEL 10
39 39
40static int busreg_rc = -ENODEV; /* stores the result from bus registration */
41
40static int visorbus_uevent(struct device *xdev, struct kobj_uevent_env *env); 42static int visorbus_uevent(struct device *xdev, struct kobj_uevent_env *env);
41static int visorbus_match(struct device *xdev, struct device_driver *xdrv); 43static int visorbus_match(struct device *xdev, struct device_driver *xdrv);
42static void fix_vbus_dev_info(struct visor_device *visordev); 44static void fix_vbus_dev_info(struct visor_device *visordev);
@@ -863,6 +865,9 @@ int visorbus_register_visor_driver(struct visor_driver *drv)
863{ 865{
864 int rc = 0; 866 int rc = 0;
865 867
868 if (busreg_rc < 0)
869 return -ENODEV; /*can't register on a nonexistent bus*/
870
866 drv->driver.name = drv->name; 871 drv->driver.name = drv->name;
867 drv->driver.bus = &visorbus_type; 872 drv->driver.bus = &visorbus_type;
868 drv->driver.probe = visordriver_probe_device; 873 drv->driver.probe = visordriver_probe_device;
@@ -885,6 +890,8 @@ int visorbus_register_visor_driver(struct visor_driver *drv)
885 if (rc < 0) 890 if (rc < 0)
886 return rc; 891 return rc;
887 rc = register_driver_attributes(drv); 892 rc = register_driver_attributes(drv);
893 if (rc < 0)
894 driver_unregister(&drv->driver);
888 return rc; 895 return rc;
889} 896}
890EXPORT_SYMBOL_GPL(visorbus_register_visor_driver); 897EXPORT_SYMBOL_GPL(visorbus_register_visor_driver);
@@ -1260,10 +1267,8 @@ remove_bus_instance(struct visor_device *dev)
1260static int 1267static int
1261create_bus_type(void) 1268create_bus_type(void)
1262{ 1269{
1263 int rc = 0; 1270 busreg_rc = bus_register(&visorbus_type);
1264 1271 return busreg_rc;
1265 rc = bus_register(&visorbus_type);
1266 return rc;
1267} 1272}
1268 1273
1269/** Remove the one-and-only one instance of the visor bus type (visorbus_type). 1274/** Remove the one-and-only one instance of the visor bus type (visorbus_type).
diff --git a/drivers/staging/unisys/visornic/visornic_main.c b/drivers/staging/unisys/visornic/visornic_main.c
index 8c9da7ea7845..9d3c1e282062 100644
--- a/drivers/staging/unisys/visornic/visornic_main.c
+++ b/drivers/staging/unisys/visornic/visornic_main.c
@@ -1189,16 +1189,16 @@ visornic_rx(struct uiscmdrsp *cmdrsp)
1189 spin_lock_irqsave(&devdata->priv_lock, flags); 1189 spin_lock_irqsave(&devdata->priv_lock, flags);
1190 atomic_dec(&devdata->num_rcvbuf_in_iovm); 1190 atomic_dec(&devdata->num_rcvbuf_in_iovm);
1191 1191
1192 /* update rcv stats - call it with priv_lock held */
1193 devdata->net_stats.rx_packets++;
1194 devdata->net_stats.rx_bytes = skb->len;
1195
1196 /* set length to how much was ACTUALLY received - 1192 /* set length to how much was ACTUALLY received -
1197 * NOTE: rcv_done_len includes actual length of data rcvd 1193 * NOTE: rcv_done_len includes actual length of data rcvd
1198 * including ethhdr 1194 * including ethhdr
1199 */ 1195 */
1200 skb->len = cmdrsp->net.rcv.rcv_done_len; 1196 skb->len = cmdrsp->net.rcv.rcv_done_len;
1201 1197
1198 /* update rcv stats - call it with priv_lock held */
1199 devdata->net_stats.rx_packets++;
1200 devdata->net_stats.rx_bytes += skb->len;
1201
1202 /* test enabled while holding lock */ 1202 /* test enabled while holding lock */
1203 if (!(devdata->enabled && devdata->enab_dis_acked)) { 1203 if (!(devdata->enabled && devdata->enab_dis_acked)) {
1204 /* don't process it unless we're in enable mode and until 1204 /* don't process it unless we're in enable mode and until
@@ -1924,13 +1924,16 @@ static int visornic_probe(struct visor_device *dev)
1924 "%s debugfs_create_dir %s failed\n", 1924 "%s debugfs_create_dir %s failed\n",
1925 __func__, netdev->name); 1925 __func__, netdev->name);
1926 err = -ENOMEM; 1926 err = -ENOMEM;
1927 goto cleanup_xmit_cmdrsp; 1927 goto cleanup_register_netdev;
1928 } 1928 }
1929 1929
1930 dev_info(&dev->device, "%s success netdev=%s\n", 1930 dev_info(&dev->device, "%s success netdev=%s\n",
1931 __func__, netdev->name); 1931 __func__, netdev->name);
1932 return 0; 1932 return 0;
1933 1933
1934cleanup_register_netdev:
1935 unregister_netdev(netdev);
1936
1934cleanup_napi_add: 1937cleanup_napi_add:
1935 del_timer_sync(&devdata->irq_poll_timer); 1938 del_timer_sync(&devdata->irq_poll_timer);
1936 netif_napi_del(&devdata->napi); 1939 netif_napi_del(&devdata->napi);
@@ -2128,8 +2131,9 @@ static int visornic_init(void)
2128 if (!dev_num_pool) 2131 if (!dev_num_pool)
2129 goto cleanup_workqueue; 2132 goto cleanup_workqueue;
2130 2133
2131 visorbus_register_visor_driver(&visornic_driver); 2134 err = visorbus_register_visor_driver(&visornic_driver);
2132 return 0; 2135 if (!err)
2136 return 0;
2133 2137
2134cleanup_workqueue: 2138cleanup_workqueue:
2135 if (visornic_timeout_reset_workqueue) { 2139 if (visornic_timeout_reset_workqueue) {