Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756274Ab0HKT1d (ORCPT ); Wed, 11 Aug 2010 15:27:33 -0400 Received: from mail-bw0-f46.google.com ([209.85.214.46]:56478 "EHLO mail-bw0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753363Ab0HKT1b (ORCPT ); Wed, 11 Aug 2010 15:27:31 -0400 DomainKey-Signature: a=rsa-sha1; c=nofws; d=googlemail.com; s=gamma; h=subject:from:to:cc:content-type:date:message-id:mime-version :x-mailer:content-transfer-encoding; b=s/rPPcfQVpTEOW+T++EWpmOJUZ0iOv12qMCg8rhwIeYDNxOWjPRTJCJ4wuUbqbLw2r H9Pg08Ww0nKA5GhshT8ndf3+ZP8D0zBZtCxodg0etGJ7l0zUrFTUAmHXzS3VCVW0Magi q8W4QoYcfDN+FHawXFm5NQekgBw//mBF755NM= Subject: [PATCH 1/2] ipw2100: register pm_qos request on hardware activation From: Christoph Fritz To: "John W. Linville" Cc: James Bottomley , Zhu Yi , "David S. Miller" , Joe Perches , "Rafael J. Wysocki" , linux-wireless , netdev@vger.kernel.org, "linux-kernel@vger.kernel.org" Content-Type: text/plain; charset="ISO-8859-1" Date: Wed, 11 Aug 2010 21:31:03 +0200 Message-ID: <1281555063.4367.1.camel@lovely.krouter> Mime-Version: 1.0 X-Mailer: Evolution 2.30.2 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4298 Lines: 118 Function pm_qos_add_request() has to be called before first pm_qos_update_request(). This was found out due to a change in pm_qos (commit 82f682514a5df89ffb3890627eebf0897b7a84ec "pm_qos: Get rid of the allocation in pm_qos_add_request()"). The warning call trace is below. This patch is similar to c128ec29208d410568469bd8bb373b4cdc10912a "e1000e: register pm_qos request on hardware activation". WARNING: at kernel/pm_qos_params.c:264 pm_qos_update_request+0x5e/0x70() pm_qos_update_request() called for unknown object Call Trace: [] ? warn_slowpath_common+0x78/0xb0 [] ? pm_qos_update_request+0x5e/0x70 [] ? pm_qos_update_request+0x5e/0x70 [] ? warn_slowpath_fmt+0x33/0x40 [] ? pm_qos_update_request+0x5e/0x70 [] ? ipw2100_up+0x3f/0xf10 [ipw2100] [] ? vsnprintf+0xc9/0x530 [] ? ipw2100_net_init+0x2c/0x1c0 [ipw2100] [] ? register_netdevice+0x7d/0x3c0 [] ? ipw2100_irq_tasklet+0x910/0x9a0 [ipw2100] [] ? register_netdev+0x2f/0x40 [] ? ipw2100_pci_init_one+0xd21/0x1060 [ipw2100] [] ? local_pci_probe+0xb/0x10 [] ? pci_device_probe+0x69/0x90 [] ? driver_probe_device+0x74/0x180 [] ? sysfs_create_dir+0x6a/0xb0 [] ? __driver_attach+0x79/0x80 [] ? __driver_attach+0x0/0x80 [] ? bus_for_each_dev+0x52/0x80 [] ? driver_attach+0x16/0x20 [] ? __driver_attach+0x0/0x80 [] ? bus_add_driver+0x17f/0x250 [] ? pci_device_shutdown+0x0/0x20 [] ? pci_device_remove+0x0/0x40 [] ? driver_register+0x63/0x120 [] ? __pci_register_driver+0x36/0xa0 [] ? ipw2100_init+0x48/0x67 [ipw2100] [] ? do_one_initcall+0x32/0x170 [] ? __vunmap+0xb8/0xf0 [] ? ipw2100_init+0x0/0x67 [ipw2100] [] ? sys_init_module+0x161/0x1000 [] ? sys_close+0x67/0xe0 [] ? syscall_call+0x7/0xb Signed-off-by: Christoph Fritz --- drivers/net/wireless/ipw2x00/ipw2100.c | 15 +++++++++++---- 1 files changed, 11 insertions(+), 4 deletions(-) diff --git a/drivers/net/wireless/ipw2x00/ipw2100.c b/drivers/net/wireless/ipw2x00/ipw2100.c index 16bbfa3..df8e535 100644 --- a/drivers/net/wireless/ipw2x00/ipw2100.c +++ b/drivers/net/wireless/ipw2x00/ipw2100.c @@ -1909,6 +1909,9 @@ static int ipw2100_net_init(struct net_device *dev) int ret; int i; + pm_qos_add_request(&ipw2100_pm_qos_req, PM_QOS_CPU_DMA_LATENCY, + PM_QOS_DEFAULT_VALUE); + ret = ipw2100_up(priv, 1); if (ret) return ret; @@ -1962,6 +1965,12 @@ static int ipw2100_net_init(struct net_device *dev) return 0; } +/* Called by unregister_netdev() */ +static void ipw2100_net_uninit(struct net_device *dev) +{ + pm_qos_remove_request(&ipw2100_pm_qos_req); +} + static void ipw2100_reset_adapter(struct work_struct *work) { struct ipw2100_priv *priv = @@ -6092,11 +6101,12 @@ static void ipw2100_rf_kill(struct work_struct *work) static void ipw2100_irq_tasklet(struct ipw2100_priv *priv); static const struct net_device_ops ipw2100_netdev_ops = { + .ndo_init = ipw2100_net_init, + .ndo_uninit = ipw2100_net_uninit, .ndo_open = ipw2100_open, .ndo_stop = ipw2100_close, .ndo_start_xmit = libipw_xmit, .ndo_change_mtu = libipw_change_mtu, - .ndo_init = ipw2100_net_init, .ndo_tx_timeout = ipw2100_tx_timeout, .ndo_set_mac_address = ipw2100_set_address, .ndo_validate_addr = eth_validate_addr, @@ -6669,8 +6679,6 @@ static int __init ipw2100_init(void) if (ret) goto out; - pm_qos_add_request(&ipw2100_pm_qos_req, PM_QOS_CPU_DMA_LATENCY, - PM_QOS_DEFAULT_VALUE); #ifdef CONFIG_IPW2100_DEBUG ipw2100_debug_level = debug; ret = driver_create_file(&ipw2100_pci_driver.driver, @@ -6692,7 +6700,6 @@ static void __exit ipw2100_exit(void) &driver_attr_debug_level); #endif pci_unregister_driver(&ipw2100_pci_driver); - pm_qos_remove_request(&ipw2100_pm_qos_req); } module_init(ipw2100_init); -- 1.7.1 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/