Update of /cvsroot/linuxconsole/ruby/linux/drivers/usb
In directory usw-pr-cvs1:/tmp/cvs-serv20736
Modified Files:
hid-core.c
Log Message:
Make sure the report descriptor is always in DMA-able memory.
Index: hid-core.c
===================================================================
RCS file: /cvsroot/linuxconsole/ruby/linux/drivers/usb/hid-core.c,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -d -r1.42 -r1.43
--- hid-core.c 2002/01/27 00:22:46 1.42
+++ hid-core.c 2002/01/28 16:24:20 1.43
@@ -1256,6 +1256,7 @@
struct hid_descriptor *hdesc;
struct hid_device *hid;
unsigned rsize = 0;
+ u8 *rdesc;
char *buf;
int n;
@@ -1278,26 +1279,31 @@
return NULL;
}
- {
- __u8 rdesc[rsize];
+ if (!(rdesc = kmalloc(rsize, GFP_KERNEL))) {
+ dbg("couldn't allocate rdesc memory");
+ return NULL;
+ }
- if ((n = hid_get_class_descriptor(dev, interface->bInterfaceNumber, HID_DT_REPORT, rdesc, rsize)) < 0) {
- dbg("reading report descriptor failed");
- return NULL;
- }
+ if ((n = hid_get_class_descriptor(dev, interface->bInterfaceNumber, HID_DT_REPORT, rdesc, rsize)) < 0) {
+ dbg("reading report descriptor failed");
+ kfree(rdesc);
+ return NULL;
+ }
#ifdef DEBUG_DATA
- printk(KERN_DEBUG __FILE__ ": report descriptor (size %u, read %d) = ", rsize, n);
- for (n = 0; n < rsize; n++)
- printk(" %02x", (unsigned) rdesc[n]);
- printk("\n");
+ printk(KERN_DEBUG __FILE__ ": report descriptor (size %u, read %d) = ", rsize, n);
+ for (n = 0; n < rsize; n++)
+ printk(" %02x", (unsigned) rdesc[n]);
+ printk("\n");
#endif
- if (!(hid = hid_parse_report(rdesc, rsize))) {
- dbg("parsing report descriptor failed");
- return NULL;
- }
+ if (!(hid = hid_parse_report(rdesc, rsize))) {
+ dbg("parsing report descriptor failed");
+ kfree(rdesc);
+ return NULL;
}
+
+ kfree(rdesc);
for (n = 0; n < interface->bNumEndpoints; n++) {
|