Re: [PATCH v2 net-next 3/3] octeontx2-af: Add devlink health reporters for NIX

From: Sunil Kovvuri
Date: Sat Nov 07 2020 - 10:51:43 EST


On Sat, Nov 7, 2020 at 2:28 AM Saeed Mahameed <saeed@xxxxxxxxxx> wrote:
>
> On Fri, 2020-11-06 at 00:59 +0530, Sunil Kovvuri wrote:
> > > > > > Output:
> > > > > > # ./devlink health
> > > > > > pci/0002:01:00.0:
> > > > > > reporter npa
> > > > > > state healthy error 0 recover 0
> > > > > > reporter nix
> > > > > > state healthy error 0 recover 0
> > > > > > # ./devlink health dump show pci/0002:01:00.0 reporter nix
> > > > > > NIX_AF_GENERAL:
> > > > > > Memory Fault on NIX_AQ_INST_S read: 0
> > > > > > Memory Fault on NIX_AQ_RES_S write: 0
> > > > > > AQ Doorbell error: 0
> > > > > > Rx on unmapped PF_FUNC: 0
> > > > > > Rx multicast replication error: 0
> > > > > > Memory fault on NIX_RX_MCE_S read: 0
> > > > > > Memory fault on multicast WQE read: 0
> > > > > > Memory fault on mirror WQE read: 0
> > > > > > Memory fault on mirror pkt write: 0
> > > > > > Memory fault on multicast pkt write: 0
> > > > > > NIX_AF_RAS:
> > > > > > Poisoned data on NIX_AQ_INST_S read: 0
> > > > > > Poisoned data on NIX_AQ_RES_S write: 0
> > > > > > Poisoned data on HW context read: 0
> > > > > > Poisoned data on packet read from mirror buffer: 0
> > > > > > Poisoned data on packet read from mcast buffer: 0
> > > > > > Poisoned data on WQE read from mirror buffer: 0
> > > > > > Poisoned data on WQE read from multicast buffer: 0
> > > > > > Poisoned data on NIX_RX_MCE_S read: 0
> > > > > > NIX_AF_RVU:
> > > > > > Unmap Slot Error: 0
> > > > > >
> > > > >
> > > > > Now i am a little bit skeptic here, devlink health reporter
> > > > > infrastructure was
> > > > > never meant to deal with dump op only, the main purpose is to
> > > > > diagnose/dump and recover.
> > > > >
> > > > > especially in your use case where you only report counters, i
> > > > > don't
> > > > > believe
> > > > > devlink health dump is a proper interface for this.
> > > > These are not counters. These are error interrupts raised by HW
> > > > blocks.
> > > > The count is provided to understand on how frequently the errors
> > > > are
> > > > seen.
> > > > Error recovery for some of the blocks happen internally. That is
> > > > the
> > > > reason,
> > > > Currently only dump op is added.
> > >
> > > So you are counting these events in driver, sounds like a counter
> > > to
> > > me, i really think this shouldn't belong to devlink, unless you
> > > really
> > > utilize devlink health ops for actual reporting and recovery.
> > >
> > > what's wrong with just dumping these counters to ethtool ?
> >
> > This driver is a administrative driver which handles all the
> > resources
> > in the system and doesn't do any IO.
> > NIX and NPA are key co-processor blocks which this driver handles.
> > With NIX and NPA, there are pieces
> > which gets attached to a PCI device to make it a networking device.
> > We
> > have netdev drivers registered to this
> > networking device. Some more information about the drivers is
> > available at
> > https://www.kernel.org/doc/html/latest/networking/device_drivers/ethernet/marvell/octeontx2.html
> >
> > So we don't have a netdev here to report these co-processor block
> > level errors over ethtool.
> >
>
> but AF driver can't be standalone to operate your hw, it must have a
> PF/VF with netdev interface to do io, so even if your model is modular,
> a common user of this driver will always see a netdev.
>

That's right, user will always see a netdev, but
The co-processor blocks are like this
- Each co-processor has two parts, AF unit and LF units (local function)
- Each of the co-processor can have multiple LFs, incase of NIX
co-processor, each of the LF provides RQ, SQ, CQs etc.
- So the AF driver handles the co-processor's AF unit and upon
receiving requests from PF/VF attaches the LFs to them, so that they
can do network IO.
- Within co-processor, AF unit specific errors (global) are reported
to AF driver and LF specific errors are reported to netdev driver.
- There can be 10s of netdev driver instances in the system, so these
AF unit global errors cannot be routed and shown in one of the
netdev's ethtool.

Thanks,
Sunil.