diff options
| author | Mark Gross <mgross@linux.intel.com> | 2010-05-05 19:59:26 -0400 |
|---|---|---|
| committer | Rafael J. Wysocki <rjw@sisk.pl> | 2010-05-10 17:08:19 -0400 |
| commit | ed77134bfccf5e75b6cbadab268e559dbe6a4ebb (patch) | |
| tree | dae087a617ab3d9af8673d1905dbca3bcd57e89e /drivers/net | |
| parent | 0fef8b1e83c4ab08cf1304dbebcfd749caf4f187 (diff) | |
PM QOS update
This patch changes the string based list management to a handle base
implementation to help with the hot path use of pm-qos, it also renames
much of the API to use "request" as opposed to "requirement" that was
used in the initial implementation. I did this because request more
accurately represents what it actually does.
Also, I added a string based ABI for users wanting to use a string
interface. So if the user writes 0xDDDDDDDD formatted hex it will be
accepted by the interface. (someone asked me for it and I don't think
it hurts anything.)
This patch updates some documentation input I got from Randy.
Signed-off-by: markgross <mgross@linux.intel.com>
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Diffstat (limited to 'drivers/net')
| -rw-r--r-- | drivers/net/e1000e/netdev.c | 22 | ||||
| -rw-r--r-- | drivers/net/igbvf/netdev.c | 6 | ||||
| -rw-r--r-- | drivers/net/wireless/ipw2x00/ipw2100.c | 11 |
3 files changed, 22 insertions, 17 deletions
diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c index dbf81788bb40..d5d55c6a373f 100644 --- a/drivers/net/e1000e/netdev.c +++ b/drivers/net/e1000e/netdev.c | |||
| @@ -2524,12 +2524,12 @@ static void e1000_configure_rx(struct e1000_adapter *adapter) | |||
| 2524 | * excessive C-state transition latencies result in | 2524 | * excessive C-state transition latencies result in |
| 2525 | * dropped transactions. | 2525 | * dropped transactions. |
| 2526 | */ | 2526 | */ |
| 2527 | pm_qos_update_requirement(PM_QOS_CPU_DMA_LATENCY, | 2527 | pm_qos_update_request( |
| 2528 | adapter->netdev->name, 55); | 2528 | adapter->netdev->pm_qos_req, 55); |
| 2529 | } else { | 2529 | } else { |
| 2530 | pm_qos_update_requirement(PM_QOS_CPU_DMA_LATENCY, | 2530 | pm_qos_update_request( |
| 2531 | adapter->netdev->name, | 2531 | adapter->netdev->pm_qos_req, |
| 2532 | PM_QOS_DEFAULT_VALUE); | 2532 | PM_QOS_DEFAULT_VALUE); |
| 2533 | } | 2533 | } |
| 2534 | } | 2534 | } |
| 2535 | 2535 | ||
| @@ -2824,8 +2824,8 @@ int e1000e_up(struct e1000_adapter *adapter) | |||
| 2824 | 2824 | ||
| 2825 | /* DMA latency requirement to workaround early-receive/jumbo issue */ | 2825 | /* DMA latency requirement to workaround early-receive/jumbo issue */ |
| 2826 | if (adapter->flags & FLAG_HAS_ERT) | 2826 | if (adapter->flags & FLAG_HAS_ERT) |
| 2827 | pm_qos_add_requirement(PM_QOS_CPU_DMA_LATENCY, | 2827 | adapter->netdev->pm_qos_req = |
| 2828 | adapter->netdev->name, | 2828 | pm_qos_add_request(PM_QOS_CPU_DMA_LATENCY, |
| 2829 | PM_QOS_DEFAULT_VALUE); | 2829 | PM_QOS_DEFAULT_VALUE); |
| 2830 | 2830 | ||
| 2831 | /* hardware has been reset, we need to reload some things */ | 2831 | /* hardware has been reset, we need to reload some things */ |
| @@ -2887,9 +2887,11 @@ void e1000e_down(struct e1000_adapter *adapter) | |||
| 2887 | e1000_clean_tx_ring(adapter); | 2887 | e1000_clean_tx_ring(adapter); |
| 2888 | e1000_clean_rx_ring(adapter); | 2888 | e1000_clean_rx_ring(adapter); |
| 2889 | 2889 | ||
| 2890 | if (adapter->flags & FLAG_HAS_ERT) | 2890 | if (adapter->flags & FLAG_HAS_ERT) { |
| 2891 | pm_qos_remove_requirement(PM_QOS_CPU_DMA_LATENCY, | 2891 | pm_qos_remove_request( |
| 2892 | adapter->netdev->name); | 2892 | adapter->netdev->pm_qos_req); |
| 2893 | adapter->netdev->pm_qos_req = NULL; | ||
| 2894 | } | ||
| 2893 | 2895 | ||
| 2894 | /* | 2896 | /* |
| 2895 | * TODO: for power management, we could drop the link and | 2897 | * TODO: for power management, we could drop the link and |
diff --git a/drivers/net/igbvf/netdev.c b/drivers/net/igbvf/netdev.c index 1b1edad1eb5e..f16e981812a9 100644 --- a/drivers/net/igbvf/netdev.c +++ b/drivers/net/igbvf/netdev.c | |||
| @@ -48,6 +48,7 @@ | |||
| 48 | #define DRV_VERSION "1.0.0-k0" | 48 | #define DRV_VERSION "1.0.0-k0" |
| 49 | char igbvf_driver_name[] = "igbvf"; | 49 | char igbvf_driver_name[] = "igbvf"; |
| 50 | const char igbvf_driver_version[] = DRV_VERSION; | 50 | const char igbvf_driver_version[] = DRV_VERSION; |
| 51 | struct pm_qos_request_list *igbvf_driver_pm_qos_req; | ||
| 51 | static const char igbvf_driver_string[] = | 52 | static const char igbvf_driver_string[] = |
| 52 | "Intel(R) Virtual Function Network Driver"; | 53 | "Intel(R) Virtual Function Network Driver"; |
| 53 | static const char igbvf_copyright[] = "Copyright (c) 2009 Intel Corporation."; | 54 | static const char igbvf_copyright[] = "Copyright (c) 2009 Intel Corporation."; |
| @@ -2899,7 +2900,7 @@ static int __init igbvf_init_module(void) | |||
| 2899 | printk(KERN_INFO "%s\n", igbvf_copyright); | 2900 | printk(KERN_INFO "%s\n", igbvf_copyright); |
| 2900 | 2901 | ||
| 2901 | ret = pci_register_driver(&igbvf_driver); | 2902 | ret = pci_register_driver(&igbvf_driver); |
| 2902 | pm_qos_add_requirement(PM_QOS_CPU_DMA_LATENCY, igbvf_driver_name, | 2903 | igbvf_driver_pm_qos_req = pm_qos_add_request(PM_QOS_CPU_DMA_LATENCY, |
| 2903 | PM_QOS_DEFAULT_VALUE); | 2904 | PM_QOS_DEFAULT_VALUE); |
| 2904 | 2905 | ||
| 2905 | return ret; | 2906 | return ret; |
| @@ -2915,7 +2916,8 @@ module_init(igbvf_init_module); | |||
| 2915 | static void __exit igbvf_exit_module(void) | 2916 | static void __exit igbvf_exit_module(void) |
| 2916 | { | 2917 | { |
| 2917 | pci_unregister_driver(&igbvf_driver); | 2918 | pci_unregister_driver(&igbvf_driver); |
| 2918 | pm_qos_remove_requirement(PM_QOS_CPU_DMA_LATENCY, igbvf_driver_name); | 2919 | pm_qos_remove_request(igbvf_driver_pm_qos_req); |
| 2920 | igbvf_driver_pm_qos_req = NULL; | ||
| 2919 | } | 2921 | } |
| 2920 | module_exit(igbvf_exit_module); | 2922 | module_exit(igbvf_exit_module); |
| 2921 | 2923 | ||
diff --git a/drivers/net/wireless/ipw2x00/ipw2100.c b/drivers/net/wireless/ipw2x00/ipw2100.c index 9b72c45a7748..2b05fe5e994c 100644 --- a/drivers/net/wireless/ipw2x00/ipw2100.c +++ b/drivers/net/wireless/ipw2x00/ipw2100.c | |||
| @@ -174,6 +174,8 @@ that only one external action is invoked at a time. | |||
| 174 | #define DRV_DESCRIPTION "Intel(R) PRO/Wireless 2100 Network Driver" | 174 | #define DRV_DESCRIPTION "Intel(R) PRO/Wireless 2100 Network Driver" |
| 175 | #define DRV_COPYRIGHT "Copyright(c) 2003-2006 Intel Corporation" | 175 | #define DRV_COPYRIGHT "Copyright(c) 2003-2006 Intel Corporation" |
| 176 | 176 | ||
| 177 | struct pm_qos_request_list *ipw2100_pm_qos_req; | ||
| 178 | |||
| 177 | /* Debugging stuff */ | 179 | /* Debugging stuff */ |
| 178 | #ifdef CONFIG_IPW2100_DEBUG | 180 | #ifdef CONFIG_IPW2100_DEBUG |
| 179 | #define IPW2100_RX_DEBUG /* Reception debugging */ | 181 | #define IPW2100_RX_DEBUG /* Reception debugging */ |
| @@ -1739,7 +1741,7 @@ static int ipw2100_up(struct ipw2100_priv *priv, int deferred) | |||
| 1739 | /* the ipw2100 hardware really doesn't want power management delays | 1741 | /* the ipw2100 hardware really doesn't want power management delays |
| 1740 | * longer than 175usec | 1742 | * longer than 175usec |
| 1741 | */ | 1743 | */ |
| 1742 | pm_qos_update_requirement(PM_QOS_CPU_DMA_LATENCY, "ipw2100", 175); | 1744 | pm_qos_update_request(ipw2100_pm_qos_req, 175); |
| 1743 | 1745 | ||
| 1744 | /* If the interrupt is enabled, turn it off... */ | 1746 | /* If the interrupt is enabled, turn it off... */ |
| 1745 | spin_lock_irqsave(&priv->low_lock, flags); | 1747 | spin_lock_irqsave(&priv->low_lock, flags); |
| @@ -1887,8 +1889,7 @@ static void ipw2100_down(struct ipw2100_priv *priv) | |||
| 1887 | ipw2100_disable_interrupts(priv); | 1889 | ipw2100_disable_interrupts(priv); |
| 1888 | spin_unlock_irqrestore(&priv->low_lock, flags); | 1890 | spin_unlock_irqrestore(&priv->low_lock, flags); |
| 1889 | 1891 | ||
| 1890 | pm_qos_update_requirement(PM_QOS_CPU_DMA_LATENCY, "ipw2100", | 1892 | pm_qos_update_request(ipw2100_pm_qos_req, PM_QOS_DEFAULT_VALUE); |
| 1891 | PM_QOS_DEFAULT_VALUE); | ||
| 1892 | 1893 | ||
| 1893 | /* We have to signal any supplicant if we are disassociating */ | 1894 | /* We have to signal any supplicant if we are disassociating */ |
| 1894 | if (associated) | 1895 | if (associated) |
| @@ -6669,7 +6670,7 @@ static int __init ipw2100_init(void) | |||
| 6669 | if (ret) | 6670 | if (ret) |
| 6670 | goto out; | 6671 | goto out; |
| 6671 | 6672 | ||
| 6672 | pm_qos_add_requirement(PM_QOS_CPU_DMA_LATENCY, "ipw2100", | 6673 | ipw2100_pm_qos_req = pm_qos_add_request(PM_QOS_CPU_DMA_LATENCY, |
| 6673 | PM_QOS_DEFAULT_VALUE); | 6674 | PM_QOS_DEFAULT_VALUE); |
| 6674 | #ifdef CONFIG_IPW2100_DEBUG | 6675 | #ifdef CONFIG_IPW2100_DEBUG |
| 6675 | ipw2100_debug_level = debug; | 6676 | ipw2100_debug_level = debug; |
| @@ -6692,7 +6693,7 @@ static void __exit ipw2100_exit(void) | |||
| 6692 | &driver_attr_debug_level); | 6693 | &driver_attr_debug_level); |
| 6693 | #endif | 6694 | #endif |
| 6694 | pci_unregister_driver(&ipw2100_pci_driver); | 6695 | pci_unregister_driver(&ipw2100_pci_driver); |
| 6695 | pm_qos_remove_requirement(PM_QOS_CPU_DMA_LATENCY, "ipw2100"); | 6696 | pm_qos_remove_request(ipw2100_pm_qos_req); |
| 6696 | } | 6697 | } |
| 6697 | 6698 | ||
| 6698 | module_init(ipw2100_init); | 6699 | module_init(ipw2100_init); |
