diff mbox

[v2,2/2] hwmon: (k10temp) Use API function to access System Management Network

Message ID 1525199182-10474-2-git-send-email-linux@roeck-us.net (mailing list archive)
State Superseded
Headers show

Commit Message

Guenter Roeck May 1, 2018, 6:26 p.m. UTC
The SMN (System Management Network) on Family 17h AMD CPUs is also accessed
from other drivers, specifically EDAC. Accessing it directly is racy.
On top of that, accessing the SMN through root bridge 00:00 is wrong on
multi-die CPUs and may result in reading the temperature from the wrong
die. Use available API functions to fix the problem.

For this to work, also change the Raven Ridge PCI device ID to point to
Data Fabric Function 3, since this ID is used by the API functions to
find the CPU node.

Tested-by: Gabriel Craciunescu <nix.or.die@gmail.com>
Signed-off-by: Guenter Roeck <linux@roeck-us.net>
---
v2: Fix Raven Ridge device ID and use naming scheme suggested by
    Borislav Petkov.

 drivers/hwmon/k10temp.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

Comments

kernel test robot May 1, 2018, 7:39 p.m. UTC | #1
Hi Guenter,

I love your patch! Yet something to improve:

[auto build test ERROR on tip/auto-latest]
[also build test ERROR on v4.17-rc3 next-20180501]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Guenter-Roeck/x86-amd_nb-Add-support-for-Raven-Ridge-CPUs/20180502-024535
config: i386-randconfig-x016-201817 (attached as .config)
compiler: gcc-7 (Debian 7.3.0-16) 7.3.0
reproduce:
        # save the attached .config to linux build tree
        make ARCH=i386 

All errors (new ones prefixed by >>):

   drivers/hwmon/k10temp.c: In function 'read_tempreg_nb_f17':
>> drivers/hwmon/k10temp.c:126:15: error: implicit declaration of function 'amd_pci_dev_to_node_id'; did you mean 'pci_set_of_node'? [-Werror=implicit-function-declaration]
     amd_smn_read(amd_pci_dev_to_node_id(pdev),
                  ^~~~~~~~~~~~~~~~~~~~~~
                  pci_set_of_node
   cc1: some warnings being treated as errors

vim +126 drivers/hwmon/k10temp.c

   123	
   124	static void read_tempreg_nb_f17(struct pci_dev *pdev, u32 *regval)
   125	{
 > 126		amd_smn_read(amd_pci_dev_to_node_id(pdev),
   127			     F17H_M01H_REPORTED_TEMP_CTRL_OFFSET, regval);
   128	}
   129	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
Guenter Roeck May 1, 2018, 8:13 p.m. UTC | #2
On Wed, May 02, 2018 at 03:39:19AM +0800, kbuild test robot wrote:
> Hi Guenter,
> 
> I love your patch! Yet something to improve:
> 
> [auto build test ERROR on tip/auto-latest]
> [also build test ERROR on v4.17-rc3 next-20180501]
> [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
> 
> url:    https://github.com/0day-ci/linux/commits/Guenter-Roeck/x86-amd_nb-Add-support-for-Raven-Ridge-CPUs/20180502-024535
> config: i386-randconfig-x016-201817 (attached as .config)
> compiler: gcc-7 (Debian 7.3.0-16) 7.3.0
> reproduce:
>         # save the attached .config to linux build tree
>         make ARCH=i386 
> 
> All errors (new ones prefixed by >>):
> 
>    drivers/hwmon/k10temp.c: In function 'read_tempreg_nb_f17':
> >> drivers/hwmon/k10temp.c:126:15: error: implicit declaration of function 'amd_pci_dev_to_node_id'; did you mean 'pci_set_of_node'? [-Werror=implicit-function-declaration]
>      amd_smn_read(amd_pci_dev_to_node_id(pdev),
>                   ^~~~~~~~~~~~~~~~~~~~~~
>                   pci_set_of_node
>    cc1: some warnings being treated as errors
> 

What would we do without 0day. The driver needs to depend on CONFIG_AMD_NB,
which makes sense anyway. I'll add that dependency in v3.

Guenter

> vim +126 drivers/hwmon/k10temp.c
> 
>    123	
>    124	static void read_tempreg_nb_f17(struct pci_dev *pdev, u32 *regval)
>    125	{
>  > 126		amd_smn_read(amd_pci_dev_to_node_id(pdev),
>    127			     F17H_M01H_REPORTED_TEMP_CTRL_OFFSET, regval);
>    128	}
>    129	
> 
> ---
> 0-DAY kernel test infrastructure                Open Source Technology Center
> https://lists.01.org/pipermail/kbuild-all                   Intel Corporation


--
To unsubscribe from this list: send the line "unsubscribe linux-hwmon" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
kernel test robot May 1, 2018, 8:35 p.m. UTC | #3
Hi Guenter,

I love your patch! Yet something to improve:

[auto build test ERROR on tip/auto-latest]
[also build test ERROR on v4.17-rc3 next-20180501]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Guenter-Roeck/x86-amd_nb-Add-support-for-Raven-Ridge-CPUs/20180502-024535
config: x86_64-randconfig-ne0-05020110 (attached as .config)
compiler: gcc-6 (Debian 6.4.0-9) 6.4.0 20171026
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All errors (new ones prefixed by >>):

   drivers//hwmon/k10temp.c: In function 'read_tempreg_nb_f17':
>> drivers//hwmon/k10temp.c:126:15: error: implicit declaration of function 'amd_pci_dev_to_node_id' [-Werror=implicit-function-declaration]
     amd_smn_read(amd_pci_dev_to_node_id(pdev),
                  ^~~~~~~~~~~~~~~~~~~~~~
   cc1: some warnings being treated as errors

vim +/amd_pci_dev_to_node_id +126 drivers//hwmon/k10temp.c

   123	
   124	static void read_tempreg_nb_f17(struct pci_dev *pdev, u32 *regval)
   125	{
 > 126		amd_smn_read(amd_pci_dev_to_node_id(pdev),
   127			     F17H_M01H_REPORTED_TEMP_CTRL_OFFSET, regval);
   128	}
   129	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
diff mbox

Patch

diff --git a/drivers/hwmon/k10temp.c b/drivers/hwmon/k10temp.c
index f014e03eee5a..e97105ae4158 100644
--- a/drivers/hwmon/k10temp.c
+++ b/drivers/hwmon/k10temp.c
@@ -23,6 +23,7 @@ 
 #include <linux/init.h>
 #include <linux/module.h>
 #include <linux/pci.h>
+#include <asm/amd_nb.h>
 #include <asm/processor.h>
 
 MODULE_DESCRIPTION("AMD Family 10h+ CPU core temperature monitor");
@@ -44,8 +45,8 @@  static DEFINE_MUTEX(nb_smu_ind_mutex);
 #define PCI_DEVICE_ID_AMD_17H_DF_F3	0x1463
 #endif
 
-#ifndef PCI_DEVICE_ID_AMD_17H_RR_NB
-#define PCI_DEVICE_ID_AMD_17H_RR_NB	0x15d0
+#ifndef PCI_DEVICE_ID_AMD_17H_M10H_DF_F3
+#define PCI_DEVICE_ID_AMD_17H_M10H_DF_F3	0x15eb
 #endif
 
 /* CPUID function 0x80000001, ebx */
@@ -140,8 +141,8 @@  static void read_tempreg_nb_f15(struct pci_dev *pdev, u32 *regval)
 
 static void read_tempreg_nb_f17(struct pci_dev *pdev, u32 *regval)
 {
-	amd_nb_index_read(pdev, PCI_DEVFN(0, 0), 0x60,
-			  F17H_M01H_REPORTED_TEMP_CTRL_OFFSET, regval);
+	amd_smn_read(amd_pci_dev_to_node_id(pdev),
+		     F17H_M01H_REPORTED_TEMP_CTRL_OFFSET, regval);
 }
 
 static ssize_t temp1_input_show(struct device *dev,
@@ -327,7 +328,7 @@  static const struct pci_device_id k10temp_id_table[] = {
 	{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_16H_NB_F3) },
 	{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_16H_M30H_NB_F3) },
 	{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_17H_DF_F3) },
-	{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_17H_RR_NB) },
+	{ PCI_VDEVICE(AMD, PCI_DEVICE_ID_AMD_17H_M10H_DF_F3) },
 	{}
 };
 MODULE_DEVICE_TABLE(pci, k10temp_id_table);