[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <ode5invb5ufpsus6dtmpc73fxoe764joqd7jpamumu7m3rkzvw@qn6d4xtsco7n>
Date: Tue, 2 Dec 2025 15:31:12 +0900
From: Koichiro Den <den@...inux.co.jp>
To: Frank Li <Frank.li@....com>
Cc: ntb@...ts.linux.dev, linux-pci@...r.kernel.org,
dmaengine@...r.kernel.org, linux-kernel@...r.kernel.org, mani@...nel.org,
kwilczynski@...nel.org, kishon@...nel.org, bhelgaas@...gle.com, corbet@....net,
vkoul@...nel.org, jdmason@...zu.us, dave.jiang@...el.com, allenbh@...il.com,
Basavaraj.Natikar@....com, Shyam-sundar.S-k@....com, kurt.schwemmer@...rosemi.com,
logang@...tatee.com, jingoohan1@...il.com, lpieralisi@...nel.org, robh@...nel.org,
jbrunet@...libre.com, fancer.lancer@...il.com, arnd@...db.de, pstanner@...hat.com,
elfring@...rs.sourceforge.net
Subject: Re: [RFC PATCH v2 10/27] NTB: core: Add .get_pci_epc() to ntb_dev_ops
On Mon, Dec 01, 2025 at 02:39:25PM -0500, Frank Li wrote:
> On Sun, Nov 30, 2025 at 01:03:48AM +0900, Koichiro Den wrote:
> > Add an optional get_pci_epc() callback to retrieve the underlying
> > pci_epc device associated with the NTB implementation.
>
> EPC run at EP side, this is running at RC side. Why need get EP side's
> controller pointer?
Thanks for pointing it out, that inclusion was just a mistake,
I'm unsure how it slipped in, I guess I was naively trying to get rid of
'enum pci_barno' by (ab)using pci-epf.h, which is unrelated.
I'll drop the changes on ntb_hw_epf.c.
-Koichiro
>
> Frank
> >
> > Signed-off-by: Koichiro Den <den@...inux.co.jp>
> > ---
> > drivers/ntb/hw/epf/ntb_hw_epf.c | 11 +----------
> > include/linux/ntb.h | 21 +++++++++++++++++++++
> > 2 files changed, 22 insertions(+), 10 deletions(-)
> >
> > diff --git a/drivers/ntb/hw/epf/ntb_hw_epf.c b/drivers/ntb/hw/epf/ntb_hw_epf.c
> > index a3ec411bfe49..d55ce6b0fad4 100644
> > --- a/drivers/ntb/hw/epf/ntb_hw_epf.c
> > +++ b/drivers/ntb/hw/epf/ntb_hw_epf.c
> > @@ -9,6 +9,7 @@
> > #include <linux/delay.h>
> > #include <linux/module.h>
> > #include <linux/pci.h>
> > +#include <linux/pci-epf.h>
> > #include <linux/slab.h>
> > #include <linux/ntb.h>
> >
> > @@ -49,16 +50,6 @@
> >
> > #define NTB_EPF_COMMAND_TIMEOUT 1000 /* 1 Sec */
> >
> > -enum pci_barno {
> > - NO_BAR = -1,
> > - BAR_0,
> > - BAR_1,
> > - BAR_2,
> > - BAR_3,
> > - BAR_4,
> > - BAR_5,
> > -};
> > -
> > enum epf_ntb_bar {
> > BAR_CONFIG,
> > BAR_PEER_SPAD,
> > diff --git a/include/linux/ntb.h b/include/linux/ntb.h
> > index d7ce5d2e60d0..04dc9a4d6b85 100644
> > --- a/include/linux/ntb.h
> > +++ b/include/linux/ntb.h
> > @@ -64,6 +64,7 @@ struct ntb_client;
> > struct ntb_dev;
> > struct ntb_msi;
> > struct pci_dev;
> > +struct pci_epc;
> >
> > /**
> > * enum ntb_topo - NTB connection topology
> > @@ -256,6 +257,7 @@ static inline int ntb_ctx_ops_is_valid(const struct ntb_ctx_ops *ops)
> > * @msg_clear_mask: See ntb_msg_clear_mask().
> > * @msg_read: See ntb_msg_read().
> > * @peer_msg_write: See ntb_peer_msg_write().
> > + * @get_pci_epc: See ntb_get_pci_epc().
> > */
> > struct ntb_dev_ops {
> > int (*port_number)(struct ntb_dev *ntb);
> > @@ -331,6 +333,7 @@ struct ntb_dev_ops {
> > int (*msg_clear_mask)(struct ntb_dev *ntb, u64 mask_bits);
> > u32 (*msg_read)(struct ntb_dev *ntb, int *pidx, int midx);
> > int (*peer_msg_write)(struct ntb_dev *ntb, int pidx, int midx, u32 msg);
> > + struct pci_epc *(*get_pci_epc)(struct ntb_dev *ntb);
> > };
> >
> > static inline int ntb_dev_ops_is_valid(const struct ntb_dev_ops *ops)
> > @@ -393,6 +396,9 @@ static inline int ntb_dev_ops_is_valid(const struct ntb_dev_ops *ops)
> > /* !ops->msg_clear_mask == !ops->msg_count && */
> > !ops->msg_read == !ops->msg_count &&
> > !ops->peer_msg_write == !ops->msg_count &&
> > +
> > + /* Miscellaneous optional callbacks */
> > + /* ops->get_pci_epc && */
> > 1;
> > }
> >
> > @@ -1567,6 +1573,21 @@ static inline int ntb_peer_msg_write(struct ntb_dev *ntb, int pidx, int midx,
> > return ntb->ops->peer_msg_write(ntb, pidx, midx, msg);
> > }
> >
> > +/**
> > + * ntb_get_pci_epc() - get backing PCI endpoint controller if possible.
> > + * @ntb: NTB device context.
> > + *
> > + * Get the backing PCI endpoint controller representation.
> > + *
> > + * Return: A pointer to the pci_epc instance if available. or %NULL if not.
> > + */
> > +static inline struct pci_epc __maybe_unused *ntb_get_pci_epc(struct ntb_dev *ntb)
> > +{
> > + if (!ntb->ops->get_pci_epc)
> > + return NULL;
> > + return ntb->ops->get_pci_epc(ntb);
> > +}
> > +
> > /**
> > * ntb_peer_resource_idx() - get a resource index for a given peer idx
> > * @ntb: NTB device context.
> > --
> > 2.48.1
> >
Powered by blists - more mailing lists