diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-09-26 20:56:50 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-09-26 20:56:50 -0400 |
commit | b11e7b81bf94f633ae44f12a3d2e198277781952 (patch) | |
tree | efdd8d386afe0e3f2e1038090c2a25a9a05895a7 | |
parent | 7c1efeae6d7d7b1ba10453e35ee4c2de1d814c2b (diff) | |
parent | 74c600e36455af85c593702670f38709ca1951ce (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-- | MAINTAINERS | 7 | ||||
-rw-r--r-- | drivers/staging/android/TODO | 20 | ||||
-rw-r--r-- | drivers/staging/android/ion/ion.c | 6 | ||||
-rw-r--r-- | drivers/staging/fbtft/fb_uc1611.c | 2 | ||||
-rw-r--r-- | drivers/staging/fbtft/fb_watterott.c | 4 | ||||
-rw-r--r-- | drivers/staging/fbtft/fbtft-core.c | 10 | ||||
-rw-r--r-- | drivers/staging/fbtft/flexfb.c | 11 | ||||
-rw-r--r-- | drivers/staging/lustre/README.txt | 16 | ||||
-rw-r--r-- | drivers/staging/most/Kconfig | 1 | ||||
-rw-r--r-- | drivers/staging/most/hdm-dim2/Kconfig | 1 | ||||
-rw-r--r-- | drivers/staging/most/hdm-usb/Kconfig | 2 | ||||
-rw-r--r-- | drivers/staging/most/mostcore/Kconfig | 1 | ||||
-rw-r--r-- | drivers/staging/unisys/visorbus/Makefile | 1 | ||||
-rw-r--r-- | drivers/staging/unisys/visorbus/visorbus_main.c | 13 | ||||
-rw-r--r-- | drivers/staging/unisys/visornic/visornic_main.c | 18 |
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 | ||
3402 | DIGI EPCA PCI PRODUCTS | 3402 | DIGI EPCA PCI PRODUCTS |
3403 | M: Lidza Louina <lidza.louina@gmail.com> | 3403 | M: Lidza Louina <lidza.louina@gmail.com> |
3404 | M: Mark Hounschell <markh@compro.net> | ||
3405 | M: Daeseok Youn <daeseok.youn@gmail.com> | 3404 | M: Daeseok Youn <daeseok.youn@gmail.com> |
3406 | L: driverdev-devel@linuxdriverproject.org | 3405 | L: driverdev-devel@linuxdriverproject.org |
3407 | S: Maintained | 3406 | S: Maintained |
@@ -9910,8 +9909,8 @@ F: drivers/staging/media/lirc/ | |||
9910 | STAGING - LUSTRE PARALLEL FILESYSTEM | 9909 | STAGING - LUSTRE PARALLEL FILESYSTEM |
9911 | M: Oleg Drokin <oleg.drokin@intel.com> | 9910 | M: Oleg Drokin <oleg.drokin@intel.com> |
9912 | M: Andreas Dilger <andreas.dilger@intel.com> | 9911 | M: Andreas Dilger <andreas.dilger@intel.com> |
9913 | L: HPDD-discuss@lists.01.org (moderated for non-subscribers) | 9912 | L: lustre-devel@lists.lustre.org (moderated for non-subscribers) |
9914 | W: http://lustre.opensfs.org/ | 9913 | W: http://wiki.lustre.org/ |
9915 | S: Maintained | 9914 | S: Maintained |
9916 | F: drivers/staging/lustre | 9915 | F: drivers/staging/lustre |
9917 | 9916 | ||
@@ -11203,7 +11202,7 @@ F: drivers/vlynq/vlynq.c | |||
11203 | F: include/linux/vlynq.h | 11202 | F: include/linux/vlynq.h |
11204 | 11203 | ||
11205 | VME SUBSYSTEM | 11204 | VME SUBSYSTEM |
11206 | M: Martyn Welch <martyn.welch@ge.com> | 11205 | M: Martyn Welch <martyn@welchs.me.uk> |
11207 | M: Manohar Vanga <manohar.vanga@gmail.com> | 11206 | M: Manohar Vanga <manohar.vanga@gmail.com> |
11208 | M: Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 11207 | M: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
11209 | L: devel@driverdev.osuosl.org | 11208 | L: 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 | |||
9 | ion/ | ||
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 | |||
8 | Please send patches to Greg Kroah-Hartman <greg@kroah.com> and Cc: | 28 | Please send patches to Greg Kroah-Hartman <greg@kroah.com> and Cc: |
9 | Arve Hjønnevåg <arve@android.com> and Riley Andrews <riandrews@android.com> | 29 | Arve 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), | |||
14 | Lustre has independent Metadata and Data servers that clients can access | 14 | Lustre has independent Metadata and Data servers that clients can access |
15 | in parallel to maximize performance. | 15 | in parallel to maximize performance. |
16 | 16 | ||
17 | In order to use Lustre client you will need to download lustre client | 17 | In order to use Lustre client you will need to download the "lustre-client" |
18 | tools from | 18 | package that contains the userspace tools from http://lustre.org/download/ |
19 | https://downloads.hpdd.intel.com/public/lustre/latest-feature-release/ | ||
20 | the package name is lustre-client. | ||
21 | 19 | ||
22 | You will need to install and configure your Lustre servers separately. | 20 | You will need to install and configure your Lustre servers separately. |
23 | 21 | ||
@@ -76,12 +74,10 @@ Mount Options | |||
76 | 74 | ||
77 | More Information | 75 | More Information |
78 | ================ | 76 | ================ |
79 | You can get more information at | 77 | You can get more information at the Lustre website: http://wiki.lustre.org/ |
80 | OpenSFS website: http://lustre.opensfs.org/about/ | ||
81 | Intel HPDD wiki: https://wiki.hpdd.intel.com | ||
82 | 78 | ||
83 | Out of tree Lustre client and server code is available at: | 79 | Source for the userspace tools and out-of-tree client and server code |
84 | http://git.whamcloud.com/fs/lustre-release.git | 80 | is available at: http://git.hpdd.intel.com/fs/lustre-release.git |
85 | 81 | ||
86 | Latest binary packages: | 82 | Latest binary packages: |
87 | http://lustre.opensfs.org/download-lustre/ | 83 | http://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 @@ | |||
1 | menuconfig MOST | 1 | menuconfig 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 @@ | |||
5 | config HDM_DIM2 | 5 | config 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 | ||
5 | config HDM_USB | 5 | config 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 | ||
5 | config MOSTCORE | 5 | config 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 | |||
10 | visorbus-y += periodic_work.o | 10 | visorbus-y += periodic_work.o |
11 | 11 | ||
12 | ccflags-y += -Idrivers/staging/unisys/include | 12 | ccflags-y += -Idrivers/staging/unisys/include |
13 | ccflags-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 | ||
40 | static int busreg_rc = -ENODEV; /* stores the result from bus registration */ | ||
41 | |||
40 | static int visorbus_uevent(struct device *xdev, struct kobj_uevent_env *env); | 42 | static int visorbus_uevent(struct device *xdev, struct kobj_uevent_env *env); |
41 | static int visorbus_match(struct device *xdev, struct device_driver *xdrv); | 43 | static int visorbus_match(struct device *xdev, struct device_driver *xdrv); |
42 | static void fix_vbus_dev_info(struct visor_device *visordev); | 44 | static 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 | } |
890 | EXPORT_SYMBOL_GPL(visorbus_register_visor_driver); | 897 | EXPORT_SYMBOL_GPL(visorbus_register_visor_driver); |
@@ -1260,10 +1267,8 @@ remove_bus_instance(struct visor_device *dev) | |||
1260 | static int | 1267 | static int |
1261 | create_bus_type(void) | 1268 | create_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 | ||
1934 | cleanup_register_netdev: | ||
1935 | unregister_netdev(netdev); | ||
1936 | |||
1934 | cleanup_napi_add: | 1937 | cleanup_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 | ||
2134 | cleanup_workqueue: | 2138 | cleanup_workqueue: |
2135 | if (visornic_timeout_reset_workqueue) { | 2139 | if (visornic_timeout_reset_workqueue) { |