lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20210804235223.rkyxuvdeowcf7wgl@bsd-mbp.dhcp.thefacebook.com>
Date:   Wed, 4 Aug 2021 16:52:23 -0700
From:   Jonathan Lemon <jonathan.lemon@...il.com>
To:     Jakub Kicinski <kuba@...nel.org>
Cc:     davem@...emloft.net, richardcochran@...il.com, kernel-team@...com,
        netdev@...r.kernel.org
Subject: Re: [PATCH net-next v4] ptp: ocp: Expose various resources on the
 timecard.

On Wed, Aug 04, 2021 at 02:09:57PM -0700, Jakub Kicinski wrote:
> On Tue,  3 Aug 2021 20:33:27 -0700 Jonathan Lemon wrote:
> > +static const struct devlink_param ptp_ocp_devlink_params[] = {
> > +};
> > +
> > +static void
> > +ptp_ocp_devlink_set_params_init_values(struct devlink *devlink)
> > +{
> > +}
> 
> Why register empty set of params?

I had this filled out at some point, but they got removed.


> > +static int
> > +ptp_ocp_devlink_register(struct devlink *devlink, struct device *dev)
> > +{
> > +	int err;
> > +
> > +	err = devlink_register(devlink, dev);
> > +	if (err)
> > +		return err;
> > +
> > +	err = devlink_params_register(devlink, ptp_ocp_devlink_params,
> > +				      ARRAY_SIZE(ptp_ocp_devlink_params));
> > +	ptp_ocp_devlink_set_params_init_values(devlink);
> > +	if (err)
> > +		goto out;
> > +	devlink_params_publish(devlink);
> > +
> > +	return 0;
> > +
> > +out:
> > +	devlink_unregister(devlink);
> > +	return err;
> > +}
> 
> > +static int
> > +ptp_ocp_devlink_info_get(struct devlink *devlink, struct devlink_info_req *req,
> > +			 struct netlink_ext_ack *extack)
> > +{
> > +	struct ptp_ocp *bp = devlink_priv(devlink);
> > +	char buf[32];
> > +	int err;
> > +
> > +	err = devlink_info_driver_name_put(req, KBUILD_MODNAME);
> > +	if (err)
> > +		return err;
> > +
> > +	if (bp->pending_image) {
> > +		err = devlink_info_version_stored_put(req,
> > +						      "timecard", "pending");
> 
> "pending" is not a version. It seems you're talking to the flash
> directly, why not read the version?

We're not talking to the flash yet.  We're writing a new image, but don't
know the image version, since it's not accessible from the FPGA blob.  So
since we're don't know what the stored image is until we reboot, I've set
it to 'pending' here - aka "pending reboot".  Could also be "unknown".
 

> > +	}
> > +
> > +	if (bp->image) {
> > +		u32 ver = ioread32(&bp->image->version);
> > +
> > +		if (ver & 0xffff) {
> > +			sprintf(buf, "%d", ver);
> > +			err = devlink_info_version_running_put(req,
> > +							       "timecard",
> > +							       buf);
> > +		} else {
> > +			sprintf(buf, "%d", ver >> 16);
> > +			err = devlink_info_version_running_put(req,
> > +							       "golden flash",
> > +							       buf);
> 
> What's the difference between "timecard" and "golden flash"?

There are two images stored in flash: "golden image", an image that
just provides flash functionality, and the actual featured FPGA image.


> Why call firmware for a timecard timecard? We don't call NIC
> firmware "NIC".

I didn't see a standard string to use.  I can call it 'fw.version', just
needed to differentiate it between the 'golden flash' loader and actual
firmware.



> Drivers using devlink should document what they implement and meaning
> of various fields. Please see examples in
> Documentation/networking/devlink/

I'll add things there.


> > +static void
> > +ptp_ocp_devlink_health_register(struct devlink *devlink)
> > +{
> > +	struct ptp_ocp *bp = devlink_priv(devlink);
> > +	struct devlink_health_reporter *r;
> > +
> > +	r = devlink_health_reporter_create(devlink, &ptp_ocp_health_ops, 0, bp);
> > +	if (IS_ERR(r))
> > +		dev_err(&bp->pdev->dev, "Failed to create reporter, err %ld\n",
> > +			PTR_ERR(r));
> > +	bp->health = r;
> > +}
> 
> What made you use devlink health here? Why not just print that "No GPS
> signal" message to the logs? Devlink health is supposed to give us
> meaningful context dumps and remediation, here neither is used.

The initial idea was to use 'devlink monitor' report the immediate
failure of the GNSS signal (rather than going through the kernel logs)
The 'devlink health' also keeps a count of how often the GPS signal
is lost.

Our application guys decided to use a different monitoring method,
so I can rip this out if objectionable. 
-- 
Jonathan

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ