Message ID | 20221129130933.25231-3-vburru@marvell.com (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | octeon_ep: Update PF mailbox for VF | expand |
Context | Check | Description |
---|---|---|
netdev/tree_selection | success | Clearly marked for net-next |
netdev/fixes_present | success | Fixes tag not required for -next series |
netdev/subject_prefix | success | Link |
netdev/cover_letter | success | Series has a cover letter |
netdev/patch_count | success | Link |
netdev/header_inline | success | No static functions without inline keyword in header files |
netdev/build_32bit | success | Errors and warnings before: 0 this patch: 0 |
netdev/cc_maintainers | success | CCed 7 of 7 maintainers |
netdev/build_clang | success | Errors and warnings before: 0 this patch: 0 |
netdev/module_param | success | Was 0 now: 0 |
netdev/verify_signedoff | success | Signed-off-by tag matches author and committer |
netdev/check_selftest | success | No net selftest shell script |
netdev/verify_fixes | success | No Fixes tag |
netdev/build_allmodconfig_warn | success | Errors and warnings before: 0 this patch: 0 |
netdev/checkpatch | warning | WARNING: line length of 84 exceeds 80 columns |
netdev/kdoc | success | Errors and warnings before: 0 this patch: 0 |
netdev/source_inline | success | Was 0 now: 0 |
On Tue, Nov 29, 2022 at 05:09:25AM -0800, Veerasenareddy Burru wrote: > Poll for control messages until interrupts are enabled. > All the interrupts are enabled in ndo_open(). So what are you saying if I have your device and didn't enable network device, you will poll forever? > Add ability to listen for notifications from firmware before ndo_open(). > Once interrupts are enabled, this polling is disabled and all the > messages are processed by bottom half of interrupt handler. > > Signed-off-by: Veerasenareddy Burru <vburru@marvell.com> > Signed-off-by: Abhijit Ayarekar <aayarekar@marvell.com> > --- > v1 -> v2: > * removed device status oct->status, as it is not required with the > modified implementation in 0001-xxxx.patch > > .../marvell/octeon_ep/octep_cn9k_pf.c | 49 +++++++++---------- > .../ethernet/marvell/octeon_ep/octep_main.c | 35 +++++++++++++ > .../ethernet/marvell/octeon_ep/octep_main.h | 11 ++++- > .../marvell/octeon_ep/octep_regs_cn9k_pf.h | 4 ++ > 4 files changed, 71 insertions(+), 28 deletions(-) > > diff --git a/drivers/net/ethernet/marvell/octeon_ep/octep_cn9k_pf.c b/drivers/net/ethernet/marvell/octeon_ep/octep_cn9k_pf.c > index 6ad88d0fe43f..ace2dfd1e918 100644 > --- a/drivers/net/ethernet/marvell/octeon_ep/octep_cn9k_pf.c > +++ b/drivers/net/ethernet/marvell/octeon_ep/octep_cn9k_pf.c > @@ -352,27 +352,36 @@ static void octep_setup_mbox_regs_cn93_pf(struct octep_device *oct, int q_no) > mbox->mbox_read_reg = oct->mmio[0].hw_addr + CN93_SDP_R_MBOX_VF_PF_DATA(q_no); > } > > -/* Mailbox Interrupt handler */ > -static void cn93_handle_pf_mbox_intr(struct octep_device *oct) > +/* Process non-ioq interrupts required to keep pf interface running. > + * OEI_RINT is needed for control mailbox > + */ > +static int octep_poll_non_ioq_interrupts_cn93_pf(struct octep_device *oct) > { > - u64 mbox_int_val = 0ULL, val = 0ULL, qno = 0ULL; > + u64 reg0; > + int handled = 0; Reversed Christmas tree. Thanks
> -----Original Message----- > From: Leon Romanovsky <leon@kernel.org> > Sent: Wednesday, November 30, 2022 1:30 AM > To: Veerasenareddy Burru <vburru@marvell.com> > Cc: netdev@vger.kernel.org; linux-kernel@vger.kernel.org; Liron Himi > <lironh@marvell.com>; Abhijit Ayarekar <aayarekar@marvell.com>; Sathesh > B Edara <sedara@marvell.com>; Satananda Burla <sburla@marvell.com>; > linux-doc@vger.kernel.org; David S. Miller <davem@davemloft.net>; Eric > Dumazet <edumazet@google.com>; Jakub Kicinski <kuba@kernel.org>; > Paolo Abeni <pabeni@redhat.com> > Subject: [EXT] Re: [PATCH net-next v2 2/9] octeon_ep: poll for control > messages > > External Email > > ---------------------------------------------------------------------- > On Tue, Nov 29, 2022 at 05:09:25AM -0800, Veerasenareddy Burru wrote: > > Poll for control messages until interrupts are enabled. > > All the interrupts are enabled in ndo_open(). > > So what are you saying if I have your device and didn't enable network > device, you will poll forever? Yes, Leon. It will poll periodically until network interface is enabled. > > > Add ability to listen for notifications from firmware before ndo_open(). > > Once interrupts are enabled, this polling is disabled and all the > > messages are processed by bottom half of interrupt handler. > > > > Signed-off-by: Veerasenareddy Burru <vburru@marvell.com> > > Signed-off-by: Abhijit Ayarekar <aayarekar@marvell.com> > > --- > > v1 -> v2: > > * removed device status oct->status, as it is not required with the > > modified implementation in 0001-xxxx.patch > > > > .../marvell/octeon_ep/octep_cn9k_pf.c | 49 +++++++++---------- > > .../ethernet/marvell/octeon_ep/octep_main.c | 35 +++++++++++++ > > .../ethernet/marvell/octeon_ep/octep_main.h | 11 ++++- > > .../marvell/octeon_ep/octep_regs_cn9k_pf.h | 4 ++ > > 4 files changed, 71 insertions(+), 28 deletions(-) > > > > diff --git a/drivers/net/ethernet/marvell/octeon_ep/octep_cn9k_pf.c > > b/drivers/net/ethernet/marvell/octeon_ep/octep_cn9k_pf.c > > index 6ad88d0fe43f..ace2dfd1e918 100644 > > --- a/drivers/net/ethernet/marvell/octeon_ep/octep_cn9k_pf.c > > +++ b/drivers/net/ethernet/marvell/octeon_ep/octep_cn9k_pf.c > > @@ -352,27 +352,36 @@ static void > octep_setup_mbox_regs_cn93_pf(struct octep_device *oct, int q_no) > > mbox->mbox_read_reg = oct->mmio[0].hw_addr + > > CN93_SDP_R_MBOX_VF_PF_DATA(q_no); } > > > > -/* Mailbox Interrupt handler */ > > -static void cn93_handle_pf_mbox_intr(struct octep_device *oct) > > +/* Process non-ioq interrupts required to keep pf interface running. > > + * OEI_RINT is needed for control mailbox */ static int > > +octep_poll_non_ioq_interrupts_cn93_pf(struct octep_device *oct) > > { > > - u64 mbox_int_val = 0ULL, val = 0ULL, qno = 0ULL; > > + u64 reg0; > > + int handled = 0; > > Reversed Christmas tree. Thanks for the feedback. Will revise the patch. > > Thanks
On Wed, Nov 30, 2022 at 03:44:30PM +0000, Veerasenareddy Burru wrote: > > > > -----Original Message----- > > From: Leon Romanovsky <leon@kernel.org> > > Sent: Wednesday, November 30, 2022 1:30 AM > > To: Veerasenareddy Burru <vburru@marvell.com> > > Cc: netdev@vger.kernel.org; linux-kernel@vger.kernel.org; Liron Himi > > <lironh@marvell.com>; Abhijit Ayarekar <aayarekar@marvell.com>; Sathesh > > B Edara <sedara@marvell.com>; Satananda Burla <sburla@marvell.com>; > > linux-doc@vger.kernel.org; David S. Miller <davem@davemloft.net>; Eric > > Dumazet <edumazet@google.com>; Jakub Kicinski <kuba@kernel.org>; > > Paolo Abeni <pabeni@redhat.com> > > Subject: [EXT] Re: [PATCH net-next v2 2/9] octeon_ep: poll for control > > messages > > > > External Email > > > > ---------------------------------------------------------------------- > > On Tue, Nov 29, 2022 at 05:09:25AM -0800, Veerasenareddy Burru wrote: > > > Poll for control messages until interrupts are enabled. > > > All the interrupts are enabled in ndo_open(). > > > > So what are you saying if I have your device and didn't enable network > > device, you will poll forever? > Yes, Leon. It will poll periodically until network interface is enabled. I don't know if it is acceptable behaviour in netdev, but it doesn't sound right to me. What type of control messages will be sent by FW, which PF should listen to them? > > > > > Add ability to listen for notifications from firmware before ndo_open(). > > > Once interrupts are enabled, this polling is disabled and all the > > > messages are processed by bottom half of interrupt handler. > > > > > > Signed-off-by: Veerasenareddy Burru <vburru@marvell.com> > > > Signed-off-by: Abhijit Ayarekar <aayarekar@marvell.com> > > > --- > > > v1 -> v2: > > > * removed device status oct->status, as it is not required with the > > > modified implementation in 0001-xxxx.patch > > > > > > .../marvell/octeon_ep/octep_cn9k_pf.c | 49 +++++++++---------- > > > .../ethernet/marvell/octeon_ep/octep_main.c | 35 +++++++++++++ > > > .../ethernet/marvell/octeon_ep/octep_main.h | 11 ++++- > > > .../marvell/octeon_ep/octep_regs_cn9k_pf.h | 4 ++ > > > 4 files changed, 71 insertions(+), 28 deletions(-) > > > > > > diff --git a/drivers/net/ethernet/marvell/octeon_ep/octep_cn9k_pf.c > > > b/drivers/net/ethernet/marvell/octeon_ep/octep_cn9k_pf.c > > > index 6ad88d0fe43f..ace2dfd1e918 100644 > > > --- a/drivers/net/ethernet/marvell/octeon_ep/octep_cn9k_pf.c > > > +++ b/drivers/net/ethernet/marvell/octeon_ep/octep_cn9k_pf.c > > > @@ -352,27 +352,36 @@ static void > > octep_setup_mbox_regs_cn93_pf(struct octep_device *oct, int q_no) > > > mbox->mbox_read_reg = oct->mmio[0].hw_addr + > > > CN93_SDP_R_MBOX_VF_PF_DATA(q_no); } > > > > > > -/* Mailbox Interrupt handler */ > > > -static void cn93_handle_pf_mbox_intr(struct octep_device *oct) > > > +/* Process non-ioq interrupts required to keep pf interface running. > > > + * OEI_RINT is needed for control mailbox */ static int > > > +octep_poll_non_ioq_interrupts_cn93_pf(struct octep_device *oct) > > > { > > > - u64 mbox_int_val = 0ULL, val = 0ULL, qno = 0ULL; > > > + u64 reg0; > > > + int handled = 0; > > > > Reversed Christmas tree. > Thanks for the feedback. Will revise the patch. It is applicable to all patches. And please fix your email client to properly add blank lines between replies. Thanks > > > > Thanks
> -----Original Message----- > From: Leon Romanovsky <leon@kernel.org> > Sent: Thursday, December 1, 2022 12:11 AM > To: Veerasenareddy Burru <vburru@marvell.com> > Cc: netdev@vger.kernel.org; linux-kernel@vger.kernel.org; Liron Himi > <lironh@marvell.com>; Abhijit Ayarekar <aayarekar@marvell.com>; Sathesh > B Edara <sedara@marvell.com>; Satananda Burla <sburla@marvell.com>; > linux-doc@vger.kernel.org; David S. Miller <davem@davemloft.net>; Eric > Dumazet <edumazet@google.com>; Jakub Kicinski <kuba@kernel.org>; > Paolo Abeni <pabeni@redhat.com> > Subject: Re: [EXT] Re: [PATCH net-next v2 2/9] octeon_ep: poll for control > messages > > On Wed, Nov 30, 2022 at 03:44:30PM +0000, Veerasenareddy Burru wrote: > > > > > > > -----Original Message----- > > > From: Leon Romanovsky <leon@kernel.org> > > > Sent: Wednesday, November 30, 2022 1:30 AM > > > To: Veerasenareddy Burru <vburru@marvell.com> > > > Cc: netdev@vger.kernel.org; linux-kernel@vger.kernel.org; Liron Himi > > > <lironh@marvell.com>; Abhijit Ayarekar <aayarekar@marvell.com>; > > > Sathesh B Edara <sedara@marvell.com>; Satananda Burla > > > <sburla@marvell.com>; linux-doc@vger.kernel.org; David S. Miller > > > <davem@davemloft.net>; Eric Dumazet <edumazet@google.com>; > Jakub > > > Kicinski <kuba@kernel.org>; Paolo Abeni <pabeni@redhat.com> > > > Subject: [EXT] Re: [PATCH net-next v2 2/9] octeon_ep: poll for > > > control messages > > > > > > External Email > > > > > > -------------------------------------------------------------------- > > > -- On Tue, Nov 29, 2022 at 05:09:25AM -0800, Veerasenareddy Burru > > > wrote: > > > > Poll for control messages until interrupts are enabled. > > > > All the interrupts are enabled in ndo_open(). > > > > > > So what are you saying if I have your device and didn't enable > > > network device, you will poll forever? > > Yes, Leon. It will poll periodically until network interface is enabled. > > I don't know if it is acceptable behaviour in netdev, but it doesn't sound right > to me. What type of control messages will be sent by FW, which PF should > listen to them? > These messages include periodic keep alive (heartbeat) messages from FW and control messages from VFs. Every PF will be listening for its own control messages. Thank you. > > > > > > > Add ability to listen for notifications from firmware before ndo_open(). > > > > Once interrupts are enabled, this polling is disabled and all the > > > > messages are processed by bottom half of interrupt handler. > > > > > > > > Signed-off-by: Veerasenareddy Burru <vburru@marvell.com> > > > > Signed-off-by: Abhijit Ayarekar <aayarekar@marvell.com> > > > > --- > > > > v1 -> v2: > > > > * removed device status oct->status, as it is not required with the > > > > modified implementation in 0001-xxxx.patch > > > > > > > > .../marvell/octeon_ep/octep_cn9k_pf.c | 49 +++++++++---------- > > > > .../ethernet/marvell/octeon_ep/octep_main.c | 35 +++++++++++++ > > > > .../ethernet/marvell/octeon_ep/octep_main.h | 11 ++++- > > > > .../marvell/octeon_ep/octep_regs_cn9k_pf.h | 4 ++ > > > > 4 files changed, 71 insertions(+), 28 deletions(-) > > > > > > > > diff --git > > > > a/drivers/net/ethernet/marvell/octeon_ep/octep_cn9k_pf.c > > > > b/drivers/net/ethernet/marvell/octeon_ep/octep_cn9k_pf.c > > > > index 6ad88d0fe43f..ace2dfd1e918 100644 > > > > --- a/drivers/net/ethernet/marvell/octeon_ep/octep_cn9k_pf.c > > > > +++ b/drivers/net/ethernet/marvell/octeon_ep/octep_cn9k_pf.c > > > > @@ -352,27 +352,36 @@ static void > > > octep_setup_mbox_regs_cn93_pf(struct octep_device *oct, int q_no) > > > > mbox->mbox_read_reg = oct->mmio[0].hw_addr + > > > > CN93_SDP_R_MBOX_VF_PF_DATA(q_no); } > > > > > > > > -/* Mailbox Interrupt handler */ > > > > -static void cn93_handle_pf_mbox_intr(struct octep_device *oct) > > > > +/* Process non-ioq interrupts required to keep pf interface running. > > > > + * OEI_RINT is needed for control mailbox */ static int > > > > +octep_poll_non_ioq_interrupts_cn93_pf(struct octep_device *oct) > > > > { > > > > - u64 mbox_int_val = 0ULL, val = 0ULL, qno = 0ULL; > > > > + u64 reg0; > > > > + int handled = 0; > > > > > > Reversed Christmas tree. > > Thanks for the feedback. Will revise the patch. > > It is applicable to all patches. > > And please fix your email client to properly add blank lines between replies. > > Thanks > > > > > > > Thanks
On Mon, Dec 05, 2022 at 04:46:31AM +0000, Veerasenareddy Burru wrote: > > > > -----Original Message----- > > From: Leon Romanovsky <leon@kernel.org> > > Sent: Thursday, December 1, 2022 12:11 AM > > To: Veerasenareddy Burru <vburru@marvell.com> > > Cc: netdev@vger.kernel.org; linux-kernel@vger.kernel.org; Liron Himi > > <lironh@marvell.com>; Abhijit Ayarekar <aayarekar@marvell.com>; Sathesh > > B Edara <sedara@marvell.com>; Satananda Burla <sburla@marvell.com>; > > linux-doc@vger.kernel.org; David S. Miller <davem@davemloft.net>; Eric > > Dumazet <edumazet@google.com>; Jakub Kicinski <kuba@kernel.org>; > > Paolo Abeni <pabeni@redhat.com> > > Subject: Re: [EXT] Re: [PATCH net-next v2 2/9] octeon_ep: poll for control > > messages > > > > On Wed, Nov 30, 2022 at 03:44:30PM +0000, Veerasenareddy Burru wrote: > > > > > > > > > > -----Original Message----- > > > > From: Leon Romanovsky <leon@kernel.org> > > > > Sent: Wednesday, November 30, 2022 1:30 AM > > > > To: Veerasenareddy Burru <vburru@marvell.com> > > > > Cc: netdev@vger.kernel.org; linux-kernel@vger.kernel.org; Liron Himi > > > > <lironh@marvell.com>; Abhijit Ayarekar <aayarekar@marvell.com>; > > > > Sathesh B Edara <sedara@marvell.com>; Satananda Burla > > > > <sburla@marvell.com>; linux-doc@vger.kernel.org; David S. Miller > > > > <davem@davemloft.net>; Eric Dumazet <edumazet@google.com>; > > Jakub > > > > Kicinski <kuba@kernel.org>; Paolo Abeni <pabeni@redhat.com> > > > > Subject: [EXT] Re: [PATCH net-next v2 2/9] octeon_ep: poll for > > > > control messages > > > > > > > > External Email > > > > > > > > -------------------------------------------------------------------- > > > > -- On Tue, Nov 29, 2022 at 05:09:25AM -0800, Veerasenareddy Burru > > > > wrote: > > > > > Poll for control messages until interrupts are enabled. > > > > > All the interrupts are enabled in ndo_open(). > > > > > > > > So what are you saying if I have your device and didn't enable > > > > network device, you will poll forever? > > > Yes, Leon. It will poll periodically until network interface is enabled. > > > > I don't know if it is acceptable behaviour in netdev, but it doesn't sound right > > to me. What type of control messages will be sent by FW, which PF should > > listen to them? > > > > These messages include periodic keep alive (heartbeat) messages from FW and control messages from VFs. > Every PF will be listening for its own control messages. @netdev, as I said, I don't know if it is valid behaviour in netdev. Can you please comment? Thanks
On Mon, 5 Dec 2022 10:10:34 +0200 Leon Romanovsky wrote: > > These messages include periodic keep alive (heartbeat) messages > > from FW and control messages from VFs. Every PF will be listening > > for its own control messages. > > @netdev, as I said, I don't know if it is valid behaviour in netdev. > Can you please comment? Polling for control messages every 100ms? Sure. You say "valid in netdev" so perhaps you can educate us where/why it would not be?
On Mon, Dec 05, 2022 at 04:16:26PM -0800, Jakub Kicinski wrote: > On Mon, 5 Dec 2022 10:10:34 +0200 Leon Romanovsky wrote: > > > These messages include periodic keep alive (heartbeat) messages > > > from FW and control messages from VFs. Every PF will be listening > > > for its own control messages. > > > > @netdev, as I said, I don't know if it is valid behaviour in netdev. > > Can you please comment? > > Polling for control messages every 100ms? Sure. > > You say "valid in netdev" so perhaps you can educate us where/why it > would not be? It doesn't seem right to me that idle device burns CPU cycles, while it supports interrupts. If it needs "listen to FW", it will be much nicer to install interrupts immediately and don't wait for netdev. Thanks
On Tue, 6 Dec 2022 10:58:47 +0200 Leon Romanovsky wrote: > > Polling for control messages every 100ms? Sure. > > > > You say "valid in netdev" so perhaps you can educate us where/why it > > would not be? > > It doesn't seem right to me that idle device burns CPU cycles, while it > supports interrupts. If it needs "listen to FW", it will be much nicer to > install interrupts immediately and don't wait for netdev. No doubt, if there is an alternative we can push for it to be implemented. I guess this being yet another "IPU" there could be possible workarounds in FW? As always with IPUs - hard to tell :/ If there is no alternative - it is what it is. It's up to customers to buy good HW. That said, looking at what this set does - how are the VFs configured? That's the showstopper for the series in my mind.
> -----Original Message----- > From: Jakub Kicinski <kuba@kernel.org> > Sent: Tuesday, December 6, 2022 9:24 AM > To: Leon Romanovsky <leon@kernel.org> > Cc: Veerasenareddy Burru <vburru@marvell.com>; David S. Miller > <davem@davemloft.net>; Eric Dumazet <edumazet@google.com>; Paolo > Abeni <pabeni@redhat.com>; netdev@vger.kernel.org; linux- > kernel@vger.kernel.org; Liron Himi <lironh@marvell.com>; Abhijit Ayarekar > <aayarekar@marvell.com>; Sathesh B Edara <sedara@marvell.com>; > Satananda Burla <sburla@marvell.com>; linux-doc@vger.kernel.org > Subject: Re: [EXT] Re: [PATCH net-next v2 2/9] octeon_ep: poll for control > messages > > On Tue, 6 Dec 2022 10:58:47 +0200 Leon Romanovsky wrote: > > > Polling for control messages every 100ms? Sure. > > > > > > You say "valid in netdev" so perhaps you can educate us where/why it > > > would not be? > > > > It doesn't seem right to me that idle device burns CPU cycles, while > > it supports interrupts. If it needs "listen to FW", it will be much > > nicer to install interrupts immediately and don't wait for netdev. > > No doubt, if there is an alternative we can push for it to be implemented. I > guess this being yet another "IPU" there could be possible workarounds in > FW? As always with IPUs - hard to tell :/ > > If there is no alternative - it is what it is. > It's up to customers to buy good HW. > > That said, looking at what this set does - how are the VFs configured? > That's the showstopper for the series in my mind. VFs are created by writing to sriov_numvfs.
On Tue, 6 Dec 2022 21:19:26 +0000 Veerasenareddy Burru wrote: > > That said, looking at what this set does - how are the VFs configured? > > That's the showstopper for the series in my mind. > > VFs are created by writing to sriov_numvfs. Configured, not enabled.
> -----Original Message----- > From: Jakub Kicinski <kuba@kernel.org> > Sent: Tuesday, December 6, 2022 5:27 PM > To: Veerasenareddy Burru <vburru@marvell.com> > Cc: Leon Romanovsky <leon@kernel.org>; David S. Miller > <davem@davemloft.net>; Eric Dumazet <edumazet@google.com>; Paolo > Abeni <pabeni@redhat.com>; netdev@vger.kernel.org; linux- > kernel@vger.kernel.org; Liron Himi <lironh@marvell.com>; Abhijit Ayarekar > <aayarekar@marvell.com>; Sathesh B Edara <sedara@marvell.com>; > Satananda Burla <sburla@marvell.com>; linux-doc@vger.kernel.org > Subject: Re: [EXT] Re: [PATCH net-next v2 2/9] octeon_ep: poll for control > messages > > On Tue, 6 Dec 2022 21:19:26 +0000 Veerasenareddy Burru wrote: > > > That said, looking at what this set does - how are the VFs configured? > > > That's the showstopper for the series in my mind. > > > > VFs are created by writing to sriov_numvfs. > > Configured, not enabled. We have a follow up patch after this series implementing ndo_get_vf_xxx() and ndo_set_vf_xxx(). Thanks
On Thu, 8 Dec 2022 03:17:33 +0000 Veerasenareddy Burru wrote: > We have a follow up patch after this series implementing > ndo_get_vf_xxx() and ndo_set_vf_xxx(). We don't accept new drivers which use those interfaces.
> -----Original Message----- > From: Jakub Kicinski <kuba@kernel.org> > Sent: Wednesday, December 7, 2022 8:02 PM > To: Veerasenareddy Burru <vburru@marvell.com> > Cc: Leon Romanovsky <leon@kernel.org>; David S. Miller > <davem@davemloft.net>; Eric Dumazet <edumazet@google.com>; Paolo > Abeni <pabeni@redhat.com>; netdev@vger.kernel.org; linux- > kernel@vger.kernel.org; Liron Himi <lironh@marvell.com>; Abhijit Ayarekar > <aayarekar@marvell.com>; Sathesh B Edara <sedara@marvell.com>; > Satananda Burla <sburla@marvell.com>; linux-doc@vger.kernel.org > Subject: Re: [EXT] Re: [PATCH net-next v2 2/9] octeon_ep: poll for control > messages > > On Thu, 8 Dec 2022 03:17:33 +0000 Veerasenareddy Burru wrote: > > We have a follow up patch after this series implementing > > ndo_get_vf_xxx() and ndo_set_vf_xxx(). > > We don't accept new drivers which use those interfaces. Kindly suggest the acceptable interface. Thanks.
On Thu, 8 Dec 2022 04:41:56 +0000 Veerasenareddy Burru wrote: > > On Thu, 8 Dec 2022 03:17:33 +0000 Veerasenareddy Burru wrote: > > > We have a follow up patch after this series implementing > > > ndo_get_vf_xxx() and ndo_set_vf_xxx(). > > > > We don't accept new drivers which use those interfaces. > > Kindly suggest the acceptable interface. Kindly make the minimal effort to follow the list :/ Perhaps others have the time to explain things to you, I believe my time is best spent elsewhere.
> -----Original Message----- > From: Jakub Kicinski <kuba@kernel.org> > Sent: Wednesday, December 7, 2022 8:47 PM > To: Veerasenareddy Burru <vburru@marvell.com> > Cc: Leon Romanovsky <leon@kernel.org>; David S. Miller > <davem@davemloft.net>; Eric Dumazet <edumazet@google.com>; Paolo > Abeni <pabeni@redhat.com>; netdev@vger.kernel.org; linux- > kernel@vger.kernel.org; Liron Himi <lironh@marvell.com>; Abhijit Ayarekar > <aayarekar@marvell.com>; Sathesh B Edara <sedara@marvell.com>; > Satananda Burla <sburla@marvell.com>; linux-doc@vger.kernel.org > Subject: Re: [EXT] Re: [PATCH net-next v2 2/9] octeon_ep: poll for control > messages > > On Thu, 8 Dec 2022 04:41:56 +0000 Veerasenareddy Burru wrote: > > > On Thu, 8 Dec 2022 03:17:33 +0000 Veerasenareddy Burru wrote: > > > > We have a follow up patch after this series implementing > > > > ndo_get_vf_xxx() and ndo_set_vf_xxx(). > > > > > > We don't accept new drivers which use those interfaces. > > > > Kindly suggest the acceptable interface. > > Kindly make the minimal effort to follow the list :/ > > Perhaps others have the time to explain things to you, I believe my time is > best spent elsewhere. I see the new drivers have to implement VF representors. Will resubmit the patchset with representor support.
diff --git a/drivers/net/ethernet/marvell/octeon_ep/octep_cn9k_pf.c b/drivers/net/ethernet/marvell/octeon_ep/octep_cn9k_pf.c index 6ad88d0fe43f..ace2dfd1e918 100644 --- a/drivers/net/ethernet/marvell/octeon_ep/octep_cn9k_pf.c +++ b/drivers/net/ethernet/marvell/octeon_ep/octep_cn9k_pf.c @@ -352,27 +352,36 @@ static void octep_setup_mbox_regs_cn93_pf(struct octep_device *oct, int q_no) mbox->mbox_read_reg = oct->mmio[0].hw_addr + CN93_SDP_R_MBOX_VF_PF_DATA(q_no); } -/* Mailbox Interrupt handler */ -static void cn93_handle_pf_mbox_intr(struct octep_device *oct) +/* Process non-ioq interrupts required to keep pf interface running. + * OEI_RINT is needed for control mailbox + */ +static int octep_poll_non_ioq_interrupts_cn93_pf(struct octep_device *oct) { - u64 mbox_int_val = 0ULL, val = 0ULL, qno = 0ULL; + u64 reg0; + int handled = 0; - mbox_int_val = readq(oct->mbox[0]->mbox_int_reg); - for (qno = 0; qno < OCTEP_MAX_VF; qno++) { - val = readq(oct->mbox[qno]->mbox_read_reg); - dev_dbg(&oct->pdev->dev, - "PF MBOX READ: val:%llx from VF:%llx\n", val, qno); + /* Check for OEI INTR */ + reg0 = octep_read_csr64(oct, CN93_SDP_EPF_OEI_RINT); + if (reg0) { + dev_info(&oct->pdev->dev, + "Received OEI_RINT intr: 0x%llx\n", + reg0); + octep_write_csr64(oct, CN93_SDP_EPF_OEI_RINT, reg0); + if (reg0 & CN93_SDP_EPF_OEI_RINT_DATA_BIT_MBOX) + queue_work(octep_wq, &oct->ctrl_mbox_task); + + handled = 1; } - writeq(mbox_int_val, oct->mbox[0]->mbox_int_reg); + return handled; } /* Interrupts handler for all non-queue generic interrupts. */ static irqreturn_t octep_non_ioq_intr_handler_cn93_pf(void *dev) { struct octep_device *oct = (struct octep_device *)dev; - struct pci_dev *pdev = oct->pdev; u64 reg_val = 0; + struct pci_dev *pdev = oct->pdev; int i = 0; /* Check for IRERR INTR */ @@ -434,24 +443,9 @@ static irqreturn_t octep_non_ioq_intr_handler_cn93_pf(void *dev) goto irq_handled; } - /* Check for MBOX INTR */ - reg_val = octep_read_csr64(oct, CN93_SDP_EPF_MBOX_RINT(0)); - if (reg_val) { - dev_info(&pdev->dev, - "Received MBOX_RINT intr: 0x%llx\n", reg_val); - cn93_handle_pf_mbox_intr(oct); + /* Check for MBOX INTR and OEI INTR */ + if (octep_poll_non_ioq_interrupts_cn93_pf(oct)) goto irq_handled; - } - - /* Check for OEI INTR */ - reg_val = octep_read_csr64(oct, CN93_SDP_EPF_OEI_RINT); - if (reg_val) { - dev_info(&pdev->dev, - "Received OEI_EINT intr: 0x%llx\n", reg_val); - octep_write_csr64(oct, CN93_SDP_EPF_OEI_RINT, reg_val); - queue_work(octep_wq, &oct->ctrl_mbox_task); - goto irq_handled; - } /* Check for DMA INTR */ reg_val = octep_read_csr64(oct, CN93_SDP_EPF_DMA_RINT); @@ -712,6 +706,7 @@ void octep_device_setup_cn93_pf(struct octep_device *oct) oct->hw_ops.enable_interrupts = octep_enable_interrupts_cn93_pf; oct->hw_ops.disable_interrupts = octep_disable_interrupts_cn93_pf; + oct->hw_ops.poll_non_ioq_interrupts = octep_poll_non_ioq_interrupts_cn93_pf; oct->hw_ops.update_iq_read_idx = octep_update_iq_read_index_cn93_pf; diff --git a/drivers/net/ethernet/marvell/octeon_ep/octep_main.c b/drivers/net/ethernet/marvell/octeon_ep/octep_main.c index aa7d0ced9807..c07588461030 100644 --- a/drivers/net/ethernet/marvell/octeon_ep/octep_main.c +++ b/drivers/net/ethernet/marvell/octeon_ep/octep_main.c @@ -18,6 +18,7 @@ #include "octep_main.h" #include "octep_ctrl_net.h" +#define OCTEP_INTR_POLL_TIME_MSECS 100 struct workqueue_struct *octep_wq; /* Supported Devices */ @@ -512,6 +513,7 @@ static int octep_open(struct net_device *netdev) ret = octep_get_link_status(oct); if (!ret) octep_set_link_status(oct, true); + oct->poll_non_ioq_intr = false; /* Enable the input and output queues for this Octeon device */ oct->hw_ops.enable_io_queues(oct); @@ -573,6 +575,11 @@ static int octep_stop(struct net_device *netdev) oct->hw_ops.reset_io_queues(oct); octep_free_oqs(oct); octep_free_iqs(oct); + + oct->poll_non_ioq_intr = true; + queue_delayed_work(octep_wq, &oct->intr_poll_task, + msecs_to_jiffies(OCTEP_INTR_POLL_TIME_MSECS)); + netdev_info(netdev, "Device stopped !!\n"); return 0; } @@ -865,6 +872,28 @@ static const struct net_device_ops octep_netdev_ops = { .ndo_change_mtu = octep_change_mtu, }; +/** + * octep_intr_poll_task - work queue task to process non-ioq interrupts. + * + * @work: pointer to mbox work_struct + * + * Process non-ioq interrupts to handle control mailbox, pfvf mailbox. + **/ +static void octep_intr_poll_task(struct work_struct *work) +{ + struct octep_device *oct = container_of(work, struct octep_device, + intr_poll_task.work); + + if (!oct->poll_non_ioq_intr) { + dev_info(&oct->pdev->dev, "Interrupt poll task stopped.\n"); + return; + } + + oct->hw_ops.poll_non_ioq_interrupts(oct); + queue_delayed_work(octep_wq, &oct->intr_poll_task, + msecs_to_jiffies(OCTEP_INTR_POLL_TIME_MSECS)); +} + /** * octep_ctrl_mbox_task - work queue task to handle ctrl mbox messages. * @@ -1101,6 +1130,10 @@ static int octep_probe(struct pci_dev *pdev, const struct pci_device_id *ent) } INIT_WORK(&octep_dev->tx_timeout_task, octep_tx_timeout_task); INIT_WORK(&octep_dev->ctrl_mbox_task, octep_ctrl_mbox_task); + INIT_DELAYED_WORK(&octep_dev->intr_poll_task, octep_intr_poll_task); + octep_dev->poll_non_ioq_intr = true; + queue_delayed_work(octep_wq, &octep_dev->intr_poll_task, + msecs_to_jiffies(OCTEP_INTR_POLL_TIME_MSECS)); netdev->netdev_ops = &octep_netdev_ops; octep_set_ethtool_ops(netdev); @@ -1162,6 +1195,8 @@ static void octep_remove(struct pci_dev *pdev) if (netdev->reg_state == NETREG_REGISTERED) unregister_netdev(netdev); + oct->poll_non_ioq_intr = false; + cancel_delayed_work_sync(&oct->intr_poll_task); octep_device_cleanup(oct); pci_release_mem_regions(pdev); free_netdev(netdev); diff --git a/drivers/net/ethernet/marvell/octeon_ep/octep_main.h b/drivers/net/ethernet/marvell/octeon_ep/octep_main.h index 123ffc13754d..70cc3e236cb4 100644 --- a/drivers/net/ethernet/marvell/octeon_ep/octep_main.h +++ b/drivers/net/ethernet/marvell/octeon_ep/octep_main.h @@ -73,6 +73,7 @@ struct octep_hw_ops { void (*enable_interrupts)(struct octep_device *oct); void (*disable_interrupts)(struct octep_device *oct); + int (*poll_non_ioq_interrupts)(struct octep_device *oct); void (*enable_io_queues)(struct octep_device *oct); void (*disable_io_queues)(struct octep_device *oct); @@ -270,7 +271,15 @@ struct octep_device { /* Work entry to handle ctrl mbox interrupt */ struct work_struct ctrl_mbox_task; - + /* Wait queue for host to firmware requests */ + wait_queue_head_t ctrl_req_wait_q; + /* List of objects waiting for h2f response */ + struct list_head ctrl_req_wait_list; + + /* Enable non-ioq interrupt polling */ + bool poll_non_ioq_intr; + /* Work entry to poll non-ioq interrupts */ + struct delayed_work intr_poll_task; }; static inline u16 OCTEP_MAJOR_REV(struct octep_device *oct) diff --git a/drivers/net/ethernet/marvell/octeon_ep/octep_regs_cn9k_pf.h b/drivers/net/ethernet/marvell/octeon_ep/octep_regs_cn9k_pf.h index 3d5d39a52fe6..0466fd9a002d 100644 --- a/drivers/net/ethernet/marvell/octeon_ep/octep_regs_cn9k_pf.h +++ b/drivers/net/ethernet/marvell/octeon_ep/octep_regs_cn9k_pf.h @@ -364,4 +364,8 @@ /* Number of non-queue interrupts in CN93xx */ #define CN93_NUM_NON_IOQ_INTR 16 + +/* bit 0 for control mbox interrupt */ +#define CN93_SDP_EPF_OEI_RINT_DATA_BIT_MBOX BIT_ULL(0) + #endif /* _OCTEP_REGS_CN9K_PF_H_ */