-----Original Message----- From: liulongfang Sent: 05 January 2023 07:48 To: Shameerali Kolothum Thodi shameerali.kolothum.thodi@huawei.com; Jonathan Cameron jonathan.cameron@huawei.com; Zengtao (B) prime.zeng@hisilicon.com Cc: linuxarm@openeuler.org; yekai (A) yekai13@huawei.com; fanghao (A) fanghao11@huawei.com; Wangzhou (B) wangzhou1@hisilicon.com; shenyang (M) shenyang39@huawei.com; liulongfang liulongfang@huawei.com; qianweili qianweili@huawei.com; liudongdong (C) liudongdong3@huawei.com Subject: [PATCH v3 1/3] iommu/iopf: add a timeout parameter for IOPF
In the current IOMMU subsystem, IO page fault processing has delays or unresponsive problems. By adding a tunable setup parameter, users can decide whether to use a timeout timer to prevent unresponsive problems.
This implementation refers to Intel's previous patch, URL: https://lore.kernel.org/lkml/1565900005-62508-2-git-
send-email-jacob.jun.pan@linux.intel.com/
Looks like the link has a line break.
Signed-off-by: Longfang Liu liulongfang@huawei.com
Since this is almost similar to Jacob's patch, you should make him as the author and add your sign off tag after his.
Thanks, Shameer
.../admin-guide/kernel-parameters.txt | 8 +++++ drivers/iommu/io-pgfault.c | 32 +++++++++++++++++++ 2 files changed, 40 insertions(+)
diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index 6b838869554b..425d446d92c6 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -2176,6 +2176,14 @@ 1 - Bypass the IOMMU for DMA. unset - Use value of CONFIG_IOMMU_DEFAULT_PASSTHROUGH.
- iommu.iopf_timeout=
Timeout in milliseconds to wait for page response
of a IO page fault request.
Format: <integer>
Default: 600
0 - no timeout tracking
100 to 10000 - allowed range
- io7= [HW] IO7 for Marvel-based Alpha systems See comment before marvel_specify_io7 in arch/alpha/kernel/core_marvel.c.
diff --git a/drivers/iommu/io-pgfault.c b/drivers/iommu/io-pgfault.c index e5b8b9110c13..cd7ebbfe4a67 100644 --- a/drivers/iommu/io-pgfault.c +++ b/drivers/iommu/io-pgfault.c @@ -45,6 +45,17 @@ struct iopf_fault { struct list_head list; };
+/**
- Timeout to wait for page response of a pending page request. This is
- intended as a basic safety net in case a pending page request is not
- responded for an exceptionally long time. Device may also implement
- its own protection mechanism against this exception.
- default to 600 milliseconds.
- */
+#define IOPF_RESPONSE_DEF_TIMEOUT 600 +#define IOPF_RESPONSE_MAX_TIMEOUT 10000 +static unsigned long iopf_timeout_ms = IOPF_RESPONSE_DEF_TIMEOUT;
struct iopf_group { struct iopf_fault last_fault; struct list_head faults; @@ -52,6 +63,27 @@ struct iopf_group { struct device *dev; };
+static int __init iommu_set_iopf_timeout(char *str) +{
- unsigned long timeout;
- int ret;
- if (!str)
return -EINVAL;
- ret = kstrtoul(str, 10, &timeout);
- if (ret)
return ret;
- if (timeout > IOPF_RESPONSE_MAX_TIMEOUT)
return -EINVAL;
- iopf_timeout_ms = timeout;
- return 0;
+} +early_param("iommu.iopf_timeout", iommu_set_iopf_timeout);
static int iopf_complete_group(struct device *dev, struct iopf_fault *iopf, enum iommu_page_response_code status) { -- 2.24.0