aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArthur Benilov <arthur.benilov@iba-group.com>2010-02-16 09:41:21 -0500
committerGreg Kroah-Hartman <gregkh@suse.de>2010-03-03 19:43:02 -0500
commit33e920d9ebaddbc9cf51cf6e1de7baa8d7b8d6dd (patch)
tree1d0b80f40ce283f43cd375acbc6c56fcb241ed6a
parent5188d74cc4597a63a0907b8996ca0a2d36f1b970 (diff)
Staging: vme: Allocate memory buffers for master windows
For VME device I/O operations on master windows the user driver tends to use kern_buf buffer array which is not allocated. This causes an error when reading from master window device files. Signed-off-by: Arthur Benilov <arthur.benilov@iba-group.com> Signed-off-by: Vincent Bossier <vincent.bossier@iba-group.com> Acked-by: Martyn Welch <martyn.welch@ge.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r--drivers/staging/vme/devices/vme_user.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/staging/vme/devices/vme_user.c b/drivers/staging/vme/devices/vme_user.c
index 0d404f1a27f4..c60c80fb241d 100644
--- a/drivers/staging/vme/devices/vme_user.c
+++ b/drivers/staging/vme/devices/vme_user.c
@@ -738,6 +738,14 @@ static int __init vme_user_probe(struct device *dev, int cur_bus, int cur_slot)
738 "resource\n"); 738 "resource\n");
739 goto err_master; 739 goto err_master;
740 } 740 }
741 image[i].size_buf = PCI_BUF_SIZE;
742 image[i].kern_buf = kmalloc(image[i].size_buf, GFP_KERNEL);
743 if (image[i].kern_buf == NULL) {
744 printk(KERN_WARNING "Unable to allocate memory for "
745 "master window buffers\n");
746 err = -ENOMEM;
747 goto err_master_buf;
748 }
741 } 749 }
742 750
743 /* Create sysfs entries - on udev systems this creates the dev files */ 751 /* Create sysfs entries - on udev systems this creates the dev files */
@@ -791,6 +799,9 @@ err_sysfs:
791 799
792 /* Ensure counter set correcty to unalloc all master windows */ 800 /* Ensure counter set correcty to unalloc all master windows */
793 i = MASTER_MAX + 1; 801 i = MASTER_MAX + 1;
802err_master_buf:
803 for (i = MASTER_MINOR; i < (MASTER_MAX + 1); i++)
804 kfree(image[i].kern_buf);
794err_master: 805err_master:
795 while (i > MASTER_MINOR) { 806 while (i > MASTER_MINOR) {
796 i--; 807 i--;
@@ -826,6 +837,9 @@ static int __exit vme_user_remove(struct device *dev, int cur_bus, int cur_slot)
826 } 837 }
827 class_destroy(vme_user_sysfs_class); 838 class_destroy(vme_user_sysfs_class);
828 839
840 for (i = MASTER_MINOR; i < (MASTER_MAX + 1); i++)
841 kfree(image[i].kern_buf);
842
829 for (i = SLAVE_MINOR; i < (SLAVE_MAX + 1); i++) { 843 for (i = SLAVE_MINOR; i < (SLAVE_MAX + 1); i++) {
830 vme_slave_set(image[i].resource, 0, 0, 0, 0, VME_A32, 0); 844 vme_slave_set(image[i].resource, 0, 0, 0, 0, VME_A32, 0);
831 vme_slave_free(image[i].resource); 845 vme_slave_free(image[i].resource);