Re: [RFT] rtl8187: use DMA-aware buffers with usb_control_msg

Eric Valette
2009-05-09T09:38:49Z

[-- Attachment #1: Type: text/plain, Size: 1189 bytes --]

Hin-Tak Leung wrote:
> On Wed, May 6, 2009 at 7:02 PM, John W. Linville <linville@tuxdriver.com> wrote:
>> This definitely needs to fail more gracefully in the event of a
>> kmalloc failure...
>>
>> Signed-off-by: John W. Linville <linville@tuxdriver.com>

OK guys. Thanks for your support and sorry for the delay: I add to
struggle with drm git to compile with 2.6.30-rc4-git3 (due to various
non yet integraed things my automated rebuild procedure does git fetch
for drm, xf86-video-nouveau, ...) , leading to no X server which for me
is more annoying than a trace in a USB wireless driver that I seldom use
only to test some new wireless feature (two GE port onboard).

The patch fix the DMA warning and the driver seems to work (just
associated it) but I must say that the allocation failure handling path
and the fact that we use now kmalloc for allocating a few bytes in such
a routine makes me worry about possible negative performance impact
unless theses routines are used only in a slow configuration path (did
no took time to red the code due to many other problems).

BTW if someone know who I should send this attached patch for DRM git, I
would gladly forward it.

-- eric

[-- Attachment #2: patch-drm --]
[-- Type: text/plain, Size: 1174 bytes --]

diff --git a/linux-core/drm_os_linux.h b/linux-core/drm_os_linux.h
index f58296b..b47420e 100644
--- a/linux-core/drm_os_linux.h
+++ b/linux-core/drm_os_linux.h
@@ -32,11 +32,6 @@
/** IRQ handler arguments and return type and values */
#define DRM_IRQ_ARGS int irq, void *arg
/** backwards compatibility with old irq return values */
-#ifndef IRQ_HANDLED
-typedef void irqreturn_t;
-#define IRQ_HANDLED /* nothing */
-#define IRQ_NONE /* nothing */
-#endif

/** AGP types */
#if __OS_HAS_AGP
diff --git a/linux-core/drm_sysfs.c b/linux-core/drm_sysfs.c
index 6de9367..637f5c2 100644
--- a/linux-core/drm_sysfs.c
+++ b/linux-core/drm_sysfs.c
@@ -162,14 +162,14 @@ int drm_sysfs_device_add(struct drm_minor *minor)
int err;
int i, j;
char *minor_str;
-
+
minor->kdev.parent = &minor->dev->pdev->dev;
minor->kdev.class = drm_class;
minor->kdev.release = drm_sysfs_device_release;
minor->kdev.devt = minor->device;
- minor_str = "card%d";
-
- snprintf(minor->kdev.bus_id, BUS_ID_SIZE, minor_str, minor->index);
+ minor_str = "card%d";
+
+ dev_set_name(&minor->kdev, minor_str, minor->index);

err = device_register(&minor->kdev);
if (err) {