2015-04-20 18:42:11

by Sonny Rao

[permalink] [raw]
Subject: [PATCH] perf/x86/intel/uncore: add support for Haswell ULT IMC uncore

This uncore is the same as the Haswell desktop part but uses a
different PCI ID.

Signed-off-by: Sonny Rao <[email protected]>
---
arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c | 5 +++++
include/linux/pci_ids.h | 1 +
2 files changed, 6 insertions(+)

diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c b/arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c
index 3001015..0bda6fc 100644
--- a/arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c
+++ b/arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c
@@ -472,6 +472,10 @@ static const struct pci_device_id hsw_uncore_pci_ids[] = {
PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HSW_IMC),
.driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
},
+ { /* IMC */
+ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HSW_U_IMC),
+ .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
+ },
{ /* end: all zeroes */ },
};

@@ -502,6 +506,7 @@ static const struct imc_uncore_pci_dev desktop_imc_pci_ids[] = {
IMC_DEV(IVB_IMC, &ivb_uncore_pci_driver), /* 3rd Gen Core processor */
IMC_DEV(IVB_E3_IMC, &ivb_uncore_pci_driver), /* Xeon E3-1200 v2/3rd Gen Core processor */
IMC_DEV(HSW_IMC, &hsw_uncore_pci_driver), /* 4th Gen Core Processor */
+ IMC_DEV(HSW_U_IMC, &hsw_uncore_pci_driver), /* 4th Gen Core ULT Mobile Processor */
{ /* end marker */ }
};

diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
index 38cff8f..e5ae042 100644
--- a/include/linux/pci_ids.h
+++ b/include/linux/pci_ids.h
@@ -2545,6 +2545,7 @@
#define PCI_DEVICE_ID_INTEL_IVB_IMC 0x0154
#define PCI_DEVICE_ID_INTEL_IVB_E3_IMC 0x0150
#define PCI_DEVICE_ID_INTEL_HSW_IMC 0x0c00
+#define PCI_DEVICE_ID_INTEL_HSW_U_IMC 0x0a04
#define PCI_DEVICE_ID_INTEL_PXHD_0 0x0320
#define PCI_DEVICE_ID_INTEL_PXHD_1 0x0321
#define PCI_DEVICE_ID_INTEL_PXH_0 0x0329
--
2.1.2


2015-04-20 18:56:59

by Bjorn Helgaas

[permalink] [raw]
Subject: Re: [PATCH] perf/x86/intel/uncore: add support for Haswell ULT IMC uncore

On Mon, Apr 20, 2015 at 1:42 PM, Sonny Rao <[email protected]> wrote:
> This uncore is the same as the Haswell desktop part but uses a
> different PCI ID.
>
> Signed-off-by: Sonny Rao <[email protected]>
> ---
> arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c | 5 +++++
> include/linux/pci_ids.h | 1 +
> 2 files changed, 6 insertions(+)
>
> diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c b/arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c
> index 3001015..0bda6fc 100644
> --- a/arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c
> +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c
> @@ -472,6 +472,10 @@ static const struct pci_device_id hsw_uncore_pci_ids[] = {
> PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HSW_IMC),
> .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
> },
> + { /* IMC */
> + PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HSW_U_IMC),
> + .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
> + },
> { /* end: all zeroes */ },
> };
>
> @@ -502,6 +506,7 @@ static const struct imc_uncore_pci_dev desktop_imc_pci_ids[] = {
> IMC_DEV(IVB_IMC, &ivb_uncore_pci_driver), /* 3rd Gen Core processor */
> IMC_DEV(IVB_E3_IMC, &ivb_uncore_pci_driver), /* Xeon E3-1200 v2/3rd Gen Core processor */
> IMC_DEV(HSW_IMC, &hsw_uncore_pci_driver), /* 4th Gen Core Processor */
> + IMC_DEV(HSW_U_IMC, &hsw_uncore_pci_driver), /* 4th Gen Core ULT Mobile Processor */
> { /* end marker */ }
> };
>
> diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
> index 38cff8f..e5ae042 100644
> --- a/include/linux/pci_ids.h
> +++ b/include/linux/pci_ids.h
> @@ -2545,6 +2545,7 @@
> #define PCI_DEVICE_ID_INTEL_IVB_IMC 0x0154
> #define PCI_DEVICE_ID_INTEL_IVB_E3_IMC 0x0150
> #define PCI_DEVICE_ID_INTEL_HSW_IMC 0x0c00
> +#define PCI_DEVICE_ID_INTEL_HSW_U_IMC 0x0a04

Please either use the 0x0a04 constant directly in
perf_event_intel_uncore_snb.c, or explain why the #define should be
here, e.g., maybe it will be used in multiple places. See the comment
at the top of pci_ids.h.

> #define PCI_DEVICE_ID_INTEL_PXHD_0 0x0320
> #define PCI_DEVICE_ID_INTEL_PXHD_1 0x0321
> #define PCI_DEVICE_ID_INTEL_PXH_0 0x0329
> --
> 2.1.2
>

2015-04-20 18:58:11

by Stephane Eranian

[permalink] [raw]
Subject: Re: [PATCH] perf/x86/intel/uncore: add support for Haswell ULT IMC uncore

On Mon, Apr 20, 2015 at 11:56 AM, Bjorn Helgaas <[email protected]> wrote:
>
> On Mon, Apr 20, 2015 at 1:42 PM, Sonny Rao <[email protected]> wrote:
> > This uncore is the same as the Haswell desktop part but uses a
> > different PCI ID.
> >
> > Signed-off-by: Sonny Rao <[email protected]>
> > ---
> > arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c | 5 +++++
> > include/linux/pci_ids.h | 1 +
> > 2 files changed, 6 insertions(+)
> >
> > diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c b/arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c
> > index 3001015..0bda6fc 100644
> > --- a/arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c
> > +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c
> > @@ -472,6 +472,10 @@ static const struct pci_device_id hsw_uncore_pci_ids[] = {
> > PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HSW_IMC),
> > .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
> > },
> > + { /* IMC */
> > + PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HSW_U_IMC),
> > + .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
> > + },
> > { /* end: all zeroes */ },
> > };
> >
> > @@ -502,6 +506,7 @@ static const struct imc_uncore_pci_dev desktop_imc_pci_ids[] = {
> > IMC_DEV(IVB_IMC, &ivb_uncore_pci_driver), /* 3rd Gen Core processor */
> > IMC_DEV(IVB_E3_IMC, &ivb_uncore_pci_driver), /* Xeon E3-1200 v2/3rd Gen Core processor */
> > IMC_DEV(HSW_IMC, &hsw_uncore_pci_driver), /* 4th Gen Core Processor */
> > + IMC_DEV(HSW_U_IMC, &hsw_uncore_pci_driver), /* 4th Gen Core ULT Mobile Processor */
> > { /* end marker */ }
> > };
> >
> > diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
> > index 38cff8f..e5ae042 100644
> > --- a/include/linux/pci_ids.h
> > +++ b/include/linux/pci_ids.h
> > @@ -2545,6 +2545,7 @@
> > #define PCI_DEVICE_ID_INTEL_IVB_IMC 0x0154
> > #define PCI_DEVICE_ID_INTEL_IVB_E3_IMC 0x0150
> > #define PCI_DEVICE_ID_INTEL_HSW_IMC 0x0c00
> > +#define PCI_DEVICE_ID_INTEL_HSW_U_IMC 0x0a04
>
> Please either use the 0x0a04 constant directly in
> perf_event_intel_uncore_snb.c, or explain why the #define should be
> here, e.g., maybe it will be used in multiple places. See the comment
> at the top of pci_ids.h.
>
But then, the same reasoning would apply to the other 3 IMC defines,
wouldn't it?

>
> > #define PCI_DEVICE_ID_INTEL_PXHD_0 0x0320
> > #define PCI_DEVICE_ID_INTEL_PXHD_1 0x0321
> > #define PCI_DEVICE_ID_INTEL_PXH_0 0x0329
> > --
> > 2.1.2
> >

2015-04-20 19:35:00

by Bjorn Helgaas

[permalink] [raw]
Subject: Re: [PATCH] perf/x86/intel/uncore: add support for Haswell ULT IMC uncore

On Mon, Apr 20, 2015 at 1:58 PM, Stephane Eranian <[email protected]> wrote:
> On Mon, Apr 20, 2015 at 11:56 AM, Bjorn Helgaas <[email protected]> wrote:
>>
>> On Mon, Apr 20, 2015 at 1:42 PM, Sonny Rao <[email protected]> wrote:
>> > This uncore is the same as the Haswell desktop part but uses a
>> > different PCI ID.
>> >
>> > Signed-off-by: Sonny Rao <[email protected]>
>> > ---
>> > arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c | 5 +++++
>> > include/linux/pci_ids.h | 1 +
>> > 2 files changed, 6 insertions(+)
>> >
>> > diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c b/arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c
>> > index 3001015..0bda6fc 100644
>> > --- a/arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c
>> > +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c
>> > @@ -472,6 +472,10 @@ static const struct pci_device_id hsw_uncore_pci_ids[] = {
>> > PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HSW_IMC),
>> > .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
>> > },
>> > + { /* IMC */
>> > + PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HSW_U_IMC),
>> > + .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
>> > + },
>> > { /* end: all zeroes */ },
>> > };
>> >
>> > @@ -502,6 +506,7 @@ static const struct imc_uncore_pci_dev desktop_imc_pci_ids[] = {
>> > IMC_DEV(IVB_IMC, &ivb_uncore_pci_driver), /* 3rd Gen Core processor */
>> > IMC_DEV(IVB_E3_IMC, &ivb_uncore_pci_driver), /* Xeon E3-1200 v2/3rd Gen Core processor */
>> > IMC_DEV(HSW_IMC, &hsw_uncore_pci_driver), /* 4th Gen Core Processor */
>> > + IMC_DEV(HSW_U_IMC, &hsw_uncore_pci_driver), /* 4th Gen Core ULT Mobile Processor */
>> > { /* end marker */ }
>> > };
>> >
>> > diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
>> > index 38cff8f..e5ae042 100644
>> > --- a/include/linux/pci_ids.h
>> > +++ b/include/linux/pci_ids.h
>> > @@ -2545,6 +2545,7 @@
>> > #define PCI_DEVICE_ID_INTEL_IVB_IMC 0x0154
>> > #define PCI_DEVICE_ID_INTEL_IVB_E3_IMC 0x0150
>> > #define PCI_DEVICE_ID_INTEL_HSW_IMC 0x0c00
>> > +#define PCI_DEVICE_ID_INTEL_HSW_U_IMC 0x0a04
>>
>> Please either use the 0x0a04 constant directly in
>> perf_event_intel_uncore_snb.c, or explain why the #define should be
>> here, e.g., maybe it will be used in multiple places. See the comment
>> at the top of pci_ids.h.
>>
> But then, the same reasoning would apply to the other 3 IMC defines,
> wouldn't it?

Yes. But if we made a mistake in the past, that doesn't mean we
should repeat it today.

>> > #define PCI_DEVICE_ID_INTEL_PXHD_0 0x0320
>> > #define PCI_DEVICE_ID_INTEL_PXHD_1 0x0321
>> > #define PCI_DEVICE_ID_INTEL_PXH_0 0x0329
>> > --
>> > 2.1.2
>> >

2015-04-20 19:44:14

by Sonny Rao

[permalink] [raw]
Subject: Re: [PATCH] perf/x86/intel/uncore: add support for Haswell ULT IMC uncore

On Mon, Apr 20, 2015 at 12:34 PM, Bjorn Helgaas <[email protected]> wrote:
> On Mon, Apr 20, 2015 at 1:58 PM, Stephane Eranian <[email protected]> wrote:
>> On Mon, Apr 20, 2015 at 11:56 AM, Bjorn Helgaas <[email protected]> wrote:
>>>
>>> On Mon, Apr 20, 2015 at 1:42 PM, Sonny Rao <[email protected]> wrote:
>>> > This uncore is the same as the Haswell desktop part but uses a
>>> > different PCI ID.
>>> >
>>> > Signed-off-by: Sonny Rao <[email protected]>
>>> > ---
>>> > arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c | 5 +++++
>>> > include/linux/pci_ids.h | 1 +
>>> > 2 files changed, 6 insertions(+)
>>> >
>>> > diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c b/arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c
>>> > index 3001015..0bda6fc 100644
>>> > --- a/arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c
>>> > +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c
>>> > @@ -472,6 +472,10 @@ static const struct pci_device_id hsw_uncore_pci_ids[] = {
>>> > PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HSW_IMC),
>>> > .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
>>> > },
>>> > + { /* IMC */
>>> > + PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HSW_U_IMC),
>>> > + .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
>>> > + },
>>> > { /* end: all zeroes */ },
>>> > };
>>> >
>>> > @@ -502,6 +506,7 @@ static const struct imc_uncore_pci_dev desktop_imc_pci_ids[] = {
>>> > IMC_DEV(IVB_IMC, &ivb_uncore_pci_driver), /* 3rd Gen Core processor */
>>> > IMC_DEV(IVB_E3_IMC, &ivb_uncore_pci_driver), /* Xeon E3-1200 v2/3rd Gen Core processor */
>>> > IMC_DEV(HSW_IMC, &hsw_uncore_pci_driver), /* 4th Gen Core Processor */
>>> > + IMC_DEV(HSW_U_IMC, &hsw_uncore_pci_driver), /* 4th Gen Core ULT Mobile Processor */
>>> > { /* end marker */ }
>>> > };
>>> >
>>> > diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
>>> > index 38cff8f..e5ae042 100644
>>> > --- a/include/linux/pci_ids.h
>>> > +++ b/include/linux/pci_ids.h
>>> > @@ -2545,6 +2545,7 @@
>>> > #define PCI_DEVICE_ID_INTEL_IVB_IMC 0x0154
>>> > #define PCI_DEVICE_ID_INTEL_IVB_E3_IMC 0x0150
>>> > #define PCI_DEVICE_ID_INTEL_HSW_IMC 0x0c00
>>> > +#define PCI_DEVICE_ID_INTEL_HSW_U_IMC 0x0a04
>>>
>>> Please either use the 0x0a04 constant directly in
>>> perf_event_intel_uncore_snb.c, or explain why the #define should be
>>> here, e.g., maybe it will be used in multiple places. See the comment
>>> at the top of pci_ids.h.
>>>
>> But then, the same reasoning would apply to the other 3 IMC defines,
>> wouldn't it?
>
> Yes. But if we made a mistake in the past, that doesn't mean we
> should repeat it today.

Shall I post a patch moving the others as well?

>
>>> > #define PCI_DEVICE_ID_INTEL_PXHD_0 0x0320
>>> > #define PCI_DEVICE_ID_INTEL_PXHD_1 0x0321
>>> > #define PCI_DEVICE_ID_INTEL_PXH_0 0x0329
>>> > --
>>> > 2.1.2
>>> >

2015-04-20 20:20:36

by Bjorn Helgaas

[permalink] [raw]
Subject: Re: [PATCH] perf/x86/intel/uncore: add support for Haswell ULT IMC uncore

On Mon, Apr 20, 2015 at 2:43 PM, Sonny Rao <[email protected]> wrote:
> On Mon, Apr 20, 2015 at 12:34 PM, Bjorn Helgaas <[email protected]> wrote:
>> On Mon, Apr 20, 2015 at 1:58 PM, Stephane Eranian <[email protected]> wrote:
>>> On Mon, Apr 20, 2015 at 11:56 AM, Bjorn Helgaas <[email protected]> wrote:
>>>>
>>>> On Mon, Apr 20, 2015 at 1:42 PM, Sonny Rao <[email protected]> wrote:
>>>> > This uncore is the same as the Haswell desktop part but uses a
>>>> > different PCI ID.
>>>> >
>>>> > Signed-off-by: Sonny Rao <[email protected]>
>>>> > ---
>>>> > arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c | 5 +++++
>>>> > include/linux/pci_ids.h | 1 +
>>>> > 2 files changed, 6 insertions(+)
>>>> >
>>>> > diff --git a/arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c b/arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c
>>>> > index 3001015..0bda6fc 100644
>>>> > --- a/arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c
>>>> > +++ b/arch/x86/kernel/cpu/perf_event_intel_uncore_snb.c
>>>> > @@ -472,6 +472,10 @@ static const struct pci_device_id hsw_uncore_pci_ids[] = {
>>>> > PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HSW_IMC),
>>>> > .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
>>>> > },
>>>> > + { /* IMC */
>>>> > + PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_HSW_U_IMC),
>>>> > + .driver_data = UNCORE_PCI_DEV_DATA(SNB_PCI_UNCORE_IMC, 0),
>>>> > + },
>>>> > { /* end: all zeroes */ },
>>>> > };
>>>> >
>>>> > @@ -502,6 +506,7 @@ static const struct imc_uncore_pci_dev desktop_imc_pci_ids[] = {
>>>> > IMC_DEV(IVB_IMC, &ivb_uncore_pci_driver), /* 3rd Gen Core processor */
>>>> > IMC_DEV(IVB_E3_IMC, &ivb_uncore_pci_driver), /* Xeon E3-1200 v2/3rd Gen Core processor */
>>>> > IMC_DEV(HSW_IMC, &hsw_uncore_pci_driver), /* 4th Gen Core Processor */
>>>> > + IMC_DEV(HSW_U_IMC, &hsw_uncore_pci_driver), /* 4th Gen Core ULT Mobile Processor */
>>>> > { /* end marker */ }
>>>> > };
>>>> >
>>>> > diff --git a/include/linux/pci_ids.h b/include/linux/pci_ids.h
>>>> > index 38cff8f..e5ae042 100644
>>>> > --- a/include/linux/pci_ids.h
>>>> > +++ b/include/linux/pci_ids.h
>>>> > @@ -2545,6 +2545,7 @@
>>>> > #define PCI_DEVICE_ID_INTEL_IVB_IMC 0x0154
>>>> > #define PCI_DEVICE_ID_INTEL_IVB_E3_IMC 0x0150
>>>> > #define PCI_DEVICE_ID_INTEL_HSW_IMC 0x0c00
>>>> > +#define PCI_DEVICE_ID_INTEL_HSW_U_IMC 0x0a04
>>>>
>>>> Please either use the 0x0a04 constant directly in
>>>> perf_event_intel_uncore_snb.c, or explain why the #define should be
>>>> here, e.g., maybe it will be used in multiple places. See the comment
>>>> at the top of pci_ids.h.
>>>>
>>> But then, the same reasoning would apply to the other 3 IMC defines,
>>> wouldn't it?
>>
>> Yes. But if we made a mistake in the past, that doesn't mean we
>> should repeat it today.
>
> Shall I post a patch moving the others as well?

I'm not pushing for that, since they're already there and we haven't
tried to apply that policy retroactively.

>>>> > #define PCI_DEVICE_ID_INTEL_PXHD_0 0x0320
>>>> > #define PCI_DEVICE_ID_INTEL_PXHD_1 0x0321
>>>> > #define PCI_DEVICE_ID_INTEL_PXH_0 0x0329
>>>> > --
>>>> > 2.1.2
>>>> >