[V3,02/16] platform/x86/intel/vsec: remove platform_info from vsec device structure

Message ID 20231012023840.3845703-3-david.e.box@linux.intel.com
State New
Headers
Series intel_pmc: Add telemetry API to read counters |

Commit Message

David E. Box Oct. 12, 2023, 2:38 a.m. UTC
  In preparation for exporting an API to register Intel Vendor Specific
Extended Capabilities (VSEC) from other drivers, remove the pointer to
platform_info from intel_vsec_device. This prevents a potential page fault
when auxiliary drivers probe and attempt to dereference this pointer to
access the needed quirks field. Instead, just add the quirks to
intel_vsec_device.

Signed-off-by: David E. Box <david.e.box@linux.intel.com>
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
---
V3 - No change

V2 - New patch splitting previous PATCH 1

 drivers/platform/x86/intel/pmt/class.c | 2 +-
 drivers/platform/x86/intel/vsec.c      | 2 +-
 drivers/platform/x86/intel/vsec.h      | 2 +-
 3 files changed, 3 insertions(+), 3 deletions(-)
  

Comments

Ilpo Järvinen Oct. 12, 2023, 3:31 p.m. UTC | #1
On Wed, 11 Oct 2023, David E. Box wrote:

> In preparation for exporting an API to register Intel Vendor Specific
> Extended Capabilities (VSEC) from other drivers, remove the pointer to
> platform_info from intel_vsec_device. This prevents a potential page fault
> when auxiliary drivers probe and attempt to dereference this pointer to
> access the needed quirks field. Instead, just add the quirks to
> intel_vsec_device.
> 
> Signed-off-by: David E. Box <david.e.box@linux.intel.com>
> Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
> ---
> V3 - No change
> 
> V2 - New patch splitting previous PATCH 1
> 
>  drivers/platform/x86/intel/pmt/class.c | 2 +-
>  drivers/platform/x86/intel/vsec.c      | 2 +-
>  drivers/platform/x86/intel/vsec.h      | 2 +-
>  3 files changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/platform/x86/intel/pmt/class.c b/drivers/platform/x86/intel/pmt/class.c
> index f32a233470de..2ad91d2fd954 100644
> --- a/drivers/platform/x86/intel/pmt/class.c
> +++ b/drivers/platform/x86/intel/pmt/class.c
> @@ -31,7 +31,7 @@ bool intel_pmt_is_early_client_hw(struct device *dev)
>  	 * differences from the server platforms (which use the Out Of Band
>  	 * Management Services Module OOBMSM).
>  	 */
> -	return !!(ivdev->info->quirks & VSEC_QUIRK_EARLY_HW);
> +	return !!(ivdev->quirks & VSEC_QUIRK_EARLY_HW);
>  }
>  EXPORT_SYMBOL_NS_GPL(intel_pmt_is_early_client_hw, INTEL_PMT);
>  
> diff --git a/drivers/platform/x86/intel/vsec.c b/drivers/platform/x86/intel/vsec.c
> index 6bb233a23414..15866b7d3117 100644
> --- a/drivers/platform/x86/intel/vsec.c
> +++ b/drivers/platform/x86/intel/vsec.c
> @@ -201,7 +201,7 @@ static int intel_vsec_add_dev(struct pci_dev *pdev, struct intel_vsec_header *he
>  	intel_vsec_dev->pcidev = pdev;
>  	intel_vsec_dev->resource = res;
>  	intel_vsec_dev->num_resources = header->num_entries;
> -	intel_vsec_dev->info = info;
> +	intel_vsec_dev->quirks = info->quirks;
>  
>  	if (header->id == VSEC_ID_SDSI)
>  		intel_vsec_dev->ida = &intel_vsec_sdsi_ida;
> diff --git a/drivers/platform/x86/intel/vsec.h b/drivers/platform/x86/intel/vsec.h
> index c242c07ea69c..8b9fad170503 100644
> --- a/drivers/platform/x86/intel/vsec.h
> +++ b/drivers/platform/x86/intel/vsec.h
> @@ -79,11 +79,11 @@ struct intel_vsec_device {
>  	struct pci_dev *pcidev;
>  	struct resource *resource;
>  	struct ida *ida;
> -	struct intel_vsec_platform_info *info;
>  	int num_resources;
>  	int id; /* xa */

What is this based on??

Unfortunately, I couldn't review some of your later patches efficiently 
because this patch failed to apply.
  
David E. Box Oct. 12, 2023, 4:55 p.m. UTC | #2
On Thu, 2023-10-12 at 18:31 +0300, Ilpo Järvinen wrote:
> On Wed, 11 Oct 2023, David E. Box wrote:
> 
> > In preparation for exporting an API to register Intel Vendor Specific
> > Extended Capabilities (VSEC) from other drivers, remove the pointer to
> > platform_info from intel_vsec_device. This prevents a potential page fault
> > when auxiliary drivers probe and attempt to dereference this pointer to
> > access the needed quirks field. Instead, just add the quirks to
> > intel_vsec_device.
> > 
> > Signed-off-by: David E. Box <david.e.box@linux.intel.com>
> > Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
> > ---
> > V3 - No change
> > 
> > V2 - New patch splitting previous PATCH 1
> > 
> >  drivers/platform/x86/intel/pmt/class.c | 2 +-
> >  drivers/platform/x86/intel/vsec.c      | 2 +-
> >  drivers/platform/x86/intel/vsec.h      | 2 +-
> >  3 files changed, 3 insertions(+), 3 deletions(-)
> > 
> > diff --git a/drivers/platform/x86/intel/pmt/class.c
> > b/drivers/platform/x86/intel/pmt/class.c
> > index f32a233470de..2ad91d2fd954 100644
> > --- a/drivers/platform/x86/intel/pmt/class.c
> > +++ b/drivers/platform/x86/intel/pmt/class.c
> > @@ -31,7 +31,7 @@ bool intel_pmt_is_early_client_hw(struct device *dev)
> >          * differences from the server platforms (which use the Out Of Band
> >          * Management Services Module OOBMSM).
> >          */
> > -       return !!(ivdev->info->quirks & VSEC_QUIRK_EARLY_HW);
> > +       return !!(ivdev->quirks & VSEC_QUIRK_EARLY_HW);
> >  }
> >  EXPORT_SYMBOL_NS_GPL(intel_pmt_is_early_client_hw, INTEL_PMT);
> >  
> > diff --git a/drivers/platform/x86/intel/vsec.c
> > b/drivers/platform/x86/intel/vsec.c
> > index 6bb233a23414..15866b7d3117 100644
> > --- a/drivers/platform/x86/intel/vsec.c
> > +++ b/drivers/platform/x86/intel/vsec.c
> > @@ -201,7 +201,7 @@ static int intel_vsec_add_dev(struct pci_dev *pdev,
> > struct intel_vsec_header *he
> >         intel_vsec_dev->pcidev = pdev;
> >         intel_vsec_dev->resource = res;
> >         intel_vsec_dev->num_resources = header->num_entries;
> > -       intel_vsec_dev->info = info;
> > +       intel_vsec_dev->quirks = info->quirks;
> >  
> >         if (header->id == VSEC_ID_SDSI)
> >                 intel_vsec_dev->ida = &intel_vsec_sdsi_ida;
> > diff --git a/drivers/platform/x86/intel/vsec.h
> > b/drivers/platform/x86/intel/vsec.h
> > index c242c07ea69c..8b9fad170503 100644
> > --- a/drivers/platform/x86/intel/vsec.h
> > +++ b/drivers/platform/x86/intel/vsec.h
> > @@ -79,11 +79,11 @@ struct intel_vsec_device {
> >         struct pci_dev *pcidev;
> >         struct resource *resource;
> >         struct ida *ida;
> > -       struct intel_vsec_platform_info *info;
> >         int num_resources;
> >         int id; /* xa */
> 
> What is this based on??
> 
> Unfortunately, I couldn't review some of your later patches efficiently 
> because this patch failed to apply.

platform-drivers-x86-v6.6-1 tag

I guess I need to update but I didn't expect any new changes that would
conflict.

David
  

Patch

diff --git a/drivers/platform/x86/intel/pmt/class.c b/drivers/platform/x86/intel/pmt/class.c
index f32a233470de..2ad91d2fd954 100644
--- a/drivers/platform/x86/intel/pmt/class.c
+++ b/drivers/platform/x86/intel/pmt/class.c
@@ -31,7 +31,7 @@  bool intel_pmt_is_early_client_hw(struct device *dev)
 	 * differences from the server platforms (which use the Out Of Band
 	 * Management Services Module OOBMSM).
 	 */
-	return !!(ivdev->info->quirks & VSEC_QUIRK_EARLY_HW);
+	return !!(ivdev->quirks & VSEC_QUIRK_EARLY_HW);
 }
 EXPORT_SYMBOL_NS_GPL(intel_pmt_is_early_client_hw, INTEL_PMT);
 
diff --git a/drivers/platform/x86/intel/vsec.c b/drivers/platform/x86/intel/vsec.c
index 6bb233a23414..15866b7d3117 100644
--- a/drivers/platform/x86/intel/vsec.c
+++ b/drivers/platform/x86/intel/vsec.c
@@ -201,7 +201,7 @@  static int intel_vsec_add_dev(struct pci_dev *pdev, struct intel_vsec_header *he
 	intel_vsec_dev->pcidev = pdev;
 	intel_vsec_dev->resource = res;
 	intel_vsec_dev->num_resources = header->num_entries;
-	intel_vsec_dev->info = info;
+	intel_vsec_dev->quirks = info->quirks;
 
 	if (header->id == VSEC_ID_SDSI)
 		intel_vsec_dev->ida = &intel_vsec_sdsi_ida;
diff --git a/drivers/platform/x86/intel/vsec.h b/drivers/platform/x86/intel/vsec.h
index c242c07ea69c..8b9fad170503 100644
--- a/drivers/platform/x86/intel/vsec.h
+++ b/drivers/platform/x86/intel/vsec.h
@@ -79,11 +79,11 @@  struct intel_vsec_device {
 	struct pci_dev *pcidev;
 	struct resource *resource;
 	struct ida *ida;
-	struct intel_vsec_platform_info *info;
 	int num_resources;
 	int id; /* xa */
 	void *priv_data;
 	size_t priv_data_size;
+	unsigned long quirks;
 };
 
 int intel_vsec_add_aux(struct pci_dev *pdev, struct device *parent,