Thread (43 messages) 43 messages, 4 authors, 2021-08-10

Re: [PATCH V7 9/9] PCI/P2PDMA: Add a 10-Bit Tag check in P2PDMA

From: Bjorn Helgaas <helgaas@kernel.org>
Date: 2021-08-09 17:31:16
Also in: linux-pci, netdev

On Sat, Aug 07, 2021 at 03:11:34PM +0800, Dongdong Liu wrote:
On 2021/8/6 2:12, Bjorn Helgaas wrote:
quoted
On Wed, Aug 04, 2021 at 09:47:08PM +0800, Dongdong Liu wrote:
quoted
Add a 10-Bit Tag check in the P2PDMA code to ensure that a device with
10-Bit Tag Requester doesn't interact with a device that does not
support 10-BIT Tag Completer. Before that happens, the kernel should
emit a warning. "echo 0 > /sys/bus/pci/devices/.../10bit_tag" to
disable 10-BIT Tag Requester for PF device.
"echo 0 > /sys/bus/pci/devices/.../sriov_vf_10bit_tag_ctl" to disable
10-BIT Tag Requester for VF device.
s/10-BIT/10-Bit/ several times.
Will fix.
quoted
Add blank lines between paragraphs.
Will fix.
quoted
quoted
Signed-off-by: Dongdong Liu <redacted>
---
 drivers/pci/p2pdma.c | 40 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)
diff --git a/drivers/pci/p2pdma.c b/drivers/pci/p2pdma.c
index 50cdde3..948f2be 100644
--- a/drivers/pci/p2pdma.c
+++ b/drivers/pci/p2pdma.c
@@ -19,6 +19,7 @@
 #include <linux/random.h>
 #include <linux/seq_buf.h>
 #include <linux/xarray.h>
+#include "pci.h"

 enum pci_p2pdma_map_type {
 	PCI_P2PDMA_MAP_UNKNOWN = 0,
@@ -410,6 +411,41 @@ static unsigned long map_types_idx(struct pci_dev *client)
 		(client->bus->number << 8) | client->devfn;
 }

+static bool check_10bit_tags_vaild(struct pci_dev *a, struct pci_dev *b,
s/vaild/valid/

Or maybe s/valid/safe/ or s/valid/supported/, since "valid" isn't
quite the right word here.  We want to know whether the source is
enabled to generate 10-bit tags, and if so, whether the destination
can handle them.

"if (check_10bit_tags_valid())" does not make sense because
"check_10bit_tags_valid()" is not a question with a yes/no answer.

"10bit_tags_valid()" *might* be, because "if (10bit_tags_valid())"
makes sense.  But I don't think you can start with a digit.

Or maybe you want to invert the sense, e.g.,
"10bit_tags_unsupported()", since that avoids negation at the caller:

  if (10bit_tags_unsupported(a, b) ||
      10bit_tags_unsupported(b, a))
        map_type = PCI_P2PDMA_MAP_NOT_SUPPORTED;
Good suggestion. add a pci_ prefix.

if (pci_10bit_tags_unsupported(a, b) ||
    pci_10bit_tags_unsupported(b, a))
	map_type = PCI_P2PDMA_MAP_NOT_SUPPORTED;
This treats both directions as equally important.  I don't know P2PDMA
very well, but that doesn't seem like it would necessarily be the
case.  I would think a common case would be device A doing DMA to B,
but B *not* doing DMA to A.  So can you tell which direction you're
setting up here, and can you take advantage of any asymmetry, e.g., by
enabling 10-bit tags in the direction that supports it even if the
other direction does not?
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help