lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20090608150039.GB17579@srcf.ucam.org>
Date:	Mon, 8 Jun 2009 16:00:39 +0100
From:	Matthew Garrett <mjg@...hat.com>
To:	Alan Stern <stern@...land.harvard.edu>
Cc:	alan-jenkins@...fmail.co.uk, Pekka Enberg <penberg@...helsinki.fi>,
	Corentin Chary <corentin.chary@...il.com>,
	acpi4asus-user@...ts.sourceforge.net, len.brown@...el.com,
	linux-kernel@...r.kernel.org, linux-usb@...r.kernel.org,
	Darren Salt <linux@...mustbejoking.demon.co.uk>
Subject: Re: [PATCH] eeepc-laptop: enable camera by default

On Sun, Jun 07, 2009 at 11:10:52PM -0400, Alan Stern wrote:
> On Mon, 8 Jun 2009, Matthew Garrett wrote:
> 
> > On Sun, Jun 07, 2009 at 11:03:48PM -0400, Alan Stern wrote:
> > 
> > > There's no mechanism for this.  It many environments it couldn't work,
> > > because the decision about whether to enable autosuspend is made when
> > > the device is first created (i.e., when the creation uevent is
> > > received), whereas driver binding doesn't occur until later.
> > 
> > There's a lot of power management situations where you don't end up with 
> > the optimal power configuration until a driver's bound. It's certainly 
> > possible to do this in userspace, but if we know that the hardware 
> > supported by a given driver will always work then it seems reasonable to 
> > have it whitelist autosuspend on that device.
> 
> Sure.  Such a thing could be added easily enough.  It just doesn't 
> exist now, that's all.

Something roughly like this? We'd probably also want a function call so 
drivers can do it based on the ID of the device they're handling, but in 
some cases we can probably assume that all devices supported by the 
driver will work.

diff --git a/drivers/usb/core/driver.c b/drivers/usb/core/driver.c
index d0a21a5..36f63a7 100644
--- a/drivers/usb/core/driver.c
+++ b/drivers/usb/core/driver.c
@@ -355,6 +355,8 @@ int usb_driver_claim_interface(struct usb_driver *driver,
 	iface->condition = USB_INTERFACE_BOUND;
 	mark_active(iface);
 	iface->pm_usage_cnt = !(driver->supports_autosuspend);
+	if (driver->supports_autosuspend && driver->enable_autosuspend)
+		udev->autosuspend_disabled=0;
 	usb_pm_unlock(udev);
 
 	/* if interface was already added, bind now; else let
diff --git a/include/linux/usb.h b/include/linux/usb.h
index 3aa2cd1..b4696f2 100644
--- a/include/linux/usb.h
+++ b/include/linux/usb.h
@@ -819,6 +819,8 @@ struct usbdrv_wrap {
  *	added to this driver by preventing the sysfs file from being created.
  * @supports_autosuspend: if set to 0, the USB core will not allow autosuspend
  *	for interfaces bound to this driver.
+ * @enable_autosuspend: if set to 1, the USB core will automatically enable
+ *	autosuspend for interfaces bound to this driver.
  * @soft_unbind: if set to 1, the USB core will not kill URBs and disable
  *	endpoints before calling the driver's disconnect method.
  *
@@ -861,6 +863,7 @@ struct usb_driver {
 	struct usbdrv_wrap drvwrap;
 	unsigned int no_dynamic_id:1;
 	unsigned int supports_autosuspend:1;
+	unsigned int enable_autosuspend:1;
 	unsigned int soft_unbind:1;
 };
 #define	to_usb_driver(d) container_of(d, struct usb_driver, drvwrap.driver)


-- 
Matthew Garrett | mjg59@...f.ucam.org
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ