All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jacob Keller <jacob.e.keller@intel.com>
To: netdev@vger.kernel.org
Cc: Jacob Keller <jacob.e.keller@intel.com>,
	Jiri Pirko <jiri@nvidia.com>, Jakub Kicinski <kuba@kernel.org>
Subject: [PATCH net-next v3 0/9] support direct read from region
Date: Mon, 28 Nov 2022 12:36:38 -0800	[thread overview]
Message-ID: <20221128203647.1198669-1-jacob.e.keller@intel.com> (raw)

Changes since v2:
* Picked up ack/review tags
* Added DEVLINK_ATTR_REGION_DIRECT so userspace must be explicit
* Fixed the capitalization of netlink error messages

Changes since v1:
* Re-ordered patches at the beginning slightly, pulling min_t change and
  reporting of extended error messages to the start of the series.
* use NL_SET_ERR_MSG_ATTR for reporting invalid attributes
* Use kmalloc instead of kzalloc
* Cleanup spacing around data_size
* Fix the __always_unused positioning
* Update documentation for direct reads to clearly explain they are not
  atomic for larger reads.
* Add a patch to fix missing documentation for ice.rst
* Mention the direct read support in ice.rst documentation

A long time ago when initially implementing devlink regions in ice I
proposed the ability to allow reading from a region without taking a
snapshot [1]. I eventually dropped this work from the original series due to
size. Then I eventually lost track of submitting this follow up.

This can be useful when interacting with some region that has some
definitive "contents" from which snapshots are made. For example the ice
driver has regions representing the contents of the device flash.

If userspace wants to read the contents today, it must first take a snapshot
and then read from that snapshot. This makes sense if you want to read a
large portion of data or you want to be sure reads are consistently from the
same recording of the flash.

However if user space only wants to read a small chunk, it must first
generate a snapshot of the entire contents, perform a read from the
snapshot, and then delete the snapshot after reading.

For such a use case, a direct read from the region makes more sense. This
can be achieved by allowing the devlink region read command to work without
a snapshot. Instead the portion to be read can be forwarded directly to the
driver via a new .read callback.

This avoids the need to read the entire region contents into memory first
and avoids the software overhead of creating a snapshot and then deleting
it.

This series implements such behavior and hooks up the ice NVM and shadow RAM
regions to allow it.

[1] https://lore.kernel.org/netdev/20200130225913.1671982-1-jacob.e.keller@intel.com/

Cc: Jiri Pirko <jiri@nvidia.com>
Cc: Jakub Kicinski <kuba@kernel.org>



Jacob Keller (9):
  devlink: use min_t to calculate data_size
  devlink: report extended error message in region_read_dumpit()
  devlink: find snapshot in devlink_nl_cmd_region_read_dumpit
  devlink: remove unnecessary parameter from chunk_fill function
  devlink: refactor region_read_snapshot_fill to use a callback function
  devlink: support directly reading from region memory
  ice: use same function to snapshot both NVM and Shadow RAM
  ice: document 'shadow-ram' devlink region
  ice: implement direct read for NVM and Shadow RAM regions

 .../networking/devlink/devlink-region.rst     |  13 ++
 Documentation/networking/devlink/ice.rst      |  13 +-
 drivers/net/ethernet/intel/ice/ice_devlink.c  | 112 ++++++++------
 include/net/devlink.h                         |  16 ++
 include/uapi/linux/devlink.h                  |   2 +
 net/core/devlink.c                            | 139 ++++++++++++++----
 6 files changed, 215 insertions(+), 80 deletions(-)


base-commit: c672e37279896f570cfa44926d57497e8d16033b
-- 
2.38.1.420.g319605f8f00e


             reply	other threads:[~2022-11-28 20:37 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-28 20:36 Jacob Keller [this message]
2022-11-28 20:36 ` [PATCH net-next v3 1/9] devlink: use min_t to calculate data_size Jacob Keller
2022-11-28 20:36 ` [PATCH net-next v3 2/9] devlink: report extended error message in region_read_dumpit() Jacob Keller
2022-11-28 20:36 ` [PATCH net-next v3 3/9] devlink: find snapshot in devlink_nl_cmd_region_read_dumpit Jacob Keller
2022-11-28 20:36 ` [PATCH net-next v3 4/9] devlink: remove unnecessary parameter from chunk_fill function Jacob Keller
2022-11-28 20:36 ` [PATCH net-next v3 5/9] devlink: refactor region_read_snapshot_fill to use a callback function Jacob Keller
2022-11-28 20:36 ` [PATCH net-next v3 6/9] devlink: support directly reading from region memory Jacob Keller
2022-11-29  8:17   ` Jiri Pirko
2022-11-28 20:36 ` [PATCH net-next v3 7/9] ice: use same function to snapshot both NVM and Shadow RAM Jacob Keller
2022-11-28 20:36 ` [PATCH net-next v3 8/9] ice: document 'shadow-ram' devlink region Jacob Keller
2022-11-28 20:36 ` [PATCH net-next v3 9/9] ice: implement direct read for NVM and Shadow RAM regions Jacob Keller
2022-12-01  5:50 ` [PATCH net-next v3 0/9] support direct read from region patchwork-bot+netdevbpf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20221128203647.1198669-1-jacob.e.keller@intel.com \
    --to=jacob.e.keller@intel.com \
    --cc=jiri@nvidia.com \
    --cc=kuba@kernel.org \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.