linux-pci.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Bjorn Helgaas <helgaas@kernel.org>
To: sathyanarayanan.kuppuswamy@linux.intel.com
Cc: joro@8bytes.org, dwmw2@infradead.org, linux-pci@vger.kernel.org,
	iommu@lists.linux-foundation.org, linux-kernel@vger.kernel.org,
	Ashok Raj <ashok.raj@intel.com>,
	Jacob Pan <jacob.jun.pan@linux.intel.com>,
	Keith Busch <keith.busch@intel.com>
Subject: Re: [PATCH v1 1/2] PCI: ATS: Add function to check ATS page aligned request status.
Date: Thu, 7 Feb 2019 14:07:47 -0600	[thread overview]
Message-ID: <20190207200747.GK7268@google.com> (raw)
In-Reply-To: <91bfae8b1d4b424219e3ce3c1fc03559c73f1ae7.1549478584.git.sathyanarayanan.kuppuswamy@linux.intel.com>

Hi Kuppuswamy,

Previous changes to ats.c used subject lines starting with just
"PCI:".

I think it does make sense to include "ATS", but please do it in
the way we do it for other PCI features, e.g.,

  PCI/ATS: Add pci_ats_page_aligned() interface

On Thu, Feb 07, 2019 at 10:41:13AM -0800, sathyanarayanan.kuppuswamy@linux.intel.com wrote:
> From: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
> 
> Add a new function to return the status of ATS page aligned request
> bit in ATS capability register. This function will be used by
> drivers like IOMMU, if it is required to enforce page-aligned
> requests in ATS.

"return the Page Aligned Request bit in the ATS Capability Register"

This is just to make the terminology match the PCIe spec exactly so
it's easier to look up.

> Cc: Ashok Raj <ashok.raj@intel.com>
> Cc: Jacob Pan <jacob.jun.pan@linux.intel.com>
> Cc: Keith Busch <keith.busch@intel.com>
> Suggested-by: Ashok Raj <ashok.raj@intel.com>
> Signed-off-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
> ---
>  drivers/pci/ats.c             | 22 ++++++++++++++++++++++
>  include/linux/pci.h           |  2 ++
>  include/uapi/linux/pci_regs.h |  1 +
>  3 files changed, 25 insertions(+)
> 
> diff --git a/drivers/pci/ats.c b/drivers/pci/ats.c
> index 5b78f3b1b918..7d14b9a1981e 100644
> --- a/drivers/pci/ats.c
> +++ b/drivers/pci/ats.c
> @@ -142,6 +142,28 @@ int pci_ats_queue_depth(struct pci_dev *dev)
>  }
>  EXPORT_SYMBOL_GPL(pci_ats_queue_depth);
>  
> +/**
> + * pci_ats_page_aligned - Return ATS page aligned request bit status.

Capitalize name of bit as above.

> + * @pdev: the PCI device
> + *
> + * Returns  value > 0 if address is aligned or 0 otherwise.

s/  / /

"if Untranslated Addresses generated by the device are always
aligned or ..."

> + *
> + * As per PCI spec, If page aligned request bit is set, it indicates
> + * the untranslated address is always aligned to a 4096 byte boundary.

"Per PCIe r4.0, sec 10.5.1.2, if the Page Aligned Request bit,
Untranslated Addresses generated by the device are always aligned to a
4096 byte boundary."

> + */
> +int pci_ats_page_aligned(struct pci_dev *pdev)
> +{
> +	u16 cap;
> +
> +	if (!pdev->ats_cap)
> +		return 0;
> +
> +	pci_read_config_word(pdev, pdev->ats_cap + PCI_ATS_CAP, &cap);
> +
> +	return PCI_ATS_CAP_PAGE_ALIGNED(cap);
> +}
> +EXPORT_SYMBOL_GPL(pci_ats_page_aligned);
> +
>  #ifdef CONFIG_PCI_PRI
>  /**
>   * pci_enable_pri - Enable PRI capability
> diff --git a/include/linux/pci.h b/include/linux/pci.h
> index 65f1d8c2f082..9724a8c0496b 100644
> --- a/include/linux/pci.h
> +++ b/include/linux/pci.h
> @@ -1524,11 +1524,13 @@ void pci_ats_init(struct pci_dev *dev);
>  int pci_enable_ats(struct pci_dev *dev, int ps);
>  void pci_disable_ats(struct pci_dev *dev);
>  int pci_ats_queue_depth(struct pci_dev *dev);
> +int pci_ats_page_aligned(struct pci_dev *dev);
>  #else
>  static inline void pci_ats_init(struct pci_dev *d) { }
>  static inline int pci_enable_ats(struct pci_dev *d, int ps) { return -ENODEV; }
>  static inline void pci_disable_ats(struct pci_dev *d) { }
>  static inline int pci_ats_queue_depth(struct pci_dev *d) { return -ENODEV; }
> +static inline int pci_ats_page_aligned(struct pci_dev *dev) { return 0; }
>  #endif
>  
>  #ifdef CONFIG_PCIE_PTM
> diff --git a/include/uapi/linux/pci_regs.h b/include/uapi/linux/pci_regs.h
> index e1e9888c85e6..d42a759867b8 100644
> --- a/include/uapi/linux/pci_regs.h
> +++ b/include/uapi/linux/pci_regs.h
> @@ -866,6 +866,7 @@
>  #define PCI_ATS_CAP		0x04	/* ATS Capability Register */
>  #define  PCI_ATS_CAP_QDEP(x)	((x) & 0x1f)	/* Invalidate Queue Depth */
>  #define  PCI_ATS_MAX_QDEP	32	/* Max Invalidate Queue Depth */
> +#define  PCI_ATS_CAP_PAGE_ALIGNED(x)	0x0020 /* Page Aligned Request */

This is wrong because it *always* returns "true", regardless of the
value of the ATS Capability register.

I would prefer this:

  #define  PCI_ATS_CAP_PAGE_ALIGNED   0x0020

and then test it like this:

  if (cap & PCI_ATS_CAP_PAGE_ALIGNED)
    return 1;
  return 0;

>  #define PCI_ATS_CTRL		0x06	/* ATS Control Register */
>  #define  PCI_ATS_CTRL_ENABLE	0x8000	/* ATS Enable */
>  #define  PCI_ATS_CTRL_STU(x)	((x) & 0x1f)	/* Smallest Translation Unit */
> -- 
> 2.20.1
> 

  reply	other threads:[~2019-02-07 20:07 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-07 18:41 [PATCH v1 0/2] Add page alignment check in Intel IOMMU sathyanarayanan.kuppuswamy
2019-02-07 18:41 ` [PATCH v1 1/2] PCI: ATS: Add function to check ATS page aligned request status sathyanarayanan.kuppuswamy
2019-02-07 20:07   ` Bjorn Helgaas [this message]
2019-02-07 20:39     ` sathyanarayanan kuppuswamy
2019-02-07 20:38   ` Sinan Kaya
2019-02-07 22:16     ` sathyanarayanan kuppuswamy
2019-02-08  1:58       ` Sinan Kaya
2019-02-09  1:02         ` sathyanarayanan kuppuswamy
2019-02-09  4:49           ` Sinan Kaya
2019-02-11 19:15             ` Raj, Ashok
2019-02-11 19:24               ` sathyanarayanan kuppuswamy
2019-02-11 20:35               ` Sinan Kaya
2019-02-07 18:41 ` [PATCH v1 2/2] iommu/vt-d: Enable ATS only if the device uses page aligned address sathyanarayanan.kuppuswamy

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=20190207200747.GK7268@google.com \
    --to=helgaas@kernel.org \
    --cc=ashok.raj@intel.com \
    --cc=dwmw2@infradead.org \
    --cc=iommu@lists.linux-foundation.org \
    --cc=jacob.jun.pan@linux.intel.com \
    --cc=joro@8bytes.org \
    --cc=keith.busch@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pci@vger.kernel.org \
    --cc=sathyanarayanan.kuppuswamy@linux.intel.com \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).