linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Manuel Estrada Sainz <ranty@debian.org>
To: Andrew Morton <akpm@osdl.org>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Linus Torvalds <torvalds@osdl.org>,
	Michael Hunold <hunold@convergence.de>
Subject: [PATCH] Re: request_firmware() private workqueue
Date: Fri, 1 Aug 2003 21:15:04 +0200	[thread overview]
Message-ID: <20030801191504.GA32044@ranty.pantax.net> (raw)
In-Reply-To: <3F268C84.6060004@convergence.de>

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

On Tue, Jul 29, 2003 at 05:02:28PM +0200, Michael Hunold wrote:
> Hello Manuel,
> 
> I've applied your patches
> - request_firmware_own-workqueue.diff
> - sysfs-bin-unbreak.diff
> 
> and it's working very well for the av7110 DVB driver.
> 
> I hope that these patches are applied to the mainline kernel soon, so 
> the other DVB drivers which need binary firmware blobs (namely 
> dvb-ttusb-dec, dvb-ttusb-budget and one frontend driver) can be ported.
> 
> This will get rid of the av7110 firmware in the kernel and the ugly 
> config hacks to get the other drivers working.

 In it's current form request_firmware_async() sleeps way too long on
 the system's shared workqueue, which make it unresponsive until the
 firmware load finishes or gets canceled.

 The attached patch makes it use it's own workqueue, please apply.

 Have a nice day

 	Manuel

 PS: the sysfs issue is handled in a separate email.

-- 
--- Manuel Estrada Sainz <ranty@debian.org>
                         <ranty@bigfoot.com>
			 <ranty@users.sourceforge.net>
------------------------ <manuel.estrada@hispalinux.es> -------------------
Let us have the serenity to accept the things we cannot change, courage to
change the things we can, and wisdom to know the difference.

[-- Attachment #2: request_firmware_own-workqueue.diff --]
[-- Type: text/plain, Size: 1295 bytes --]

Index: drivers/base/firmware_class.c
===================================================================
RCS file: /home/cvs/linux-2.5/drivers/base/firmware_class.c,v
retrieving revision 1.3
diff -u -r1.3 drivers/base/firmware_class.c
--- drivers/base/firmware_class.c	4 Jul 2003 02:21:18 -0000	1.3
+++ drivers/base/firmware_class.c	26 Jul 2003 08:38:07 -0000
@@ -22,6 +22,8 @@
 MODULE_LICENSE("GPL");
 
 static int loading_timeout = 10;	/* In seconds */
+static struct workqueue_struct *firmware_wq;
+
 
 struct firmware_priv {
 	char fw_id[FIRMWARE_NAME_MAX];
@@ -467,7 +469,7 @@
 	};
 	INIT_WORK(&fw_work->work, request_firmware_work_func, fw_work);
 
-	schedule_work(&fw_work->work);
+	queue_work(firmware_wq, &fw_work->work);
 	return 0;
 }
 
@@ -485,12 +487,20 @@
 		       __FUNCTION__);
 		class_unregister(&firmware_class);
 	}
+	firmware_wq = create_workqueue("firmware");
+	if (!firmware_wq) {
+		printk(KERN_ERR "%s: create_workqueue failed\n", __FUNCTION__);
+		class_remove_file(&firmware_class, &class_attr_timeout);
+		class_unregister(&firmware_class);
+		error = -EIO;
+	}
 	return error;
 
 }
 static void __exit
 firmware_class_exit(void)
 {
+	destroy_workqueue(firmware_wq);
 	class_remove_file(&firmware_class, &class_attr_timeout);
 	class_unregister(&firmware_class);
 }

      reply	other threads:[~2003-08-01 19:15 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <3F1BD157.4090509@convergence.de>
2003-07-26 10:18 ` [PATCH] request_firmware() private workqueue (was: Re: Using firmware_class with recent 2.6 kernels) Manuel Estrada Sainz
2003-07-26 15:59   ` Manuel Estrada Sainz
2003-07-29 15:02     ` [PATCH] request_firmware() private workqueue Michael Hunold
2003-08-01 19:15       ` Manuel Estrada Sainz [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20030801191504.GA32044@ranty.pantax.net \
    --to=ranty@debian.org \
    --cc=akpm@osdl.org \
    --cc=hunold@convergence.de \
    --cc=linux-kernel@vger.kernel.org \
    --cc=torvalds@osdl.org \
    --subject='[PATCH] Re: request_firmware() private workqueue' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).