[PATCH 1/3] powerpc/powernv: remove the unused pnv_pci_set_p2p function

Frederic Barrat fbarrat at linux.ibm.com
Mon May 6 18:46:11 AEST 2019


Hi,

The PCI p2p and tunnel code is used by the Mellanox CX5 driver, at least 
their latest, out of tree version, which is used for CORAL. My 
understanding is that they'll upstream it at some point, though I don't 
know what their schedule is like.

   Fred


Le 26/04/2019 à 14:49, Christoph Hellwig a écrit :
> This function has never been used since it has been added to the tree.
> We also now have proper PCIe P2P APIs in the core kernel, and any new
> P2P support should be using those.
> 
> Signed-off-by: Christoph Hellwig <hch at lst.de>
> ---
>   arch/powerpc/include/asm/opal.h            |  2 -
>   arch/powerpc/include/asm/pnv-pci.h         |  2 -
>   arch/powerpc/platforms/powernv/opal-call.c |  1 -
>   arch/powerpc/platforms/powernv/pci.c       | 74 ----------------------
>   arch/powerpc/platforms/powernv/pci.h       |  5 --
>   5 files changed, 84 deletions(-)
> 
> diff --git a/arch/powerpc/include/asm/opal.h b/arch/powerpc/include/asm/opal.h
> index a55b01c90bb1..16c67f4eeb71 100644
> --- a/arch/powerpc/include/asm/opal.h
> +++ b/arch/powerpc/include/asm/opal.h
> @@ -279,8 +279,6 @@ int64_t opal_xive_allocate_irq(uint32_t chip_id);
>   int64_t opal_xive_free_irq(uint32_t girq);
>   int64_t opal_xive_sync(uint32_t type, uint32_t id);
>   int64_t opal_xive_dump(uint32_t type, uint32_t id);
> -int64_t opal_pci_set_p2p(uint64_t phb_init, uint64_t phb_target,
> -			uint64_t desc, uint16_t pe_number);
>   
>   int64_t opal_imc_counters_init(uint32_t type, uint64_t address,
>   							uint64_t cpu_pir);
> diff --git a/arch/powerpc/include/asm/pnv-pci.h b/arch/powerpc/include/asm/pnv-pci.h
> index 630eb8b1b7ed..9fcb0bc462c6 100644
> --- a/arch/powerpc/include/asm/pnv-pci.h
> +++ b/arch/powerpc/include/asm/pnv-pci.h
> @@ -26,8 +26,6 @@ extern int pnv_pci_get_presence_state(uint64_t id, uint8_t *state);
>   extern int pnv_pci_get_power_state(uint64_t id, uint8_t *state);
>   extern int pnv_pci_set_power_state(uint64_t id, uint8_t state,
>   				   struct opal_msg *msg);
> -extern int pnv_pci_set_p2p(struct pci_dev *initiator, struct pci_dev *target,
> -			   u64 desc);
>   
>   extern int pnv_pci_enable_tunnel(struct pci_dev *dev, uint64_t *asnind);
>   extern int pnv_pci_disable_tunnel(struct pci_dev *dev);
> diff --git a/arch/powerpc/platforms/powernv/opal-call.c b/arch/powerpc/platforms/powernv/opal-call.c
> index daad8c45c8e7..a89f0e31b468 100644
> --- a/arch/powerpc/platforms/powernv/opal-call.c
> +++ b/arch/powerpc/platforms/powernv/opal-call.c
> @@ -267,7 +267,6 @@ OPAL_CALL(opal_npu_map_lpar,			OPAL_NPU_MAP_LPAR);
>   OPAL_CALL(opal_imc_counters_init,		OPAL_IMC_COUNTERS_INIT);
>   OPAL_CALL(opal_imc_counters_start,		OPAL_IMC_COUNTERS_START);
>   OPAL_CALL(opal_imc_counters_stop,		OPAL_IMC_COUNTERS_STOP);
> -OPAL_CALL(opal_pci_set_p2p,			OPAL_PCI_SET_P2P);
>   OPAL_CALL(opal_get_powercap,			OPAL_GET_POWERCAP);
>   OPAL_CALL(opal_set_powercap,			OPAL_SET_POWERCAP);
>   OPAL_CALL(opal_get_power_shift_ratio,		OPAL_GET_POWER_SHIFT_RATIO);
> diff --git a/arch/powerpc/platforms/powernv/pci.c b/arch/powerpc/platforms/powernv/pci.c
> index ef9448a907c6..8d28f2932c3b 100644
> --- a/arch/powerpc/platforms/powernv/pci.c
> +++ b/arch/powerpc/platforms/powernv/pci.c
> @@ -38,7 +38,6 @@
>   #include "powernv.h"
>   #include "pci.h"
>   
> -static DEFINE_MUTEX(p2p_mutex);
>   static DEFINE_MUTEX(tunnel_mutex);
>   
>   int pnv_pci_get_slot_id(struct device_node *np, uint64_t *id)
> @@ -861,79 +860,6 @@ void pnv_pci_dma_bus_setup(struct pci_bus *bus)
>   	}
>   }
>   
> -int pnv_pci_set_p2p(struct pci_dev *initiator, struct pci_dev *target, u64 desc)
> -{
> -	struct pci_controller *hose;
> -	struct pnv_phb *phb_init, *phb_target;
> -	struct pnv_ioda_pe *pe_init;
> -	int rc;
> -
> -	if (!opal_check_token(OPAL_PCI_SET_P2P))
> -		return -ENXIO;
> -
> -	hose = pci_bus_to_host(initiator->bus);
> -	phb_init = hose->private_data;
> -
> -	hose = pci_bus_to_host(target->bus);
> -	phb_target = hose->private_data;
> -
> -	pe_init = pnv_ioda_get_pe(initiator);
> -	if (!pe_init)
> -		return -ENODEV;
> -
> -	/*
> -	 * Configuring the initiator's PHB requires to adjust its
> -	 * TVE#1 setting. Since the same device can be an initiator
> -	 * several times for different target devices, we need to keep
> -	 * a reference count to know when we can restore the default
> -	 * bypass setting on its TVE#1 when disabling. Opal is not
> -	 * tracking PE states, so we add a reference count on the PE
> -	 * in linux.
> -	 *
> -	 * For the target, the configuration is per PHB, so we keep a
> -	 * target reference count on the PHB.
> -	 */
> -	mutex_lock(&p2p_mutex);
> -
> -	if (desc & OPAL_PCI_P2P_ENABLE) {
> -		/* always go to opal to validate the configuration */
> -		rc = opal_pci_set_p2p(phb_init->opal_id, phb_target->opal_id,
> -				      desc, pe_init->pe_number);
> -
> -		if (rc != OPAL_SUCCESS) {
> -			rc = -EIO;
> -			goto out;
> -		}
> -
> -		pe_init->p2p_initiator_count++;
> -		phb_target->p2p_target_count++;
> -	} else {
> -		if (!pe_init->p2p_initiator_count ||
> -			!phb_target->p2p_target_count) {
> -			rc = -EINVAL;
> -			goto out;
> -		}
> -
> -		if (--pe_init->p2p_initiator_count == 0)
> -			pnv_pci_ioda2_set_bypass(pe_init, true);
> -
> -		if (--phb_target->p2p_target_count == 0) {
> -			rc = opal_pci_set_p2p(phb_init->opal_id,
> -					      phb_target->opal_id, desc,
> -					      pe_init->pe_number);
> -			if (rc != OPAL_SUCCESS) {
> -				rc = -EIO;
> -				goto out;
> -			}
> -		}
> -	}
> -	rc = 0;
> -out:
> -	mutex_unlock(&p2p_mutex);
> -	return rc;
> -}
> -EXPORT_SYMBOL_GPL(pnv_pci_set_p2p);
> -
>   struct device_node *pnv_pci_get_phb_node(struct pci_dev *dev)
>   {
>   	struct pci_controller *hose = pci_bus_to_host(dev->bus);
> diff --git a/arch/powerpc/platforms/powernv/pci.h b/arch/powerpc/platforms/powernv/pci.h
> index 8e36da379252..fbec1c76d7a7 100644
> --- a/arch/powerpc/platforms/powernv/pci.h
> +++ b/arch/powerpc/platforms/powernv/pci.h
> @@ -78,9 +78,6 @@ struct pnv_ioda_pe {
>   	struct pnv_ioda_pe	*master;
>   	struct list_head	slaves;
>   
> -	/* PCI peer-to-peer*/
> -	int			p2p_initiator_count;
> -
>   	/* Link in list of PE#s */
>   	struct list_head	list;
>   };
> @@ -171,8 +168,6 @@ struct pnv_phb {
>   	/* PHB and hub diagnostics */
>   	unsigned int		diag_data_size;
>   	u8			*diag_data;
> -
> -	int p2p_target_count;
>   };
>   
>   extern struct pci_ops pnv_pci_ops;
> 



More information about the Linuxppc-dev mailing list