* [PATCH v4 0/4] PCI: qcom: Add support for OPP
@ 2023-08-22 15:12 Krishna chaitanya chundru
2023-08-22 15:12 ` [PATCH v4 1/4] dt-bindings: pci: qcom: Add opp table Krishna chaitanya chundru
` (3 more replies)
0 siblings, 4 replies; 17+ messages in thread
From: Krishna chaitanya chundru @ 2023-08-22 15:12 UTC (permalink / raw)
To: manivannan.sadhasivam
Cc: helgaas, linux-pci, linux-arm-msm, linux-kernel, quic_vbadigan,
quic_nitegupt, quic_skananth, quic_ramkri, quic_parass,
krzysztof.kozlowski, Krishna chaitanya chundru
This patch adds support for OPP to vote for the performance state of RPMH
power domain based upon GEN speed it PCIe got enumerated.
Before link up PCIe driver will vote for the maximum performance state.
Add API dev_pm_opp_find_level_floor to find To find the highest opp for a device
based on the level.
changes from v3:
- Removing the opp vote on suspend when the link is not up and link is not
up and add debug prints as suggested by pavan.
- Added dev_pm_opp_find_level_floor API to find the highest opp to vote.
changes from v2:
- Instead of using the freq based opp search use level based as suggested
by Dmitry Baryshkov.
Changes from v1:
- Addressed comments from Krzysztof Kozlowski.
- Added the rpmhpd_opp_xxx phandle as suggested by pavan.
- Added dev_pm_opp_set_opp API call which was missed on previous patch.
Krishna chaitanya chundru (4):
dt-bindings: pci: qcom: Add opp table
arm64: dts: qcom: sm8450: Add opp table support to PCIe
OPP: Add api to retrieve opps which is at most the provided level
PCI: qcom: Add OPP support for speed based performance state of RPMH
.../devicetree/bindings/pci/qcom,pcie.yaml | 4 ++
arch/arm64/boot/dts/qcom/sm8450.dtsi | 47 +++++++++++++++++++
drivers/opp/core.c | 26 +++++++++++
drivers/pci/controller/dwc/pcie-qcom.c | 52 ++++++++++++++++++++++
include/linux/pm_opp.h | 4 ++
5 files changed, 133 insertions(+)
--
2.7.4
^ permalink raw reply [flat|nested] 17+ messages in thread
* [PATCH v4 1/4] dt-bindings: pci: qcom: Add opp table
2023-08-22 15:12 [PATCH v4 0/4] PCI: qcom: Add support for OPP Krishna chaitanya chundru
@ 2023-08-22 15:12 ` Krishna chaitanya chundru
2023-08-22 16:06 ` Konrad Dybcio
2023-08-23 6:25 ` Manivannan Sadhasivam
2023-08-22 15:12 ` [PATCH v4 2/4] arm64: dts: qcom: sm8450: Add opp table support to PCIe Krishna chaitanya chundru
` (2 subsequent siblings)
3 siblings, 2 replies; 17+ messages in thread
From: Krishna chaitanya chundru @ 2023-08-22 15:12 UTC (permalink / raw)
To: manivannan.sadhasivam
Cc: helgaas, linux-pci, linux-arm-msm, linux-kernel, quic_vbadigan,
quic_nitegupt, quic_skananth, quic_ramkri, quic_parass,
krzysztof.kozlowski, Krishna chaitanya chundru, Andy Gross,
Bjorn Andersson, Konrad Dybcio, Bjorn Helgaas, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Manivannan Sadhasivam,
open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS
PCIe needs to choose the appropriate performance state of RPMH power
domain based upon the PCIe gen speed.
Adding the Operating Performance Points table allows to adjust power domain
performance state, depending on the PCIe gen speed.
Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com>
Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
---
Documentation/devicetree/bindings/pci/qcom,pcie.yaml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/Documentation/devicetree/bindings/pci/qcom,pcie.yaml b/Documentation/devicetree/bindings/pci/qcom,pcie.yaml
index 81971be4..779339c 100644
--- a/Documentation/devicetree/bindings/pci/qcom,pcie.yaml
+++ b/Documentation/devicetree/bindings/pci/qcom,pcie.yaml
@@ -121,6 +121,10 @@ properties:
description: GPIO controlled connection to WAKE# signal
maxItems: 1
+ operating-points-v2: true
+ opp-table:
+ type: object
+
required:
- compatible
- reg
--
2.7.4
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH v4 2/4] arm64: dts: qcom: sm8450: Add opp table support to PCIe
2023-08-22 15:12 [PATCH v4 0/4] PCI: qcom: Add support for OPP Krishna chaitanya chundru
2023-08-22 15:12 ` [PATCH v4 1/4] dt-bindings: pci: qcom: Add opp table Krishna chaitanya chundru
@ 2023-08-22 15:12 ` Krishna chaitanya chundru
2023-08-22 15:12 ` [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level Krishna chaitanya chundru
2023-08-22 15:12 ` [PATCH v4 4/4] PCI: qcom: Add OPP support for speed based performance state of RPMH Krishna chaitanya chundru
3 siblings, 0 replies; 17+ messages in thread
From: Krishna chaitanya chundru @ 2023-08-22 15:12 UTC (permalink / raw)
To: manivannan.sadhasivam
Cc: helgaas, linux-pci, linux-arm-msm, linux-kernel, quic_vbadigan,
quic_nitegupt, quic_skananth, quic_ramkri, quic_parass,
krzysztof.kozlowski, Krishna chaitanya chundru, Andy Gross,
Bjorn Andersson, Konrad Dybcio, Rob Herring, Krzysztof Kozlowski,
Conor Dooley,
open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS
PCIe needs to choose the appropriate performance state of RPMH power
domain based up on the PCIe gen speed.
So let's add the OPP table support to specify RPMH performance states.
Use opp-level for the PCIe gen speed for easier use.
Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com>
---
arch/arm64/boot/dts/qcom/sm8450.dtsi | 47 ++++++++++++++++++++++++++++++++++++
1 file changed, 47 insertions(+)
diff --git a/arch/arm64/boot/dts/qcom/sm8450.dtsi b/arch/arm64/boot/dts/qcom/sm8450.dtsi
index 595533a..3af0cf9 100644
--- a/arch/arm64/boot/dts/qcom/sm8450.dtsi
+++ b/arch/arm64/boot/dts/qcom/sm8450.dtsi
@@ -1803,7 +1803,28 @@
pinctrl-names = "default";
pinctrl-0 = <&pcie0_default_state>;
+ operating-points-v2 = <&pcie0_opp_table>;
+
status = "disabled";
+
+ pcie0_opp_table: opp-table {
+ compatible = "operating-points-v2";
+
+ opp-1 {
+ opp-level = <1>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ };
+
+ opp-2 {
+ opp-level = <2>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ };
+
+ opp-3 {
+ opp-level = <3>;
+ required-opps = <&rpmhpd_opp_nom>;
+ };
+ };
};
pcie0_phy: phy@1c06000 {
@@ -1915,7 +1936,33 @@
pinctrl-names = "default";
pinctrl-0 = <&pcie1_default_state>;
+ operating-points-v2 = <&pcie1_opp_table>;
+
status = "disabled";
+
+ pcie1_opp_table: opp-table {
+ compatible = "operating-points-v2";
+
+ opp-1 {
+ opp-level = <1>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ };
+
+ opp-2 {
+ opp-level = <2>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ };
+
+ opp-3 {
+ opp-level = <3>;
+ required-opps = <&rpmhpd_opp_low_svs>;
+ };
+
+ opp-4 {
+ opp-level = <4>;
+ required-opps = <&rpmhpd_opp_nom>;
+ };
+ };
};
pcie1_phy: phy@1c0f000 {
--
2.7.4
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level
2023-08-22 15:12 [PATCH v4 0/4] PCI: qcom: Add support for OPP Krishna chaitanya chundru
2023-08-22 15:12 ` [PATCH v4 1/4] dt-bindings: pci: qcom: Add opp table Krishna chaitanya chundru
2023-08-22 15:12 ` [PATCH v4 2/4] arm64: dts: qcom: sm8450: Add opp table support to PCIe Krishna chaitanya chundru
@ 2023-08-22 15:12 ` Krishna chaitanya chundru
2023-08-22 21:33 ` kernel test robot
` (5 more replies)
2023-08-22 15:12 ` [PATCH v4 4/4] PCI: qcom: Add OPP support for speed based performance state of RPMH Krishna chaitanya chundru
3 siblings, 6 replies; 17+ messages in thread
From: Krishna chaitanya chundru @ 2023-08-22 15:12 UTC (permalink / raw)
To: manivannan.sadhasivam
Cc: helgaas, linux-pci, linux-arm-msm, linux-kernel, quic_vbadigan,
quic_nitegupt, quic_skananth, quic_ramkri, quic_parass,
krzysztof.kozlowski, Krishna chaitanya chundru, Viresh Kumar,
Nishanth Menon, Stephen Boyd, Rafael J. Wysocki,
open list:OPERATING PERFORMANCE POINTS (OPP)
Add dev_pm_opp_find_level_floor() for searching a lesser match or
operating on OPP in the order of decreasing level.
Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com>
---
drivers/opp/core.c | 26 ++++++++++++++++++++++++++
include/linux/pm_opp.h | 4 ++++
2 files changed, 30 insertions(+)
diff --git a/drivers/opp/core.c b/drivers/opp/core.c
index 954c948..e668cf2 100644
--- a/drivers/opp/core.c
+++ b/drivers/opp/core.c
@@ -727,6 +727,32 @@ struct dev_pm_opp *dev_pm_opp_find_level_ceil(struct device *dev,
}
EXPORT_SYMBOL_GPL(dev_pm_opp_find_level_ceil);
+
+/**
+ * dev_pm_opp_find_level_floor() - Search for a rounded floor freq
+ * @dev: device for which we do this operation
+ * @freq: Start level
+ *
+ * Search for the matching floor *available* OPP from a starting level
+ * for a device.
+ *
+ * Return: matching *opp and refreshes *level accordingly, else returns
+ * ERR_PTR in case of error and should be handled using IS_ERR. Error return
+ * values can be:
+ * EINVAL: for bad pointer
+ * ERANGE: no match found for search
+ * ENODEV: if device not found in list of registered devices
+ *
+ * The callers are required to call dev_pm_opp_put() for the returned OPP after
+ * use.
+ */
+struct dev_pm_opp *dev_pm_opp_find_level_floor(struct device *dev,
+ unsigned long *level)
+{
+ return _find_key_floor(dev, level, 0, true, _read_level, NULL);
+}
+EXPORT_SYMBOL_GPL(dev_pm_opp_find_level_floor);
+
/**
* dev_pm_opp_find_bw_ceil() - Search for a rounded ceil bandwidth
* @dev: device for which we do this operation
diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h
index dc1fb58..a3bc386 100644
--- a/include/linux/pm_opp.h
+++ b/include/linux/pm_opp.h
@@ -128,6 +128,8 @@ struct dev_pm_opp *dev_pm_opp_find_level_exact(struct device *dev,
unsigned int level);
struct dev_pm_opp *dev_pm_opp_find_level_ceil(struct device *dev,
unsigned int *level);
+struct dev_pm_opp *dev_pm_opp_find_level_floor(struct device *dev,
+ unsigned long *level);
struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev,
unsigned long *freq);
@@ -285,6 +287,8 @@ static inline struct dev_pm_opp *dev_pm_opp_find_bw_ceil(struct device *dev,
static inline struct dev_pm_opp *dev_pm_opp_find_bw_floor(struct device *dev,
unsigned int *bw, int index)
+static inline struct dev_pm_opp *dev_pm_opp_find_level_floor(struct device *dev,
+ unsigned long *level)
{
return ERR_PTR(-EOPNOTSUPP);
}
--
2.7.4
^ permalink raw reply related [flat|nested] 17+ messages in thread
* [PATCH v4 4/4] PCI: qcom: Add OPP support for speed based performance state of RPMH
2023-08-22 15:12 [PATCH v4 0/4] PCI: qcom: Add support for OPP Krishna chaitanya chundru
` (2 preceding siblings ...)
2023-08-22 15:12 ` [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level Krishna chaitanya chundru
@ 2023-08-22 15:12 ` Krishna chaitanya chundru
2023-08-23 7:06 ` Manivannan Sadhasivam
3 siblings, 1 reply; 17+ messages in thread
From: Krishna chaitanya chundru @ 2023-08-22 15:12 UTC (permalink / raw)
To: manivannan.sadhasivam
Cc: helgaas, linux-pci, linux-arm-msm, linux-kernel, quic_vbadigan,
quic_nitegupt, quic_skananth, quic_ramkri, quic_parass,
krzysztof.kozlowski, Krishna chaitanya chundru,
Manivannan Sadhasivam, Andy Gross, Bjorn Andersson, Konrad Dybcio,
Lorenzo Pieralisi, Krzysztof Wilczyński, Rob Herring,
Bjorn Helgaas
Before link training vote for the maximum performance state of RPMH
and once link is up, vote for the performance state based upon the link
speed.
Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com>
---
drivers/pci/controller/dwc/pcie-qcom.c | 52 ++++++++++++++++++++++++++++++++++
1 file changed, 52 insertions(+)
diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controller/dwc/pcie-qcom.c
index 7a87a47..161fdad 100644
--- a/drivers/pci/controller/dwc/pcie-qcom.c
+++ b/drivers/pci/controller/dwc/pcie-qcom.c
@@ -22,6 +22,7 @@
#include <linux/of_device.h>
#include <linux/of_gpio.h>
#include <linux/pci.h>
+#include <linux/pm_opp.h>
#include <linux/pm_runtime.h>
#include <linux/platform_device.h>
#include <linux/phy/pcie.h>
@@ -1357,6 +1358,33 @@ static int qcom_pcie_icc_init(struct qcom_pcie *pcie)
return 0;
}
+static void qcom_pcie_opp_update(struct qcom_pcie *pcie)
+{
+ struct dw_pcie *pci = pcie->pci;
+ struct dev_pm_opp *opp;
+ u32 offset, status;
+ int speed, ret = 0;
+
+ offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP);
+ status = readw(pci->dbi_base + offset + PCI_EXP_LNKSTA);
+
+ /* Only update constraints if link is up. */
+ if (!(status & PCI_EXP_LNKSTA_DLLLA))
+ return;
+
+ speed = FIELD_GET(PCI_EXP_LNKSTA_CLS, status);
+
+ opp = dev_pm_opp_find_level_exact(pci->dev, speed);
+ if (!IS_ERR(opp)) {
+ ret = dev_pm_opp_set_opp(pci->dev, opp);
+ if (ret)
+ dev_err(pci->dev, "Failed to set opp: level %d ret %d\n",
+ dev_pm_opp_get_level(opp), ret);
+ dev_pm_opp_put(opp);
+ }
+
+}
+
static void qcom_pcie_icc_update(struct qcom_pcie *pcie)
{
struct dw_pcie *pci = pcie->pci;
@@ -1439,8 +1467,10 @@ static void qcom_pcie_init_debugfs(struct qcom_pcie *pcie)
static int qcom_pcie_probe(struct platform_device *pdev)
{
const struct qcom_pcie_cfg *pcie_cfg;
+ unsigned long max_level = INT_MAX;
struct device *dev = &pdev->dev;
struct qcom_pcie *pcie;
+ struct dev_pm_opp *opp;
struct dw_pcie_rp *pp;
struct resource *res;
struct dw_pcie *pci;
@@ -1511,6 +1541,23 @@ static int qcom_pcie_probe(struct platform_device *pdev)
if (ret)
goto err_pm_runtime_put;
+ /* OPP table is optional */
+ ret = devm_pm_opp_of_add_table(dev);
+ if (ret && ret != -ENODEV) {
+ dev_err(dev, "Invalid OPP table in Device tree\n");
+ goto err_pm_runtime_put;
+ }
+
+ /* vote for max level in the opp table */
+ opp = dev_pm_opp_find_level_floor(dev, &max_level);
+ if (!IS_ERR(opp)) {
+ ret = dev_pm_opp_set_opp(dev, opp);
+ if (ret)
+ dev_err(pci->dev, "Failed to set opp: level %d ret %d\n",
+ dev_pm_opp_get_level(opp), ret);
+ dev_pm_opp_put(opp);
+ }
+
ret = pcie->cfg->ops->get_resources(pcie);
if (ret)
goto err_pm_runtime_put;
@@ -1531,6 +1578,8 @@ static int qcom_pcie_probe(struct platform_device *pdev)
qcom_pcie_icc_update(pcie);
+ qcom_pcie_opp_update(pcie);
+
if (pcie->mhi)
qcom_pcie_init_debugfs(pcie);
@@ -1577,6 +1626,7 @@ static int qcom_pcie_suspend_noirq(struct device *dev)
*/
if (!dw_pcie_link_up(pcie->pci)) {
qcom_pcie_host_deinit(&pcie->pci->pp);
+ dev_pm_opp_set_opp(dev, NULL);
pcie->suspended = true;
}
@@ -1593,6 +1643,8 @@ static int qcom_pcie_resume_noirq(struct device *dev)
if (ret)
return ret;
+ qcom_pcie_opp_update(pcie);
+
pcie->suspended = false;
}
--
2.7.4
^ permalink raw reply related [flat|nested] 17+ messages in thread
* Re: [PATCH v4 1/4] dt-bindings: pci: qcom: Add opp table
2023-08-22 15:12 ` [PATCH v4 1/4] dt-bindings: pci: qcom: Add opp table Krishna chaitanya chundru
@ 2023-08-22 16:06 ` Konrad Dybcio
2023-09-07 6:01 ` Krishna Chaitanya Chundru
2023-08-23 6:25 ` Manivannan Sadhasivam
1 sibling, 1 reply; 17+ messages in thread
From: Konrad Dybcio @ 2023-08-22 16:06 UTC (permalink / raw)
To: Krishna chaitanya chundru, manivannan.sadhasivam
Cc: helgaas, linux-pci, linux-arm-msm, linux-kernel, quic_vbadigan,
quic_nitegupt, quic_skananth, quic_ramkri, quic_parass,
krzysztof.kozlowski, Andy Gross, Bjorn Andersson, Bjorn Helgaas,
Lorenzo Pieralisi, Krzysztof Wilczyński, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Manivannan Sadhasivam,
open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS
On 22.08.2023 17:12, Krishna chaitanya chundru wrote:
> PCIe needs to choose the appropriate performance state of RPMH power
> domain based upon the PCIe gen speed.
>
> Adding the Operating Performance Points table allows to adjust power domain
> performance state, depending on the PCIe gen speed.
>
> Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com>
> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
> ---
I only got patches 1, 2 and 4 of this series.
Please consider using the b4 tool [1], which takes care of
all of the sending shenanigans for you.
Konrad
[1] https://b4.docs.kernel.org/en/latest/index.html
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level
2023-08-22 15:12 ` [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level Krishna chaitanya chundru
@ 2023-08-22 21:33 ` kernel test robot
2023-08-22 23:10 ` kernel test robot
` (4 subsequent siblings)
5 siblings, 0 replies; 17+ messages in thread
From: kernel test robot @ 2023-08-22 21:33 UTC (permalink / raw)
To: Krishna chaitanya chundru, manivannan.sadhasivam
Cc: oe-kbuild-all, helgaas, linux-pci, linux-arm-msm, linux-kernel,
quic_vbadigan, quic_nitegupt, quic_skananth, quic_ramkri,
quic_parass, krzysztof.kozlowski, Krishna chaitanya chundru,
Viresh Kumar, Stephen Boyd, Rafael J. Wysocki,
(open list:OPERATING PERFORMANCE POINTS (OPP))
Hi Krishna,
kernel test robot noticed the following build warnings:
[auto build test WARNING on pci/for-linus]
[also build test WARNING on robh/for-next rafael-pm/linux-next linus/master v6.5-rc7 next-20230822]
[cannot apply to pci/next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Krishna-chaitanya-chundru/dt-bindings-pci-qcom-Add-opp-table/20230822-232104
base: https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git for-linus
patch link: https://lore.kernel.org/r/1692717141-32743-4-git-send-email-quic_krichai%40quicinc.com
patch subject: [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level
config: parisc-randconfig-r081-20230823 (https://download.01.org/0day-ci/archive/20230823/202308230526.RjJmRzFy-lkp@intel.com/config)
compiler: hppa-linux-gcc (GCC) 13.2.0
reproduce: (https://download.01.org/0day-ci/archive/20230823/202308230526.RjJmRzFy-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202308230526.RjJmRzFy-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> drivers/opp/core.c:756: warning: Function parameter or member 'level' not described in 'dev_pm_opp_find_level_floor'
>> drivers/opp/core.c:756: warning: Excess function parameter 'freq' description in 'dev_pm_opp_find_level_floor'
drivers/opp/core.c:2025: warning: Function parameter or member 'opp_table' not described in '_opp_set_supported_hw'
drivers/opp/core.c:2025: warning: Excess function parameter 'dev' description in '_opp_set_supported_hw'
drivers/opp/core.c:2068: warning: Function parameter or member 'opp_table' not described in '_opp_set_prop_name'
drivers/opp/core.c:2068: warning: Excess function parameter 'dev' description in '_opp_set_prop_name'
drivers/opp/core.c:2109: warning: Function parameter or member 'opp_table' not described in '_opp_set_regulators'
drivers/opp/core.c:2109: warning: Excess function parameter 'count' description in '_opp_set_regulators'
drivers/opp/core.c:2213: warning: Function parameter or member 'opp_table' not described in '_opp_set_clknames'
drivers/opp/core.c:2213: warning: Function parameter or member 'config_clks' not described in '_opp_set_clknames'
drivers/opp/core.c:2311: warning: Function parameter or member 'opp_table' not described in '_opp_set_config_regulators_helper'
drivers/opp/core.c:2375: warning: Function parameter or member 'opp_table' not described in '_opp_attach_genpd'
drivers/opp/core.c:2602: warning: Function parameter or member 'token' not described in 'dev_pm_opp_clear_config'
drivers/opp/core.c:2602: warning: Excess function parameter 'opp_table' description in 'dev_pm_opp_clear_config'
vim +756 drivers/opp/core.c
734
735
736 /**
737 * dev_pm_opp_find_level_floor() - Search for a rounded floor freq
738 * @dev: device for which we do this operation
739 * @freq: Start level
740 *
741 * Search for the matching floor *available* OPP from a starting level
742 * for a device.
743 *
744 * Return: matching *opp and refreshes *level accordingly, else returns
745 * ERR_PTR in case of error and should be handled using IS_ERR. Error return
746 * values can be:
747 * EINVAL: for bad pointer
748 * ERANGE: no match found for search
749 * ENODEV: if device not found in list of registered devices
750 *
751 * The callers are required to call dev_pm_opp_put() for the returned OPP after
752 * use.
753 */
754 struct dev_pm_opp *dev_pm_opp_find_level_floor(struct device *dev,
755 unsigned long *level)
> 756 {
757 return _find_key_floor(dev, level, 0, true, _read_level, NULL);
758 }
759 EXPORT_SYMBOL_GPL(dev_pm_opp_find_level_floor);
760
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level
2023-08-22 15:12 ` [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level Krishna chaitanya chundru
2023-08-22 21:33 ` kernel test robot
@ 2023-08-22 23:10 ` kernel test robot
2023-08-22 23:42 ` kernel test robot
` (3 subsequent siblings)
5 siblings, 0 replies; 17+ messages in thread
From: kernel test robot @ 2023-08-22 23:10 UTC (permalink / raw)
To: Krishna chaitanya chundru, manivannan.sadhasivam
Cc: llvm, oe-kbuild-all, helgaas, linux-pci, linux-arm-msm,
linux-kernel, quic_vbadigan, quic_nitegupt, quic_skananth,
quic_ramkri, quic_parass, krzysztof.kozlowski,
Krishna chaitanya chundru, Viresh Kumar, Stephen Boyd,
Rafael J. Wysocki, (open list:OPERATING PERFORMANCE POINTS (OPP))
Hi Krishna,
kernel test robot noticed the following build warnings:
[auto build test WARNING on pci/for-linus]
[also build test WARNING on robh/for-next rafael-pm/linux-next linus/master v6.5-rc7 next-20230822]
[cannot apply to pci/next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Krishna-chaitanya-chundru/dt-bindings-pci-qcom-Add-opp-table/20230822-232104
base: https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git for-linus
patch link: https://lore.kernel.org/r/1692717141-32743-4-git-send-email-quic_krichai%40quicinc.com
patch subject: [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level
config: x86_64-randconfig-073-20230823 (https://download.01.org/0day-ci/archive/20230823/202308230637.gz3wmjrT-lkp@intel.com/config)
compiler: clang version 16.0.4 (https://github.com/llvm/llvm-project.git ae42196bc493ffe877a7e3dff8be32035dea4d07)
reproduce: (https://download.01.org/0day-ci/archive/20230823/202308230637.gz3wmjrT-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202308230637.gz3wmjrT-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> drivers/opp/core.c:756: warning: Function parameter or member 'level' not described in 'dev_pm_opp_find_level_floor'
>> drivers/opp/core.c:756: warning: Excess function parameter 'freq' description in 'dev_pm_opp_find_level_floor'
drivers/opp/core.c:2025: warning: Function parameter or member 'opp_table' not described in '_opp_set_supported_hw'
drivers/opp/core.c:2025: warning: Excess function parameter 'dev' description in '_opp_set_supported_hw'
drivers/opp/core.c:2068: warning: Function parameter or member 'opp_table' not described in '_opp_set_prop_name'
drivers/opp/core.c:2068: warning: Excess function parameter 'dev' description in '_opp_set_prop_name'
drivers/opp/core.c:2109: warning: Function parameter or member 'opp_table' not described in '_opp_set_regulators'
drivers/opp/core.c:2109: warning: Excess function parameter 'count' description in '_opp_set_regulators'
drivers/opp/core.c:2213: warning: Function parameter or member 'opp_table' not described in '_opp_set_clknames'
drivers/opp/core.c:2213: warning: Function parameter or member 'config_clks' not described in '_opp_set_clknames'
drivers/opp/core.c:2311: warning: Function parameter or member 'opp_table' not described in '_opp_set_config_regulators_helper'
drivers/opp/core.c:2375: warning: Function parameter or member 'opp_table' not described in '_opp_attach_genpd'
drivers/opp/core.c:2602: warning: Function parameter or member 'token' not described in 'dev_pm_opp_clear_config'
drivers/opp/core.c:2602: warning: Excess function parameter 'opp_table' description in 'dev_pm_opp_clear_config'
vim +756 drivers/opp/core.c
734
735
736 /**
737 * dev_pm_opp_find_level_floor() - Search for a rounded floor freq
738 * @dev: device for which we do this operation
739 * @freq: Start level
740 *
741 * Search for the matching floor *available* OPP from a starting level
742 * for a device.
743 *
744 * Return: matching *opp and refreshes *level accordingly, else returns
745 * ERR_PTR in case of error and should be handled using IS_ERR. Error return
746 * values can be:
747 * EINVAL: for bad pointer
748 * ERANGE: no match found for search
749 * ENODEV: if device not found in list of registered devices
750 *
751 * The callers are required to call dev_pm_opp_put() for the returned OPP after
752 * use.
753 */
754 struct dev_pm_opp *dev_pm_opp_find_level_floor(struct device *dev,
755 unsigned long *level)
> 756 {
757 return _find_key_floor(dev, level, 0, true, _read_level, NULL);
758 }
759 EXPORT_SYMBOL_GPL(dev_pm_opp_find_level_floor);
760
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level
2023-08-22 15:12 ` [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level Krishna chaitanya chundru
2023-08-22 21:33 ` kernel test robot
2023-08-22 23:10 ` kernel test robot
@ 2023-08-22 23:42 ` kernel test robot
2023-08-23 0:48 ` kernel test robot
` (2 subsequent siblings)
5 siblings, 0 replies; 17+ messages in thread
From: kernel test robot @ 2023-08-22 23:42 UTC (permalink / raw)
To: Krishna chaitanya chundru, manivannan.sadhasivam
Cc: llvm, oe-kbuild-all, helgaas, linux-pci, linux-arm-msm,
linux-kernel, quic_vbadigan, quic_nitegupt, quic_skananth,
quic_ramkri, quic_parass, krzysztof.kozlowski,
Krishna chaitanya chundru, Viresh Kumar, Stephen Boyd,
Rafael J. Wysocki, (open list:OPERATING PERFORMANCE POINTS (OPP))
Hi Krishna,
kernel test robot noticed the following build errors:
[auto build test ERROR on pci/for-linus]
[also build test ERROR on robh/for-next rafael-pm/linux-next linus/master v6.5-rc7 next-20230822]
[cannot apply to pci/next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Krishna-chaitanya-chundru/dt-bindings-pci-qcom-Add-opp-table/20230822-232104
base: https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git for-linus
patch link: https://lore.kernel.org/r/1692717141-32743-4-git-send-email-quic_krichai%40quicinc.com
patch subject: [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level
config: um-allnoconfig (https://download.01.org/0day-ci/archive/20230823/202308230750.JgHxIvTb-lkp@intel.com/config)
compiler: clang version 17.0.0 (https://github.com/llvm/llvm-project.git 4a5ac14ee968ff0ad5d2cc1ffa0299048db4c88a)
reproduce: (https://download.01.org/0day-ci/archive/20230823/202308230750.JgHxIvTb-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202308230750.JgHxIvTb-lkp@intel.com/
All errors (new ones prefixed by >>):
In file included from kernel/cpu.c:13:
In file included from include/linux/sched/isolation.h:6:
In file included from include/linux/tick.h:8:
In file included from include/linux/clockchips.h:14:
In file included from include/linux/clocksource.h:22:
In file included from arch/um/include/asm/io.h:24:
include/asm-generic/io.h:547:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
547 | val = __raw_readb(PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:560:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
560 | val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr));
| ~~~~~~~~~~ ^
include/uapi/linux/byteorder/little_endian.h:37:51: note: expanded from macro '__le16_to_cpu'
37 | #define __le16_to_cpu(x) ((__force __u16)(__le16)(x))
| ^
In file included from kernel/cpu.c:13:
In file included from include/linux/sched/isolation.h:6:
In file included from include/linux/tick.h:8:
In file included from include/linux/clockchips.h:14:
In file included from include/linux/clocksource.h:22:
In file included from arch/um/include/asm/io.h:24:
include/asm-generic/io.h:573:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
573 | val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
| ~~~~~~~~~~ ^
include/uapi/linux/byteorder/little_endian.h:35:51: note: expanded from macro '__le32_to_cpu'
35 | #define __le32_to_cpu(x) ((__force __u32)(__le32)(x))
| ^
In file included from kernel/cpu.c:13:
In file included from include/linux/sched/isolation.h:6:
In file included from include/linux/tick.h:8:
In file included from include/linux/clockchips.h:14:
In file included from include/linux/clocksource.h:22:
In file included from arch/um/include/asm/io.h:24:
include/asm-generic/io.h:584:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
584 | __raw_writeb(value, PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:594:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
594 | __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:604:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
604 | __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:692:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
692 | readsb(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:700:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
700 | readsw(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:708:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
708 | readsl(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:717:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
717 | writesb(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:726:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
726 | writesw(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:735:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
735 | writesl(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
In file included from kernel/cpu.c:41:
In file included from include/trace/events/power.h:8:
In file included from include/linux/cpufreq.h:18:
>> include/linux/pm_opp.h:289:34: error: expected ';' after top level declarator
289 | unsigned int *bw, int index)
| ^
| ;
12 warnings and 1 error generated.
--
In file included from drivers/base/core.c:12:
In file included from include/linux/cpufreq.h:18:
>> include/linux/pm_opp.h:289:34: error: expected ';' after top level declarator
289 | unsigned int *bw, int index)
| ^
| ;
In file included from drivers/base/core.c:25:
In file included from include/linux/blkdev.h:9:
In file included from include/linux/blk_types.h:10:
In file included from include/linux/bvec.h:10:
In file included from include/linux/highmem.h:5:
In file included from include/linux/fs.h:33:
In file included from include/linux/percpu-rwsem.h:7:
In file included from include/linux/rcuwait.h:6:
In file included from include/linux/sched/signal.h:6:
include/linux/signal.h:97:11: warning: array index 3 is past the end of the array (that has type 'unsigned long[1]') [-Warray-bounds]
97 | return (set->sig[3] | set->sig[2] |
| ^ ~
arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
24 | unsigned long sig[_NSIG_WORDS];
| ^
In file included from drivers/base/core.c:25:
In file included from include/linux/blkdev.h:9:
In file included from include/linux/blk_types.h:10:
In file included from include/linux/bvec.h:10:
In file included from include/linux/highmem.h:5:
In file included from include/linux/fs.h:33:
In file included from include/linux/percpu-rwsem.h:7:
In file included from include/linux/rcuwait.h:6:
In file included from include/linux/sched/signal.h:6:
include/linux/signal.h:97:25: warning: array index 2 is past the end of the array (that has type 'unsigned long[1]') [-Warray-bounds]
97 | return (set->sig[3] | set->sig[2] |
| ^ ~
arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
24 | unsigned long sig[_NSIG_WORDS];
| ^
In file included from drivers/base/core.c:25:
In file included from include/linux/blkdev.h:9:
In file included from include/linux/blk_types.h:10:
In file included from include/linux/bvec.h:10:
In file included from include/linux/highmem.h:5:
In file included from include/linux/fs.h:33:
In file included from include/linux/percpu-rwsem.h:7:
In file included from include/linux/rcuwait.h:6:
In file included from include/linux/sched/signal.h:6:
include/linux/signal.h:98:4: warning: array index 1 is past the end of the array (that has type 'unsigned long[1]') [-Warray-bounds]
98 | set->sig[1] | set->sig[0]) == 0;
| ^ ~
arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
24 | unsigned long sig[_NSIG_WORDS];
| ^
In file included from drivers/base/core.c:25:
In file included from include/linux/blkdev.h:9:
In file included from include/linux/blk_types.h:10:
In file included from include/linux/bvec.h:10:
In file included from include/linux/highmem.h:5:
In file included from include/linux/fs.h:33:
In file included from include/linux/percpu-rwsem.h:7:
In file included from include/linux/rcuwait.h:6:
In file included from include/linux/sched/signal.h:6:
include/linux/signal.h:100:11: warning: array index 1 is past the end of the array (that has type 'unsigned long[1]') [-Warray-bounds]
100 | return (set->sig[1] | set->sig[0]) == 0;
| ^ ~
arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
24 | unsigned long sig[_NSIG_WORDS];
| ^
In file included from drivers/base/core.c:25:
In file included from include/linux/blkdev.h:9:
In file included from include/linux/blk_types.h:10:
In file included from include/linux/bvec.h:10:
In file included from include/linux/highmem.h:5:
In file included from include/linux/fs.h:33:
In file included from include/linux/percpu-rwsem.h:7:
In file included from include/linux/rcuwait.h:6:
In file included from include/linux/sched/signal.h:6:
include/linux/signal.h:113:11: warning: array index 3 is past the end of the array (that has type 'const unsigned long[1]') [-Warray-bounds]
113 | return (set1->sig[3] == set2->sig[3]) &&
| ^ ~
arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
24 | unsigned long sig[_NSIG_WORDS];
| ^
In file included from drivers/base/core.c:25:
In file included from include/linux/blkdev.h:9:
In file included from include/linux/blk_types.h:10:
In file included from include/linux/bvec.h:10:
In file included from include/linux/highmem.h:5:
In file included from include/linux/fs.h:33:
In file included from include/linux/percpu-rwsem.h:7:
In file included from include/linux/rcuwait.h:6:
In file included from include/linux/sched/signal.h:6:
include/linux/signal.h:113:27: warning: array index 3 is past the end of the array (that has type 'const unsigned long[1]') [-Warray-bounds]
113 | return (set1->sig[3] == set2->sig[3]) &&
| ^ ~
arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
24 | unsigned long sig[_NSIG_WORDS];
| ^
In file included from drivers/base/core.c:25:
In file included from include/linux/blkdev.h:9:
In file included from include/linux/blk_types.h:10:
In file included from include/linux/bvec.h:10:
In file included from include/linux/highmem.h:5:
In file included from include/linux/fs.h:33:
In file included from include/linux/percpu-rwsem.h:7:
--
In file included from kernel/power/qos.c:40:
In file included from include/trace/events/power.h:8:
In file included from include/linux/cpufreq.h:18:
>> include/linux/pm_opp.h:289:34: error: expected ';' after top level declarator
289 | unsigned int *bw, int index)
| ^
| ;
In file included from kernel/power/qos.c:40:
In file included from include/trace/events/power.h:12:
In file included from include/linux/trace_events.h:9:
In file included from include/linux/hardirq.h:11:
In file included from arch/um/include/asm/hardirq.h:5:
In file included from include/asm-generic/hardirq.h:17:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:13:
In file included from arch/um/include/asm/io.h:24:
include/asm-generic/io.h:547:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
547 | val = __raw_readb(PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:560:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
560 | val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr));
| ~~~~~~~~~~ ^
include/uapi/linux/byteorder/little_endian.h:37:51: note: expanded from macro '__le16_to_cpu'
37 | #define __le16_to_cpu(x) ((__force __u16)(__le16)(x))
| ^
In file included from kernel/power/qos.c:40:
In file included from include/trace/events/power.h:12:
In file included from include/linux/trace_events.h:9:
In file included from include/linux/hardirq.h:11:
In file included from arch/um/include/asm/hardirq.h:5:
In file included from include/asm-generic/hardirq.h:17:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:13:
In file included from arch/um/include/asm/io.h:24:
include/asm-generic/io.h:573:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
573 | val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr));
| ~~~~~~~~~~ ^
include/uapi/linux/byteorder/little_endian.h:35:51: note: expanded from macro '__le32_to_cpu'
35 | #define __le32_to_cpu(x) ((__force __u32)(__le32)(x))
| ^
In file included from kernel/power/qos.c:40:
In file included from include/trace/events/power.h:12:
In file included from include/linux/trace_events.h:9:
In file included from include/linux/hardirq.h:11:
In file included from arch/um/include/asm/hardirq.h:5:
In file included from include/asm-generic/hardirq.h:17:
In file included from include/linux/irq.h:20:
In file included from include/linux/io.h:13:
In file included from arch/um/include/asm/io.h:24:
include/asm-generic/io.h:584:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
584 | __raw_writeb(value, PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:594:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
594 | __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:604:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
604 | __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:692:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
692 | readsb(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:700:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
700 | readsw(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:708:20: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
708 | readsl(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:717:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
717 | writesb(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:726:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
726 | writesw(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
include/asm-generic/io.h:735:21: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic]
735 | writesl(PCI_IOBASE + addr, buffer, count);
| ~~~~~~~~~~ ^
12 warnings and 1 error generated.
--
In file included from fs/proc/cpuinfo.c:2:
In file included from include/linux/cpufreq.h:18:
>> include/linux/pm_opp.h:289:34: error: expected ';' after top level declarator
289 | unsigned int *bw, int index)
| ^
| ;
In file included from fs/proc/cpuinfo.c:3:
In file included from include/linux/fs.h:33:
In file included from include/linux/percpu-rwsem.h:7:
In file included from include/linux/rcuwait.h:6:
In file included from include/linux/sched/signal.h:6:
include/linux/signal.h:97:11: warning: array index 3 is past the end of the array (that has type 'unsigned long[1]') [-Warray-bounds]
97 | return (set->sig[3] | set->sig[2] |
| ^ ~
arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
24 | unsigned long sig[_NSIG_WORDS];
| ^
In file included from fs/proc/cpuinfo.c:3:
In file included from include/linux/fs.h:33:
In file included from include/linux/percpu-rwsem.h:7:
In file included from include/linux/rcuwait.h:6:
In file included from include/linux/sched/signal.h:6:
include/linux/signal.h:97:25: warning: array index 2 is past the end of the array (that has type 'unsigned long[1]') [-Warray-bounds]
97 | return (set->sig[3] | set->sig[2] |
| ^ ~
arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
24 | unsigned long sig[_NSIG_WORDS];
| ^
In file included from fs/proc/cpuinfo.c:3:
In file included from include/linux/fs.h:33:
In file included from include/linux/percpu-rwsem.h:7:
In file included from include/linux/rcuwait.h:6:
In file included from include/linux/sched/signal.h:6:
include/linux/signal.h:98:4: warning: array index 1 is past the end of the array (that has type 'unsigned long[1]') [-Warray-bounds]
98 | set->sig[1] | set->sig[0]) == 0;
| ^ ~
arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
24 | unsigned long sig[_NSIG_WORDS];
| ^
In file included from fs/proc/cpuinfo.c:3:
In file included from include/linux/fs.h:33:
In file included from include/linux/percpu-rwsem.h:7:
In file included from include/linux/rcuwait.h:6:
In file included from include/linux/sched/signal.h:6:
include/linux/signal.h:100:11: warning: array index 1 is past the end of the array (that has type 'unsigned long[1]') [-Warray-bounds]
100 | return (set->sig[1] | set->sig[0]) == 0;
| ^ ~
arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
24 | unsigned long sig[_NSIG_WORDS];
| ^
In file included from fs/proc/cpuinfo.c:3:
In file included from include/linux/fs.h:33:
In file included from include/linux/percpu-rwsem.h:7:
In file included from include/linux/rcuwait.h:6:
In file included from include/linux/sched/signal.h:6:
include/linux/signal.h:113:11: warning: array index 3 is past the end of the array (that has type 'const unsigned long[1]') [-Warray-bounds]
113 | return (set1->sig[3] == set2->sig[3]) &&
| ^ ~
arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
24 | unsigned long sig[_NSIG_WORDS];
| ^
In file included from fs/proc/cpuinfo.c:3:
In file included from include/linux/fs.h:33:
In file included from include/linux/percpu-rwsem.h:7:
In file included from include/linux/rcuwait.h:6:
In file included from include/linux/sched/signal.h:6:
include/linux/signal.h:113:27: warning: array index 3 is past the end of the array (that has type 'const unsigned long[1]') [-Warray-bounds]
113 | return (set1->sig[3] == set2->sig[3]) &&
| ^ ~
arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
24 | unsigned long sig[_NSIG_WORDS];
| ^
In file included from fs/proc/cpuinfo.c:3:
In file included from include/linux/fs.h:33:
In file included from include/linux/percpu-rwsem.h:7:
In file included from include/linux/rcuwait.h:6:
In file included from include/linux/sched/signal.h:6:
include/linux/signal.h:114:5: warning: array index 2 is past the end of the array (that has type 'const unsigned long[1]') [-Warray-bounds]
114 | (set1->sig[2] == set2->sig[2]) &&
| ^ ~
arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
24 | unsigned long sig[_NSIG_WORDS];
| ^
In file included from fs/proc/cpuinfo.c:3:
In file included from include/linux/fs.h:33:
In file included from include/linux/percpu-rwsem.h:7:
In file included from include/linux/rcuwait.h:6:
In file included from include/linux/sched/signal.h:6:
include/linux/signal.h:114:21: warning: array index 2 is past the end of the array (that has type 'const unsigned long[1]') [-Warray-bounds]
114 | (set1->sig[2] == set2->sig[2]) &&
| ^ ~
arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
24 | unsigned long sig[_NSIG_WORDS];
| ^
In file included from fs/proc/cpuinfo.c:3:
In file included from include/linux/fs.h:33:
In file included from include/linux/percpu-rwsem.h:7:
In file included from include/linux/rcuwait.h:6:
In file included from include/linux/sched/signal.h:6:
include/linux/signal.h:115:5: warning: array index 1 is past the end of the array (that has type 'const unsigned long[1]') [-Warray-bounds]
115 | (set1->sig[1] == set2->sig[1]) &&
| ^ ~
arch/x86/include/asm/signal.h:24:2: note: array 'sig' declared here
..
vim +289 include/linux/pm_opp.h
00ce3873f730fb Krzysztof Kozlowski 2022-05-04 287
00ce3873f730fb Krzysztof Kozlowski 2022-05-04 288 static inline struct dev_pm_opp *dev_pm_opp_find_bw_floor(struct device *dev,
00ce3873f730fb Krzysztof Kozlowski 2022-05-04 @289 unsigned int *bw, int index)
f220ddccf1afc8 Krishna chaitanya chundru 2023-08-22 290 static inline struct dev_pm_opp *dev_pm_opp_find_level_floor(struct device *dev,
f220ddccf1afc8 Krishna chaitanya chundru 2023-08-22 291 unsigned long *level)
00ce3873f730fb Krzysztof Kozlowski 2022-05-04 292 {
00ce3873f730fb Krzysztof Kozlowski 2022-05-04 293 return ERR_PTR(-EOPNOTSUPP);
00ce3873f730fb Krzysztof Kozlowski 2022-05-04 294 }
00ce3873f730fb Krzysztof Kozlowski 2022-05-04 295
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level
2023-08-22 15:12 ` [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level Krishna chaitanya chundru
` (2 preceding siblings ...)
2023-08-22 23:42 ` kernel test robot
@ 2023-08-23 0:48 ` kernel test robot
2023-08-23 1:05 ` Pavan Kondeti
2023-08-23 1:13 ` kernel test robot
5 siblings, 0 replies; 17+ messages in thread
From: kernel test robot @ 2023-08-23 0:48 UTC (permalink / raw)
To: Krishna chaitanya chundru, manivannan.sadhasivam
Cc: oe-kbuild-all, helgaas, linux-pci, linux-arm-msm, linux-kernel,
quic_vbadigan, quic_nitegupt, quic_skananth, quic_ramkri,
quic_parass, krzysztof.kozlowski, Krishna chaitanya chundru,
Viresh Kumar, Stephen Boyd, Rafael J. Wysocki,
(open list:OPERATING PERFORMANCE POINTS (OPP))
Hi Krishna,
kernel test robot noticed the following build warnings:
[auto build test WARNING on pci/for-linus]
[also build test WARNING on robh/for-next rafael-pm/linux-next linus/master v6.5-rc7 next-20230822]
[cannot apply to pci/next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Krishna-chaitanya-chundru/dt-bindings-pci-qcom-Add-opp-table/20230822-232104
base: https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git for-linus
patch link: https://lore.kernel.org/r/1692717141-32743-4-git-send-email-quic_krichai%40quicinc.com
patch subject: [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level
config: um-defconfig (https://download.01.org/0day-ci/archive/20230823/202308230848.SzyPhc6B-lkp@intel.com/config)
compiler: gcc-12 (Debian 12.2.0-14) 12.2.0
reproduce: (https://download.01.org/0day-ci/archive/20230823/202308230848.SzyPhc6B-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202308230848.SzyPhc6B-lkp@intel.com/
All warnings (new ones prefixed by >>):
| ^
include/linux/unaligned/packed_struct.h:17:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
17 | {
| ^
include/linux/unaligned/packed_struct.h:23:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
23 | {
| ^
include/linux/unaligned/packed_struct.h:29:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
29 | {
| ^
include/linux/unaligned/packed_struct.h:35:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
35 | {
| ^
include/linux/unaligned/packed_struct.h:41:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
41 | {
| ^
include/asm-generic/unaligned.h:26:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
26 | {
| ^
include/asm-generic/unaligned.h:31:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
31 | {
| ^
include/asm-generic/unaligned.h:36:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
36 | {
| ^
include/asm-generic/unaligned.h:41:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
41 | {
| ^
include/asm-generic/unaligned.h:46:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
46 | {
| ^
include/asm-generic/unaligned.h:51:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
51 | {
| ^
include/asm-generic/unaligned.h:56:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
56 | {
| ^
include/asm-generic/unaligned.h:61:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
61 | {
| ^
include/asm-generic/unaligned.h:66:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
66 | {
| ^
include/asm-generic/unaligned.h:71:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
71 | {
| ^
include/asm-generic/unaligned.h:76:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
76 | {
| ^
include/asm-generic/unaligned.h:81:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
81 | {
| ^
include/asm-generic/unaligned.h:86:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
86 | {
| ^
include/asm-generic/unaligned.h:91:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
91 | {
| ^
include/asm-generic/unaligned.h:96:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
96 | {
| ^
include/asm-generic/unaligned.h:101:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
101 | {
| ^
include/asm-generic/unaligned.h:106:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
106 | {
| ^
include/asm-generic/unaligned.h:113:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
113 | {
| ^
include/asm-generic/unaligned.h:118:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
118 | {
| ^
include/asm-generic/unaligned.h:125:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
125 | {
| ^
include/asm-generic/unaligned.h:130:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
130 | {
| ^
include/asm-generic/unaligned.h:140:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
140 | {
| ^
include/asm-generic/unaligned.h:145:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
145 | {
| ^
include/asm-generic/unaligned.h:151:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
151 | {
| ^
arch/um/include/asm/uaccess.h:25:22: error: storage class specified for parameter 'raw_copy_from_user'
25 | extern unsigned long raw_copy_from_user(void *to, const void __user *from, unsigned long n);
| ^~~~~~~~~~~~~~~~~~
arch/um/include/asm/uaccess.h:26:22: error: storage class specified for parameter 'raw_copy_to_user'
26 | extern unsigned long raw_copy_to_user(void __user *to, const void *from, unsigned long n);
| ^~~~~~~~~~~~~~~~
arch/um/include/asm/uaccess.h:27:22: error: storage class specified for parameter '__clear_user'
27 | extern unsigned long __clear_user(void __user *mem, unsigned long len);
| ^~~~~~~~~~~~
arch/um/include/asm/uaccess.h:28:19: error: storage class specified for parameter '__access_ok'
28 | static inline int __access_ok(const void __user *ptr, unsigned long size);
| ^~~~~~~~~~~
>> arch/um/include/asm/uaccess.h:28:19: warning: parameter '__access_ok' declared 'inline'
>> arch/um/include/asm/uaccess.h:28:1: warning: 'gnu_inline' attribute ignored [-Wattributes]
28 | static inline int __access_ok(const void __user *ptr, unsigned long size);
| ^~~~~~
arch/um/include/asm/uaccess.h:28:19: error: 'no_instrument_function' attribute applies only to functions
28 | static inline int __access_ok(const void __user *ptr, unsigned long size);
| ^~~~~~~~~~~
In file included from arch/um/include/asm/uaccess.h:37:
include/asm-generic/uaccess.h:136:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
136 | {
| ^
include/asm-generic/uaccess.h:144:12: error: storage class specified for parameter '__put_user_bad'
144 | extern int __put_user_bad(void) __attribute__((noreturn));
| ^~~~~~~~~~~~~~
include/asm-generic/uaccess.h:197:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
197 | {
| ^
include/asm-generic/uaccess.h:205:12: error: storage class specified for parameter '__get_user_bad'
205 | extern int __get_user_bad(void) __attribute__((noreturn));
| ^~~~~~~~~~~~~~
include/asm-generic/uaccess.h:221:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
221 | {
| ^
In file included from ./arch/um/include/generated/asm/extable.h:1,
from include/asm-generic/uaccess.h:229:
include/asm-generic/extable.h:18:1: warning: empty declaration
18 | struct exception_table_entry
| ^~~~~~
include/asm-generic/extable.h:24:1: warning: empty declaration
24 | struct pt_regs;
| ^~~~~~
include/asm-generic/extable.h:25:12: error: storage class specified for parameter 'fixup_exception'
25 | extern int fixup_exception(struct pt_regs *regs);
| ^~~~~~~~~~~~~~~
In file included from include/linux/compiler_types.h:80,
from <command-line>:
include/linux/compiler_attributes.h:356:41: error: expected declaration specifiers before '__attribute__'
356 | #define __must_check __attribute__((__warn_unused_result__))
| ^~~~~~~~~~~~~
include/asm-generic/uaccess.h:231:1: note: in expansion of macro '__must_check'
231 | __must_check long strncpy_from_user(char *dst, const char __user *src,
| ^~~~~~~~~~~~
include/linux/compiler_attributes.h:356:41: error: expected declaration specifiers before '__attribute__'
356 | #define __must_check __attribute__((__warn_unused_result__))
| ^~~~~~~~~~~~~
include/asm-generic/uaccess.h:233:1: note: in expansion of macro '__must_check'
233 | __must_check long strnlen_user(const char __user *src, long n);
| ^~~~~~~~~~~~
arch/um/include/asm/uaccess.h:40:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
40 | {
| ^
include/linux/uaccess.h:82:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
82 | {
| ^
include/linux/uaccess.h:94:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
94 | {
| ^
include/linux/uaccess.h:122:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
122 | {
| ^
include/linux/uaccess.h:132:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
132 | {
| ^
include/linux/uaccess.h:144:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
144 | {
| ^
include/linux/uaccess.h:164:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
164 | {
| ^
include/linux/uaccess.h:181:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
181 | {
| ^
include/linux/uaccess.h:189:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
189 | {
| ^
include/linux/uaccess.h:202:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
202 | {
| ^
include/linux/uaccess.h:209:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
209 | {
| ^
include/linux/uaccess.h:214:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
214 | {
| ^
include/linux/uaccess.h:226:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
226 | {
| ^
include/linux/uaccess.h:236:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
236 | {
| ^
include/linux/uaccess.h:249:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
249 | {
| ^
include/linux/uaccess.h:281:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
281 | {
| ^
include/linux/uaccess.h:292:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
292 | {
| ^
include/linux/uaccess.h:298:25: error: storage class specified for parameter 'check_zeroed_user'
298 | extern __must_check int check_zeroed_user(const void __user *from, size_t size);
| ^~~~~~~~~~~~~~~~~
--
| ^
include/linux/page_ref.h:88:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
88 | {
| ^
include/linux/page_ref.h:93:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
93 | {
| ^
include/linux/page_ref.h:98:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
98 | {
| ^
include/linux/page_ref.h:105:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
105 | {
| ^
include/linux/page_ref.h:114:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
114 | {
| ^
include/linux/page_ref.h:119:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
119 | {
| ^
include/linux/page_ref.h:126:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
126 | {
| ^
include/linux/page_ref.h:131:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
131 | {
| ^
include/linux/page_ref.h:138:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
138 | {
| ^
include/linux/page_ref.h:143:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
143 | {
| ^
include/linux/page_ref.h:152:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
152 | {
| ^
include/linux/page_ref.h:157:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
157 | {
| ^
include/linux/page_ref.h:164:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
164 | {
| ^
include/linux/page_ref.h:169:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
169 | {
| ^
include/linux/page_ref.h:176:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
176 | {
| ^
include/linux/page_ref.h:181:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
181 | {
| ^
include/linux/page_ref.h:190:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
190 | {
| ^
include/linux/page_ref.h:195:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
195 | {
| ^
include/linux/page_ref.h:204:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
204 | {
| ^
include/linux/page_ref.h:209:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
209 | {
| ^
include/linux/page_ref.h:218:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
218 | {
| ^
include/linux/page_ref.h:223:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
223 | {
| ^
include/linux/page_ref.h:232:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
232 | {
| ^
include/linux/page_ref.h:237:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
237 | {
| ^
include/linux/page_ref.h:246:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
246 | {
| ^
include/linux/page_ref.h:262:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
262 | {
| ^
include/linux/page_ref.h:267:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
267 | {
| ^
include/linux/page_ref.h:312:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
312 | {
| ^
include/linux/page_ref.h:317:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
317 | {
| ^
include/linux/page_ref.h:326:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
326 | {
| ^
include/linux/page_ref.h:331:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
331 | {
| ^
include/linux/page_ref.h:341:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
341 | {
| ^
In file included from arch/um/include/asm/pgtable.h:11,
from include/linux/pgtable.h:6,
from include/linux/mm.h:29:
>> arch/um/include/asm/fixmap.h:35:1: warning: empty declaration
35 | enum fixed_addresses {
| ^~~~
arch/um/include/asm/fixmap.h:39:13: error: storage class specified for parameter '__set_fixmap'
39 | extern void __set_fixmap (enum fixed_addresses idx,
| ^~~~~~~~~~~~
In file included from arch/um/include/asm/fixmap.h:54:
include/asm-generic/fixmap.h:31:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
31 | {
| ^
include/asm-generic/fixmap.h:37:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
37 | {
| ^
In file included from include/asm-generic/pgtable-nopud.h:7,
from arch/um/include/asm/pgtable-3level.h:10,
from arch/um/include/asm/pgtable.h:28:
include/asm-generic/pgtable-nop4d.h:9:31: error: storage class specified for parameter 'p4d_t'
9 | typedef struct { pgd_t pgd; } p4d_t;
| ^~~~~
include/asm-generic/pgtable-nop4d.h:21:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
21 | static inline int pgd_none(pgd_t pgd) { return 0; }
| ^
include/asm-generic/pgtable-nop4d.h:22:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
22 | static inline int pgd_bad(pgd_t pgd) { return 0; }
| ^
include/asm-generic/pgtable-nop4d.h:23:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
23 | static inline int pgd_present(pgd_t pgd) { return 1; }
| ^
include/asm-generic/pgtable-nop4d.h:24:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
24 | static inline void pgd_clear(pgd_t *pgd) { }
| ^
include/asm-generic/pgtable-nop4d.h:35:21: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
35 | static inline p4d_t *p4d_offset(pgd_t *pgd, unsigned long address)
| ^
include/asm-generic/pgtable-nopud.h:16:18: error: expected specifier-qualifier-list before 'p4d_t'
16 | typedef struct { p4d_t p4d; } pud_t;
| ^~~~~
include/asm-generic/pgtable-nopud.h:16:31: error: storage class specified for parameter 'pud_t'
16 | typedef struct { p4d_t p4d; } pud_t;
| ^~~~~
include/asm-generic/pgtable-nopud.h:28:28: error: expected declaration specifiers or '...' before 'p4d_t'
28 | static inline int p4d_none(p4d_t p4d) { return 0; }
| ^~~~~
include/asm-generic/pgtable-nopud.h:29:27: error: expected declaration specifiers or '...' before 'p4d_t'
29 | static inline int p4d_bad(p4d_t p4d) { return 0; }
| ^~~~~
include/asm-generic/pgtable-nopud.h:30:31: error: expected declaration specifiers or '...' before 'p4d_t'
30 | static inline int p4d_present(p4d_t p4d) { return 1; }
| ^~~~~
include/asm-generic/pgtable-nopud.h:31:30: error: expected declaration specifiers or '...' before 'p4d_t'
31 | static inline void p4d_clear(p4d_t *p4d) { }
| ^~~~~
include/asm-generic/pgtable-nopud.h:42:21: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
42 | static inline pud_t *pud_offset(p4d_t *p4d, unsigned long address)
| ^
arch/um/include/asm/pgtable-3level.h:64:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
64 | {
| ^
arch/um/include/asm/pgtable-3level.h:68:46: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
68 | static inline void pgd_mkuptodate(pgd_t pgd) { pgd_val(pgd) &= ~_PAGE_NEWPAGE; }
| ^
arch/um/include/asm/pgtable-3level.h:72:31: error: expected declaration specifiers or '...' before 'pud_t'
72 | static inline void pud_clear (pud_t *pud)
| ^~~~~
arch/um/include/asm/pgtable-3level.h:81:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
81 | {
| ^
arch/um/include/asm/pgtable-3level.h:86:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
86 | {
| ^
arch/um/include/asm/pgtable-3level.h:95:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
95 | {
| ^
arch/um/include/asm/pgtable.h:33:14: error: storage class specified for parameter 'swapper_pg_dir'
33 | extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
| ^~~~~~~~~~~~~~
arch/um/include/asm/pgtable.h:36:23: error: storage class specified for parameter 'empty_zero_page'
36 | extern unsigned long *empty_zero_page;
| ^~~~~~~~~~~~~~~
arch/um/include/asm/pgtable.h:46:22: error: storage class specified for parameter 'end_iomem'
46 | extern unsigned long end_iomem;
| ^~~~~~~~~
arch/um/include/asm/pgtable.h:112:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
112 | {
| ^
arch/um/include/asm/pgtable.h:121:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
121 | {
| ^
arch/um/include/asm/pgtable.h:126:38: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
126 | static inline int pte_exec(pte_t pte){
| ^
arch/um/include/asm/pgtable.h:132:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
132 | {
| ^
arch/um/include/asm/pgtable.h:138:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
138 | {
| ^
arch/um/include/asm/pgtable.h:143:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
143 | {
| ^
arch/um/include/asm/pgtable.h:148:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
148 | {
| ^
arch/um/include/asm/pgtable.h:153:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
153 | {
| ^
arch/um/include/asm/pgtable.h:164:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
164 | {
| ^
arch/um/include/asm/pgtable.h:170:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
170 | {
| ^
arch/um/include/asm/pgtable.h:176:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
176 | {
| ^
arch/um/include/asm/pgtable.h:182:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
182 | {
| ^
arch/um/include/asm/pgtable.h:191:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
191 | {
| ^
arch/um/include/asm/pgtable.h:199:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
199 | {
| ^
arch/um/include/asm/pgtable.h:205:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
205 | {
| ^
arch/um/include/asm/pgtable.h:211:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
211 | {
| ^
arch/um/include/asm/pgtable.h:219:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
219 | {
| ^
arch/um/include/asm/pgtable.h:227:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
227 | {
| ^
arch/um/include/asm/pgtable.h:233:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
233 | {
| ^
arch/um/include/asm/pgtable.h:247:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
247 | {
| ^
arch/um/include/asm/pgtable.h:253:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
253 | {
| ^
arch/um/include/asm/pgtable.h:276:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
276 | {
| ^
>> arch/um/include/asm/pgtable.h:289:1: warning: empty declaration
289 | struct mm_struct;
| ^~~~~~
arch/um/include/asm/pgtable.h:290:15: error: storage class specified for parameter 'virt_to_pte'
290 | extern pte_t *virt_to_pte(struct mm_struct *mm, unsigned long addr);
| ^~~~~~~~~~~
arch/um/include/asm/pgtable.h:317:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
317 | {
| ^
arch/um/include/asm/pgtable.h:322:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
322 | {
| ^
arch/um/include/asm/pgtable.h:328:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
328 | {
| ^
In file included from include/linux/pgtable.h:14:
include/asm-generic/pgtable_uffd.h:6:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
6 | {
| ^
include/asm-generic/pgtable_uffd.h:11:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
11 | {
| ^
include/asm-generic/pgtable_uffd.h:16:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
16 | {
| ^
include/asm-generic/pgtable_uffd.h:21:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
21 | {
| ^
include/asm-generic/pgtable_uffd.h:26:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
26 | {
| ^
include/asm-generic/pgtable_uffd.h:31:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
31 | {
| ^
include/asm-generic/pgtable_uffd.h:36:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
36 | {
| ^
include/asm-generic/pgtable_uffd.h:41:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
41 | {
| ^
include/asm-generic/pgtable_uffd.h:46:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
46 | {
| ^
include/asm-generic/pgtable_uffd.h:51:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
51 | {
| ^
include/asm-generic/pgtable_uffd.h:56:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
56 | {
| ^
include/asm-generic/pgtable_uffd.h:61:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
61 | {
| ^
In file included from include/linux/pgtable.h:15:
include/linux/page_table_check.h:119:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
119 | {
| ^
include/linux/page_table_check.h:123:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
123 | {
| ^
include/linux/page_table_check.h:128:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
128 | {
| ^
include/linux/page_table_check.h:133:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
133 | {
| ^
include/linux/page_table_check.h:137:67: error: expected declaration specifiers or '...' before 'pud_t'
137 | unsigned long addr, pud_t pud)
| ^~~~~
include/linux/page_table_check.h:144:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
144 | {
| ^
include/linux/page_table_check.h:150:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
150 | {
| ^
include/linux/page_table_check.h:154:65: error: expected declaration specifiers or '...' before 'pud_t'
154 | unsigned long addr, pud_t *pudp,
| ^~~~~
include/linux/page_table_check.h:155:45: error: expected declaration specifiers or '...' before 'pud_t'
155 | pud_t pud)
| ^~~~~
include/linux/page_table_check.h:162:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
162 | {
| ^
include/linux/pgtable.h:63:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
63 | {
| ^
include/linux/pgtable.h:70:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
70 | {
| ^
include/linux/pgtable.h:78:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
78 | {
| ^
include/linux/pgtable.h:91:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
91 | {
| ^
include/linux/pgtable.h:106:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
106 | {
| ^
include/linux/pgtable.h:110:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
110 | {
| ^
..
vim +28 arch/um/include/asm/uaccess.h
^1da177e4c3f41 include/asm-um/uaccess.h Linus Torvalds 2005-04-16 12
fced95cacfc21b arch/um/include/asm/uaccess.h Al Viro 2011-08-18 13 #define __under_task_size(addr, size) \
fced95cacfc21b arch/um/include/asm/uaccess.h Al Viro 2011-08-18 14 (((unsigned long) (addr) < TASK_SIZE) && \
fced95cacfc21b arch/um/include/asm/uaccess.h Al Viro 2011-08-18 15 (((unsigned long) (addr) + (size)) < TASK_SIZE))
fced95cacfc21b arch/um/include/asm/uaccess.h Al Viro 2011-08-18 16
f8d65d27e677da arch/um/include/asm/uaccess.h Richard Weinberger 2015-05-12 17 #define __access_ok_vsyscall(addr, size) \
f8d65d27e677da arch/um/include/asm/uaccess.h Richard Weinberger 2015-05-12 18 (((unsigned long) (addr) >= FIXADDR_USER_START) && \
fced95cacfc21b arch/um/include/asm/uaccess.h Al Viro 2011-08-18 19 ((unsigned long) (addr) + (size) <= FIXADDR_USER_END) && \
fced95cacfc21b arch/um/include/asm/uaccess.h Al Viro 2011-08-18 20 ((unsigned long) (addr) + (size) >= (unsigned long)(addr)))
fced95cacfc21b arch/um/include/asm/uaccess.h Al Viro 2011-08-18 21
fced95cacfc21b arch/um/include/asm/uaccess.h Al Viro 2011-08-18 22 #define __addr_range_nowrap(addr, size) \
fced95cacfc21b arch/um/include/asm/uaccess.h Al Viro 2011-08-18 23 ((unsigned long) (addr) <= ((unsigned long) (addr) + (size)))
fced95cacfc21b arch/um/include/asm/uaccess.h Al Viro 2011-08-18 24
a668ce3a001fe0 arch/um/include/asm/uaccess.h Al Viro 2017-03-28 25 extern unsigned long raw_copy_from_user(void *to, const void __user *from, unsigned long n);
a668ce3a001fe0 arch/um/include/asm/uaccess.h Al Viro 2017-03-28 @26 extern unsigned long raw_copy_to_user(void __user *to, const void *from, unsigned long n);
f8d65d27e677da arch/um/include/asm/uaccess.h Richard Weinberger 2015-05-12 @27 extern unsigned long __clear_user(void __user *mem, unsigned long len);
12700c17fc2861 arch/um/include/asm/uaccess.h Arnd Bergmann 2022-02-15 @28 static inline int __access_ok(const void __user *ptr, unsigned long size);
f8d65d27e677da arch/um/include/asm/uaccess.h Richard Weinberger 2015-05-12 29
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level
2023-08-22 15:12 ` [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level Krishna chaitanya chundru
` (3 preceding siblings ...)
2023-08-23 0:48 ` kernel test robot
@ 2023-08-23 1:05 ` Pavan Kondeti
2023-09-07 6:04 ` Krishna Chaitanya Chundru
2023-08-23 1:13 ` kernel test robot
5 siblings, 1 reply; 17+ messages in thread
From: Pavan Kondeti @ 2023-08-23 1:05 UTC (permalink / raw)
To: Krishna chaitanya chundru
Cc: manivannan.sadhasivam, helgaas, linux-pci, linux-arm-msm,
linux-kernel, quic_vbadigan, quic_nitegupt, quic_skananth,
quic_ramkri, quic_parass, krzysztof.kozlowski, Viresh Kumar,
Nishanth Menon, Stephen Boyd, Rafael J. Wysocki,
open list:OPERATING PERFORMANCE POINTS (OPP)
On Tue, Aug 22, 2023 at 08:42:20PM +0530, Krishna chaitanya chundru wrote:
> Add dev_pm_opp_find_level_floor() for searching a lesser match or
> operating on OPP in the order of decreasing level.
>
"OPP: Add api to retrieve opps which is at most the provided level". Pls
change this to "opp: Add dev_pm_opp_find_level_floor()". The API name
conveys the message.
In the description, you can give a use case. i.e voting for the max
level during initialization of a driver.
> Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com>
> ---
> drivers/opp/core.c | 26 ++++++++++++++++++++++++++
> include/linux/pm_opp.h | 4 ++++
> 2 files changed, 30 insertions(+)
>
> diff --git a/drivers/opp/core.c b/drivers/opp/core.c
> index 954c948..e668cf2 100644
> --- a/drivers/opp/core.c
> +++ b/drivers/opp/core.c
> @@ -727,6 +727,32 @@ struct dev_pm_opp *dev_pm_opp_find_level_ceil(struct device *dev,
> }
> EXPORT_SYMBOL_GPL(dev_pm_opp_find_level_ceil);
>
> +
> +/**
> + * dev_pm_opp_find_level_floor() - Search for a rounded floor freq
> + * @dev: device for which we do this operation
> + * @freq: Start level
> + *
%s/freq/level
Run make W=1 so that kerneldoc is tested.
> + * Search for the matching floor *available* OPP from a starting level
> + * for a device.
> + *
> + * Return: matching *opp and refreshes *level accordingly, else returns
> + * ERR_PTR in case of error and should be handled using IS_ERR. Error return
> + * values can be:
What do you mean by refresh here?
> + * EINVAL: for bad pointer
> + * ERANGE: no match found for search
> + * ENODEV: if device not found in list of registered devices
> + *
> + * The callers are required to call dev_pm_opp_put() for the returned OPP after
> + * use.
> + */
> +struct dev_pm_opp *dev_pm_opp_find_level_floor(struct device *dev,
> + unsigned long *level)
> +{
> + return _find_key_floor(dev, level, 0, true, _read_level, NULL);
> +}
> +EXPORT_SYMBOL_GPL(dev_pm_opp_find_level_floor);
> +
> /**
> * dev_pm_opp_find_bw_ceil() - Search for a rounded ceil bandwidth
> * @dev: device for which we do this operation
> diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h
> index dc1fb58..a3bc386 100644
> --- a/include/linux/pm_opp.h
> +++ b/include/linux/pm_opp.h
> @@ -128,6 +128,8 @@ struct dev_pm_opp *dev_pm_opp_find_level_exact(struct device *dev,
> unsigned int level);
> struct dev_pm_opp *dev_pm_opp_find_level_ceil(struct device *dev,
> unsigned int *level);
> +struct dev_pm_opp *dev_pm_opp_find_level_floor(struct device *dev,
> + unsigned long *level);
>
> struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev,
> unsigned long *freq);
> @@ -285,6 +287,8 @@ static inline struct dev_pm_opp *dev_pm_opp_find_bw_ceil(struct device *dev,
>
> static inline struct dev_pm_opp *dev_pm_opp_find_bw_floor(struct device *dev,
> unsigned int *bw, int index)
> +static inline struct dev_pm_opp *dev_pm_opp_find_level_floor(struct device *dev,
> + unsigned long *level)
> {
> return ERR_PTR(-EOPNOTSUPP);
> }
>
Please run ./scripts/checkpatch.pl --strict <your patch> and fix the
indentation warnings from this patch.
Thanks,
Pavan
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level
2023-08-22 15:12 ` [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level Krishna chaitanya chundru
` (4 preceding siblings ...)
2023-08-23 1:05 ` Pavan Kondeti
@ 2023-08-23 1:13 ` kernel test robot
5 siblings, 0 replies; 17+ messages in thread
From: kernel test robot @ 2023-08-23 1:13 UTC (permalink / raw)
To: Krishna chaitanya chundru, manivannan.sadhasivam
Cc: oe-kbuild-all, helgaas, linux-pci, linux-arm-msm, linux-kernel,
quic_vbadigan, quic_nitegupt, quic_skananth, quic_ramkri,
quic_parass, krzysztof.kozlowski, Krishna chaitanya chundru,
Viresh Kumar, Stephen Boyd, Rafael J. Wysocki,
(open list:OPERATING PERFORMANCE POINTS (OPP))
Hi Krishna,
kernel test robot noticed the following build errors:
[auto build test ERROR on pci/for-linus]
[also build test ERROR on robh/for-next rafael-pm/linux-next linus/master v6.5-rc7 next-20230822]
[cannot apply to pci/next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]
url: https://github.com/intel-lab-lkp/linux/commits/Krishna-chaitanya-chundru/dt-bindings-pci-qcom-Add-opp-table/20230822-232104
base: https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git for-linus
patch link: https://lore.kernel.org/r/1692717141-32743-4-git-send-email-quic_krichai%40quicinc.com
patch subject: [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level
config: arc-allnoconfig (https://download.01.org/0day-ci/archive/20230823/202308230954.jyXY61U7-lkp@intel.com/config)
compiler: arc-elf-gcc (GCC) 13.2.0
reproduce: (https://download.01.org/0day-ci/archive/20230823/202308230954.jyXY61U7-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202308230954.jyXY61U7-lkp@intel.com/
All error/warnings (new ones prefixed by >>):
263 | {
| ^
include/linux/signal.h:268:13: error: storage class specified for parameter 'flush_sigqueue'
268 | extern void flush_sigqueue(struct sigpending *queue);
| ^~~~~~~~~~~~~~
include/linux/signal.h:272:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
272 | {
| ^
include/linux/signal.h:276:1: warning: empty declaration
276 | struct timespec;
| ^~~~~~
include/linux/signal.h:277:1: warning: empty declaration
277 | struct pt_regs;
| ^~~~~~
include/linux/signal.h:278:1: warning: empty declaration
278 | enum pid_type;
| ^~~~
include/linux/signal.h:280:12: error: storage class specified for parameter 'next_signal'
280 | extern int next_signal(struct sigpending *pending, sigset_t *mask);
| ^~~~~~~~~~~
include/linux/signal.h:281:12: error: storage class specified for parameter 'do_send_sig_info'
281 | extern int do_send_sig_info(int sig, struct kernel_siginfo *info,
| ^~~~~~~~~~~~~~~~
include/linux/signal.h:283:12: error: storage class specified for parameter 'group_send_sig_info'
283 | extern int group_send_sig_info(int sig, struct kernel_siginfo *info,
| ^~~~~~~~~~~~~~~~~~~
include/linux/signal.h:285:12: error: storage class specified for parameter 'send_signal_locked'
285 | extern int send_signal_locked(int sig, struct kernel_siginfo *info,
| ^~~~~~~~~~~~~~~~~~
include/linux/signal.h:287:12: error: storage class specified for parameter 'sigprocmask'
287 | extern int sigprocmask(int, sigset_t *, sigset_t *);
| ^~~~~~~~~~~
include/linux/signal.h:288:13: error: storage class specified for parameter 'set_current_blocked'
288 | extern void set_current_blocked(sigset_t *);
| ^~~~~~~~~~~~~~~~~~~
include/linux/signal.h:289:13: error: storage class specified for parameter '__set_current_blocked'
289 | extern void __set_current_blocked(const sigset_t *);
| ^~~~~~~~~~~~~~~~~~~~~
include/linux/signal.h:290:12: error: storage class specified for parameter 'show_unhandled_signals'
290 | extern int show_unhandled_signals;
| ^~~~~~~~~~~~~~~~~~~~~~
include/linux/signal.h:292:13: error: storage class specified for parameter 'get_signal'
292 | extern bool get_signal(struct ksignal *ksig);
| ^~~~~~~~~~
include/linux/signal.h:293:13: error: storage class specified for parameter 'signal_setup_done'
293 | extern void signal_setup_done(int failed, struct ksignal *ksig, int stepping);
| ^~~~~~~~~~~~~~~~~
include/linux/signal.h:294:13: error: storage class specified for parameter 'exit_signals'
294 | extern void exit_signals(struct task_struct *tsk);
| ^~~~~~~~~~~~
include/linux/signal.h:295:13: error: storage class specified for parameter 'kernel_sigaction'
295 | extern void kernel_sigaction(int, __sighandler_t);
| ^~~~~~~~~~~~~~~~
include/linux/signal.h:301:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
301 | {
| ^
include/linux/signal.h:311:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
311 | {
| ^
include/linux/signal.h:321:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
321 | {
| ^
include/linux/signal.h:325:27: error: storage class specified for parameter 'sighand_cachep'
325 | extern struct kmem_cache *sighand_cachep;
| ^~~~~~~~~~~~~~
include/linux/signal.h:327:13: error: storage class specified for parameter 'unhandled_signal'
327 | extern bool unhandled_signal(struct task_struct *tsk, int sig);
| ^~~~~~~~~~~~~~~~
include/linux/signal.h:470:56: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
470 | static inline bool sigaltstack_size_valid(size_t size) { return true; }
| ^
include/linux/signal.h:474:1: warning: empty declaration
474 | struct seq_file;
| ^~~~~~
include/linux/signal.h:475:13: error: storage class specified for parameter 'render_sigset_t'
475 | extern void render_sigset_t(struct seq_file *, const char *, sigset_t *);
| ^~~~~~~~~~~~~~~
include/linux/signal.h:487:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
487 | {
| ^
In file included from include/linux/sched/signal.h:8:
include/linux/sched/jobctl.h:7:1: warning: empty declaration
7 | struct task_struct;
| ^~~~~~
include/linux/sched/jobctl.h:43:13: error: storage class specified for parameter 'task_set_jobctl_pending'
43 | extern bool task_set_jobctl_pending(struct task_struct *task, unsigned long mask);
| ^~~~~~~~~~~~~~~~~~~~~~~
include/linux/sched/jobctl.h:44:13: error: storage class specified for parameter 'task_clear_jobctl_trapping'
44 | extern void task_clear_jobctl_trapping(struct task_struct *task);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
include/linux/sched/jobctl.h:45:13: error: storage class specified for parameter 'task_clear_jobctl_pending'
45 | extern void task_clear_jobctl_pending(struct task_struct *task, unsigned long mask);
| ^~~~~~~~~~~~~~~~~~~~~~~~~
In file included from include/linux/uaccess.h:5,
from include/linux/sched/task.h:11,
from include/linux/sched/signal.h:9:
include/linux/fault-inject-usercopy.h:18:47: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
18 | static inline bool should_fail_usercopy(void) { return false; }
| ^
In file included from include/linux/uaccess.h:11:
>> arch/arc/include/asm/uaccess.h:140:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
140 | {
| ^
arch/arc/include/asm/uaccess.h:367:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
367 | {
| ^
arch/arc/include/asm/uaccess.h:588:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
588 | {
| ^
In file included from include/asm-generic/uaccess.h:11,
from arch/arc/include/asm/uaccess.h:641:
include/asm-generic/access_ok.h:32:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
32 | {
| ^
include/asm-generic/uaccess.h:144:12: error: storage class specified for parameter '__put_user_bad'
144 | extern int __put_user_bad(void) __attribute__((noreturn));
| ^~~~~~~~~~~~~~
include/asm-generic/uaccess.h:205:12: error: storage class specified for parameter '__get_user_bad'
205 | extern int __get_user_bad(void) __attribute__((noreturn));
| ^~~~~~~~~~~~~~
include/asm-generic/uaccess.h:221:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
221 | {
| ^
In file included from ./arch/arc/include/generated/asm/extable.h:1,
from include/asm-generic/uaccess.h:229:
include/asm-generic/extable.h:18:1: warning: empty declaration
18 | struct exception_table_entry
| ^~~~~~
include/asm-generic/extable.h:24:1: warning: empty declaration
24 | struct pt_regs;
| ^~~~~~
include/asm-generic/extable.h:25:12: error: storage class specified for parameter 'fixup_exception'
25 | extern int fixup_exception(struct pt_regs *regs);
| ^~~~~~~~~~~~~~~
In file included from include/linux/compiler_types.h:80,
from <command-line>:
include/linux/compiler_attributes.h:356:41: error: expected declaration specifiers before '__attribute__'
356 | #define __must_check __attribute__((__warn_unused_result__))
| ^~~~~~~~~~~~~
include/asm-generic/uaccess.h:231:1: note: in expansion of macro '__must_check'
231 | __must_check long strncpy_from_user(char *dst, const char __user *src,
| ^~~~~~~~~~~~
include/linux/compiler_attributes.h:356:41: error: expected declaration specifiers before '__attribute__'
356 | #define __must_check __attribute__((__warn_unused_result__))
| ^~~~~~~~~~~~~
include/asm-generic/uaccess.h:233:1: note: in expansion of macro '__must_check'
233 | __must_check long strnlen_user(const char __user *src, long n);
| ^~~~~~~~~~~~
include/linux/uaccess.h:82:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
82 | {
| ^
include/linux/uaccess.h:94:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
94 | {
| ^
include/linux/uaccess.h:122:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
122 | {
| ^
include/linux/uaccess.h:132:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
132 | {
| ^
include/linux/uaccess.h:144:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
144 | {
| ^
include/linux/uaccess.h:164:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
164 | {
| ^
include/linux/uaccess.h:181:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
181 | {
| ^
include/linux/uaccess.h:189:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
189 | {
| ^
include/linux/uaccess.h:202:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
202 | {
| ^
include/linux/uaccess.h:209:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
209 | {
| ^
include/linux/uaccess.h:214:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
214 | {
| ^
include/linux/uaccess.h:226:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
226 | {
| ^
include/linux/uaccess.h:236:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
236 | {
| ^
include/linux/uaccess.h:249:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
249 | {
| ^
include/linux/uaccess.h:281:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
281 | {
| ^
include/linux/uaccess.h:292:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
292 | {
| ^
include/linux/uaccess.h:298:25: error: storage class specified for parameter 'check_zeroed_user'
298 | extern __must_check int check_zeroed_user(const void __user *from, size_t size);
| ^~~~~~~~~~~~~~~~~
include/linux/uaccess.h:350:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
350 | {
--
include/linux/page_ref.h:262:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
262 | {
| ^
include/linux/page_ref.h:267:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
267 | {
| ^
include/linux/page_ref.h:312:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
312 | {
| ^
include/linux/page_ref.h:317:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
317 | {
| ^
include/linux/page_ref.h:326:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
326 | {
| ^
include/linux/page_ref.h:331:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
331 | {
| ^
include/linux/page_ref.h:341:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
341 | {
| ^
In file included from include/asm-generic/pgtable-nopud.h:7,
from include/asm-generic/pgtable-nopmd.h:7,
from arch/arc/include/asm/pgtable-levels.h:95,
from arch/arc/include/asm/pgtable.h:11,
from include/linux/pgtable.h:6,
from include/linux/mm.h:29:
include/asm-generic/pgtable-nop4d.h:9:31: error: storage class specified for parameter 'p4d_t'
9 | typedef struct { pgd_t pgd; } p4d_t;
| ^~~~~
include/asm-generic/pgtable-nop4d.h:21:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
21 | static inline int pgd_none(pgd_t pgd) { return 0; }
| ^
include/asm-generic/pgtable-nop4d.h:22:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
22 | static inline int pgd_bad(pgd_t pgd) { return 0; }
| ^
include/asm-generic/pgtable-nop4d.h:23:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
23 | static inline int pgd_present(pgd_t pgd) { return 1; }
| ^
include/asm-generic/pgtable-nop4d.h:24:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
24 | static inline void pgd_clear(pgd_t *pgd) { }
| ^
include/asm-generic/pgtable-nop4d.h:35:21: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
35 | static inline p4d_t *p4d_offset(pgd_t *pgd, unsigned long address)
| ^
include/asm-generic/pgtable-nopud.h:16:18: error: expected specifier-qualifier-list before 'p4d_t'
16 | typedef struct { p4d_t p4d; } pud_t;
| ^~~~~
include/asm-generic/pgtable-nopud.h:16:31: error: storage class specified for parameter 'pud_t'
16 | typedef struct { p4d_t p4d; } pud_t;
| ^~~~~
include/asm-generic/pgtable-nopud.h:28:28: error: expected declaration specifiers or '...' before 'p4d_t'
28 | static inline int p4d_none(p4d_t p4d) { return 0; }
| ^~~~~
include/asm-generic/pgtable-nopud.h:29:27: error: expected declaration specifiers or '...' before 'p4d_t'
29 | static inline int p4d_bad(p4d_t p4d) { return 0; }
| ^~~~~
include/asm-generic/pgtable-nopud.h:30:31: error: expected declaration specifiers or '...' before 'p4d_t'
30 | static inline int p4d_present(p4d_t p4d) { return 1; }
| ^~~~~
include/asm-generic/pgtable-nopud.h:31:30: error: expected declaration specifiers or '...' before 'p4d_t'
31 | static inline void p4d_clear(p4d_t *p4d) { }
| ^~~~~
include/asm-generic/pgtable-nopud.h:42:21: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
42 | static inline pud_t *pud_offset(p4d_t *p4d, unsigned long address)
| ^
include/asm-generic/pgtable-nopmd.h:9:1: warning: empty declaration
9 | struct mm_struct;
| ^~~~~~
include/asm-generic/pgtable-nopmd.h:18:18: error: expected specifier-qualifier-list before 'pud_t'
18 | typedef struct { pud_t pud; } pmd_t;
| ^~~~~
include/asm-generic/pgtable-nopmd.h:18:31: error: storage class specified for parameter 'pmd_t'
18 | typedef struct { pud_t pud; } pmd_t;
| ^~~~~
include/asm-generic/pgtable-nopmd.h:30:28: error: expected declaration specifiers or '...' before 'pud_t'
30 | static inline int pud_none(pud_t pud) { return 0; }
| ^~~~~
include/asm-generic/pgtable-nopmd.h:31:27: error: expected declaration specifiers or '...' before 'pud_t'
31 | static inline int pud_bad(pud_t pud) { return 0; }
| ^~~~~
include/asm-generic/pgtable-nopmd.h:32:31: error: expected declaration specifiers or '...' before 'pud_t'
32 | static inline int pud_present(pud_t pud) { return 1; }
| ^~~~~
include/asm-generic/pgtable-nopmd.h:33:28: error: expected declaration specifiers or '...' before 'pud_t'
33 | static inline int pud_user(pud_t pud) { return 0; }
| ^~~~~
include/asm-generic/pgtable-nopmd.h:34:28: error: expected declaration specifiers or '...' before 'pud_t'
34 | static inline int pud_leaf(pud_t pud) { return 0; }
| ^~~~~
include/asm-generic/pgtable-nopmd.h:35:30: error: expected declaration specifiers or '...' before 'pud_t'
35 | static inline void pud_clear(pud_t *pud) { }
| ^~~~~
include/asm-generic/pgtable-nopmd.h:46:21: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
46 | static inline pmd_t * pmd_offset(pud_t * pud, unsigned long address)
| ^
include/asm-generic/pgtable-nopmd.h:63:51: error: expected declaration specifiers or '...' before 'pmd_t'
63 | static inline void pmd_free(struct mm_struct *mm, pmd_t *pmd)
| ^~~~~
In file included from arch/arc/include/asm/pgtable.h:12:
>> arch/arc/include/asm/pgtable-bits-arcv2.h:86:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
86 | static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; }
| ^
arch/arc/include/asm/pgtable-bits-arcv2.h:88:1: note: in expansion of macro 'PTE_BIT_FUNC'
88 | PTE_BIT_FUNC(mknotpresent, &= ~(_PAGE_PRESENT));
| ^~~~~~~~~~~~
>> arch/arc/include/asm/pgtable-bits-arcv2.h:88:52: error: expected declaration specifiers before ';' token
88 | PTE_BIT_FUNC(mknotpresent, &= ~(_PAGE_PRESENT));
| ^
>> arch/arc/include/asm/pgtable-bits-arcv2.h:86:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
86 | static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; }
| ^
arch/arc/include/asm/pgtable-bits-arcv2.h:89:1: note: in expansion of macro 'PTE_BIT_FUNC'
89 | PTE_BIT_FUNC(wrprotect, &= ~(_PAGE_WRITE));
| ^~~~~~~~~~~~
arch/arc/include/asm/pgtable-bits-arcv2.h:89:43: error: expected declaration specifiers before ';' token
89 | PTE_BIT_FUNC(wrprotect, &= ~(_PAGE_WRITE));
| ^
>> arch/arc/include/asm/pgtable-bits-arcv2.h:86:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
86 | static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; }
| ^
arch/arc/include/asm/pgtable-bits-arcv2.h:90:1: note: in expansion of macro 'PTE_BIT_FUNC'
90 | PTE_BIT_FUNC(mkwrite, |= (_PAGE_WRITE));
| ^~~~~~~~~~~~
arch/arc/include/asm/pgtable-bits-arcv2.h:90:42: error: expected declaration specifiers before ';' token
90 | PTE_BIT_FUNC(mkwrite, |= (_PAGE_WRITE));
| ^
>> arch/arc/include/asm/pgtable-bits-arcv2.h:86:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
86 | static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; }
| ^
arch/arc/include/asm/pgtable-bits-arcv2.h:91:1: note: in expansion of macro 'PTE_BIT_FUNC'
91 | PTE_BIT_FUNC(mkclean, &= ~(_PAGE_DIRTY));
| ^~~~~~~~~~~~
arch/arc/include/asm/pgtable-bits-arcv2.h:91:43: error: expected declaration specifiers before ';' token
91 | PTE_BIT_FUNC(mkclean, &= ~(_PAGE_DIRTY));
| ^
>> arch/arc/include/asm/pgtable-bits-arcv2.h:86:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
86 | static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; }
| ^
arch/arc/include/asm/pgtable-bits-arcv2.h:92:1: note: in expansion of macro 'PTE_BIT_FUNC'
92 | PTE_BIT_FUNC(mkdirty, |= (_PAGE_DIRTY));
| ^~~~~~~~~~~~
arch/arc/include/asm/pgtable-bits-arcv2.h:92:42: error: expected declaration specifiers before ';' token
92 | PTE_BIT_FUNC(mkdirty, |= (_PAGE_DIRTY));
| ^
>> arch/arc/include/asm/pgtable-bits-arcv2.h:86:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
86 | static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; }
| ^
arch/arc/include/asm/pgtable-bits-arcv2.h:93:1: note: in expansion of macro 'PTE_BIT_FUNC'
93 | PTE_BIT_FUNC(mkold, &= ~(_PAGE_ACCESSED));
| ^~~~~~~~~~~~
arch/arc/include/asm/pgtable-bits-arcv2.h:93:46: error: expected declaration specifiers before ';' token
93 | PTE_BIT_FUNC(mkold, &= ~(_PAGE_ACCESSED));
| ^
>> arch/arc/include/asm/pgtable-bits-arcv2.h:86:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
86 | static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; }
| ^
arch/arc/include/asm/pgtable-bits-arcv2.h:94:1: note: in expansion of macro 'PTE_BIT_FUNC'
94 | PTE_BIT_FUNC(mkyoung, |= (_PAGE_ACCESSED));
| ^~~~~~~~~~~~
arch/arc/include/asm/pgtable-bits-arcv2.h:94:45: error: expected declaration specifiers before ';' token
94 | PTE_BIT_FUNC(mkyoung, |= (_PAGE_ACCESSED));
| ^
>> arch/arc/include/asm/pgtable-bits-arcv2.h:86:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
86 | static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; }
| ^
arch/arc/include/asm/pgtable-bits-arcv2.h:95:1: note: in expansion of macro 'PTE_BIT_FUNC'
95 | PTE_BIT_FUNC(mkspecial, |= (_PAGE_SPECIAL));
| ^~~~~~~~~~~~
arch/arc/include/asm/pgtable-bits-arcv2.h:95:44: error: expected declaration specifiers before ';' token
95 | PTE_BIT_FUNC(mkspecial, |= (_PAGE_SPECIAL));
| ^
>> arch/arc/include/asm/pgtable-bits-arcv2.h:86:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
86 | static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; }
| ^
arch/arc/include/asm/pgtable-bits-arcv2.h:96:1: note: in expansion of macro 'PTE_BIT_FUNC'
96 | PTE_BIT_FUNC(mkhuge, |= (_PAGE_HW_SZ));
| ^~~~~~~~~~~~
arch/arc/include/asm/pgtable-bits-arcv2.h:96:42: error: expected declaration specifiers before ';' token
96 | PTE_BIT_FUNC(mkhuge, |= (_PAGE_HW_SZ));
| ^
arch/arc/include/asm/pgtable-bits-arcv2.h:99:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
99 | {
| ^
arch/arc/include/asm/pgtable-bits-arcv2.h:105:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
105 | {
| ^
arch/arc/include/asm/pgtable-bits-arcv2.h:136:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
136 | {
| ^
>> arch/arc/include/asm/pgtable-bits-arcv2.h:86:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
86 | static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; }
| ^
arch/arc/include/asm/pgtable-bits-arcv2.h:140:1: note: in expansion of macro 'PTE_BIT_FUNC'
140 | PTE_BIT_FUNC(swp_mkexclusive, |= (_PAGE_SWP_EXCLUSIVE));
| ^~~~~~~~~~~~
arch/arc/include/asm/pgtable-bits-arcv2.h:140:56: error: expected declaration specifiers before ';' token
140 | PTE_BIT_FUNC(swp_mkexclusive, |= (_PAGE_SWP_EXCLUSIVE));
| ^
>> arch/arc/include/asm/pgtable-bits-arcv2.h:86:49: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
86 | static inline pte_t pte_##fn(pte_t pte) { pte_val(pte) op; return pte; }
| ^
arch/arc/include/asm/pgtable-bits-arcv2.h:141:1: note: in expansion of macro 'PTE_BIT_FUNC'
141 | PTE_BIT_FUNC(swp_clear_exclusive, &= ~(_PAGE_SWP_EXCLUSIVE));
| ^~~~~~~~~~~~
arch/arc/include/asm/pgtable-bits-arcv2.h:141:61: error: expected declaration specifiers before ';' token
141 | PTE_BIT_FUNC(swp_clear_exclusive, &= ~(_PAGE_SWP_EXCLUSIVE));
| ^
>> arch/arc/include/asm/pgtable.h:24:13: error: storage class specified for parameter 'empty_zero_page'
24 | extern char empty_zero_page[PAGE_SIZE];
| ^~~~~~~~~~~~~~~
>> arch/arc/include/asm/pgtable.h:27:14: error: storage class specified for parameter 'swapper_pg_dir'
27 | extern pgd_t swapper_pg_dir[] __aligned(PAGE_SIZE);
| ^~~~~~~~~~~~~~
>> arch/arc/include/asm/pgtable.h:27:14: error: alignment may not be specified for 'swapper_pg_dir'
In file included from include/linux/pgtable.h:14:
include/asm-generic/pgtable_uffd.h:6:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
6 | {
| ^
include/asm-generic/pgtable_uffd.h:10:40: error: expected declaration specifiers or '...' before 'pmd_t'
10 | static __always_inline int pmd_uffd_wp(pmd_t pmd)
| ^~~~~
include/asm-generic/pgtable_uffd.h:16:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
16 | {
| ^
include/asm-generic/pgtable_uffd.h:20:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'pmd_mkuffd_wp'
20 | static __always_inline pmd_t pmd_mkuffd_wp(pmd_t pmd)
| ^~~~~~~~~~~~~
include/asm-generic/pgtable_uffd.h:26:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
26 | {
| ^
include/asm-generic/pgtable_uffd.h:30:30: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'pmd_clear_uffd_wp'
30 | static __always_inline pmd_t pmd_clear_uffd_wp(pmd_t pmd)
| ^~~~~~~~~~~~~~~~~
include/asm-generic/pgtable_uffd.h:36:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
36 | {
| ^
include/asm-generic/pgtable_uffd.h:41:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
41 | {
| ^
include/asm-generic/pgtable_uffd.h:46:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
46 | {
| ^
include/asm-generic/pgtable_uffd.h:50:21: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'pmd_swp_mkuffd_wp'
50 | static inline pmd_t pmd_swp_mkuffd_wp(pmd_t pmd)
| ^~~~~~~~~~~~~~~~~
include/asm-generic/pgtable_uffd.h:55:35: error: expected declaration specifiers or '...' before 'pmd_t'
55 | static inline int pmd_swp_uffd_wp(pmd_t pmd)
| ^~~~~
include/asm-generic/pgtable_uffd.h:60:21: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'pmd_swp_clear_uffd_wp'
60 | static inline pmd_t pmd_swp_clear_uffd_wp(pmd_t pmd)
| ^~~~~~~~~~~~~~~~~~~~~
In file included from include/linux/pgtable.h:15:
include/linux/page_table_check.h:119:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
119 | {
| ^
include/linux/page_table_check.h:123:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
123 | {
| ^
include/linux/page_table_check.h:128:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
128 | {
| ^
include/linux/page_table_check.h:132:67: error: expected declaration specifiers or '...' before 'pmd_t'
132 | unsigned long addr, pmd_t pmd)
| ^~~~~
include/linux/page_table_check.h:137:67: error: expected declaration specifiers or '...' before 'pud_t'
137 | unsigned long addr, pud_t pud)
| ^~~~~
include/linux/page_table_check.h:144:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
144 | {
| ^
include/linux/page_table_check.h:148:65: error: expected declaration specifiers or '...' before 'pmd_t'
148 | unsigned long addr, pmd_t *pmdp,
| ^~~~~
include/linux/page_table_check.h:149:45: error: expected declaration specifiers or '...' before 'pmd_t'
149 | pmd_t pmd)
| ^~~~~
include/linux/page_table_check.h:154:65: error: expected declaration specifiers or '...' before 'pud_t'
154 | unsigned long addr, pud_t *pudp,
| ^~~~~
include/linux/page_table_check.h:155:45: error: expected declaration specifiers or '...' before 'pud_t'
155 | pud_t pud)
| ^~~~~
include/linux/page_table_check.h:161:53: error: expected declaration specifiers or '...' before 'pmd_t'
161 | pmd_t pmd)
| ^~~~~
include/linux/pgtable.h:63:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
63 | {
| ^
include/linux/pgtable.h:70:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
70 | {
| ^
include/linux/pgtable.h:78:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
78 | {
| ^
include/linux/pgtable.h:90:40: error: expected declaration specifiers or '...' before 'pmd_t'
90 | static inline pte_t *pte_offset_kernel(pmd_t *pmd, unsigned long address)
| ^~~~~
include/linux/pgtable.h:105:32: error: expected declaration specifiers or '...' before 'pmd_t'
105 | static inline pte_t *__pte_map(pmd_t *pmd, unsigned long address)
| ^~~~~
include/linux/pgtable.h:110:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
110 | {
| ^
include/linux/pgtable.h:133:1: error: expected '=', ',', ';', 'asm' or '__attribute__' before '{' token
133 | {
| ^
include/linux/pgtable.h:135:2: error: expected declaration specifiers before ';' token
135 | };
| ^
include/linux/pgtable.h:159:21: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
159 | static inline pmd_t *pmd_off(struct mm_struct *mm, unsigned long va)
| ^
include/linux/pgtable.h:164:21: error: expected '=', ',', ';', 'asm' or '__attribute__' before '*' token
164 | static inline pmd_t *pmd_off_k(unsigned long va)
..
vim +140 arch/arc/include/asm/uaccess.h
0a5eae458e923a Vineet Gupta 2013-01-18 100
0a5eae458e923a Vineet Gupta 2013-01-18 101 #define __arc_put_user_one(src, dst, op, ret) \
0a5eae458e923a Vineet Gupta 2013-01-18 102 __asm__ __volatile__( \
0a5eae458e923a Vineet Gupta 2013-01-18 103 "1: "op" %1,[%2]\n" \
0a5eae458e923a Vineet Gupta 2013-01-18 104 "2: ;nop\n" \
0a5eae458e923a Vineet Gupta 2013-01-18 105 " .section .fixup, \"ax\"\n" \
0a5eae458e923a Vineet Gupta 2013-01-18 106 " .align 4\n" \
0a5eae458e923a Vineet Gupta 2013-01-18 107 "3: mov %0, %3\n" \
0a5eae458e923a Vineet Gupta 2013-01-18 108 " j 2b\n" \
0a5eae458e923a Vineet Gupta 2013-01-18 109 " .previous\n" \
0a5eae458e923a Vineet Gupta 2013-01-18 110 " .section __ex_table, \"a\"\n" \
0a5eae458e923a Vineet Gupta 2013-01-18 111 " .align 4\n" \
0a5eae458e923a Vineet Gupta 2013-01-18 112 " .word 1b,3b\n" \
0a5eae458e923a Vineet Gupta 2013-01-18 113 " .previous\n" \
0a5eae458e923a Vineet Gupta 2013-01-18 114 \
0a5eae458e923a Vineet Gupta 2013-01-18 115 : "+r" (ret) \
0a5eae458e923a Vineet Gupta 2013-01-18 116 : "r" (src), "r" (dst), "ir" (-EFAULT))
0a5eae458e923a Vineet Gupta 2013-01-18 117
0a5eae458e923a Vineet Gupta 2013-01-18 118 #define __arc_put_user_one_64(src, dst, ret) \
0a5eae458e923a Vineet Gupta 2013-01-18 119 __asm__ __volatile__( \
0a5eae458e923a Vineet Gupta 2013-01-18 120 "1: st %1,[%2]\n" \
0a5eae458e923a Vineet Gupta 2013-01-18 121 "4: st %R1,[%2, 4]\n" \
0a5eae458e923a Vineet Gupta 2013-01-18 122 "2: ;nop\n" \
0a5eae458e923a Vineet Gupta 2013-01-18 123 " .section .fixup, \"ax\"\n" \
0a5eae458e923a Vineet Gupta 2013-01-18 124 " .align 4\n" \
0a5eae458e923a Vineet Gupta 2013-01-18 125 "3: mov %0, %3\n" \
0a5eae458e923a Vineet Gupta 2013-01-18 126 " j 2b\n" \
0a5eae458e923a Vineet Gupta 2013-01-18 127 " .previous\n" \
0a5eae458e923a Vineet Gupta 2013-01-18 128 " .section __ex_table, \"a\"\n" \
0a5eae458e923a Vineet Gupta 2013-01-18 129 " .align 4\n" \
0a5eae458e923a Vineet Gupta 2013-01-18 130 " .word 1b,3b\n" \
0a5eae458e923a Vineet Gupta 2013-01-18 131 " .word 4b,3b\n" \
0a5eae458e923a Vineet Gupta 2013-01-18 132 " .previous\n" \
0a5eae458e923a Vineet Gupta 2013-01-18 133 \
0a5eae458e923a Vineet Gupta 2013-01-18 134 : "+r" (ret) \
0a5eae458e923a Vineet Gupta 2013-01-18 135 : "r" (src), "r" (dst), "ir" (-EFAULT))
0a5eae458e923a Vineet Gupta 2013-01-18 136
0a5eae458e923a Vineet Gupta 2013-01-18 137
43697cb0973da1 Vineet Gupta 2013-01-18 138 static inline unsigned long
e13909a4acc4b6 Vineet Gupta 2017-03-29 139 raw_copy_from_user(void *to, const void __user *from, unsigned long n)
43697cb0973da1 Vineet Gupta 2013-01-18 @140 {
43697cb0973da1 Vineet Gupta 2013-01-18 141 long res = 0;
43697cb0973da1 Vineet Gupta 2013-01-18 142 char val;
43697cb0973da1 Vineet Gupta 2013-01-18 143 unsigned long tmp1, tmp2, tmp3, tmp4;
43697cb0973da1 Vineet Gupta 2013-01-18 144 unsigned long orig_n = n;
43697cb0973da1 Vineet Gupta 2013-01-18 145
43697cb0973da1 Vineet Gupta 2013-01-18 146 if (n == 0)
43697cb0973da1 Vineet Gupta 2013-01-18 147 return 0;
43697cb0973da1 Vineet Gupta 2013-01-18 148
43697cb0973da1 Vineet Gupta 2013-01-18 149 /* unaligned */
43697cb0973da1 Vineet Gupta 2013-01-18 150 if (((unsigned long)to & 0x3) || ((unsigned long)from & 0x3)) {
43697cb0973da1 Vineet Gupta 2013-01-18 151
43697cb0973da1 Vineet Gupta 2013-01-18 152 unsigned char tmp;
43697cb0973da1 Vineet Gupta 2013-01-18 153
43697cb0973da1 Vineet Gupta 2013-01-18 154 __asm__ __volatile__ (
43697cb0973da1 Vineet Gupta 2013-01-18 155 " mov.f lp_count, %0 \n"
43697cb0973da1 Vineet Gupta 2013-01-18 156 " lpnz 2f \n"
43697cb0973da1 Vineet Gupta 2013-01-18 157 "1: ldb.ab %1, [%3, 1] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 158 " stb.ab %1, [%2, 1] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 159 " sub %0,%0,1 \n"
43697cb0973da1 Vineet Gupta 2013-01-18 160 "2: ;nop \n"
43697cb0973da1 Vineet Gupta 2013-01-18 161 " .section .fixup, \"ax\" \n"
43697cb0973da1 Vineet Gupta 2013-01-18 162 " .align 4 \n"
43697cb0973da1 Vineet Gupta 2013-01-18 163 "3: j 2b \n"
43697cb0973da1 Vineet Gupta 2013-01-18 164 " .previous \n"
43697cb0973da1 Vineet Gupta 2013-01-18 165 " .section __ex_table, \"a\" \n"
43697cb0973da1 Vineet Gupta 2013-01-18 166 " .align 4 \n"
43697cb0973da1 Vineet Gupta 2013-01-18 167 " .word 1b, 3b \n"
43697cb0973da1 Vineet Gupta 2013-01-18 168 " .previous \n"
43697cb0973da1 Vineet Gupta 2013-01-18 169
43697cb0973da1 Vineet Gupta 2013-01-18 170 : "+r" (n),
43697cb0973da1 Vineet Gupta 2013-01-18 171 /*
43697cb0973da1 Vineet Gupta 2013-01-18 172 * Note as an '&' earlyclobber operand to make sure the
43697cb0973da1 Vineet Gupta 2013-01-18 173 * temporary register inside the loop is not the same as
43697cb0973da1 Vineet Gupta 2013-01-18 174 * FROM or TO.
43697cb0973da1 Vineet Gupta 2013-01-18 175 */
43697cb0973da1 Vineet Gupta 2013-01-18 176 "=&r" (tmp), "+r" (to), "+r" (from)
43697cb0973da1 Vineet Gupta 2013-01-18 177 :
d5e3c55e01d8b1 Vineet Gupta 2019-02-05 178 : "lp_count", "memory");
43697cb0973da1 Vineet Gupta 2013-01-18 179
43697cb0973da1 Vineet Gupta 2013-01-18 180 return n;
43697cb0973da1 Vineet Gupta 2013-01-18 181 }
43697cb0973da1 Vineet Gupta 2013-01-18 182
43697cb0973da1 Vineet Gupta 2013-01-18 183 /*
43697cb0973da1 Vineet Gupta 2013-01-18 184 * Hand-crafted constant propagation to reduce code sz of the
43697cb0973da1 Vineet Gupta 2013-01-18 185 * laddered copy 16x,8,4,2,1
43697cb0973da1 Vineet Gupta 2013-01-18 186 */
43697cb0973da1 Vineet Gupta 2013-01-18 187 if (__builtin_constant_p(orig_n)) {
43697cb0973da1 Vineet Gupta 2013-01-18 188 res = orig_n;
43697cb0973da1 Vineet Gupta 2013-01-18 189
43697cb0973da1 Vineet Gupta 2013-01-18 190 if (orig_n / 16) {
43697cb0973da1 Vineet Gupta 2013-01-18 191 orig_n = orig_n % 16;
43697cb0973da1 Vineet Gupta 2013-01-18 192
43697cb0973da1 Vineet Gupta 2013-01-18 193 __asm__ __volatile__(
43697cb0973da1 Vineet Gupta 2013-01-18 194 " lsr lp_count, %7,4 \n"
43697cb0973da1 Vineet Gupta 2013-01-18 195 " lp 3f \n"
43697cb0973da1 Vineet Gupta 2013-01-18 196 "1: ld.ab %3, [%2, 4] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 197 "11: ld.ab %4, [%2, 4] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 198 "12: ld.ab %5, [%2, 4] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 199 "13: ld.ab %6, [%2, 4] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 200 " st.ab %3, [%1, 4] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 201 " st.ab %4, [%1, 4] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 202 " st.ab %5, [%1, 4] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 203 " st.ab %6, [%1, 4] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 204 " sub %0,%0,16 \n"
43697cb0973da1 Vineet Gupta 2013-01-18 205 "3: ;nop \n"
43697cb0973da1 Vineet Gupta 2013-01-18 206 " .section .fixup, \"ax\" \n"
43697cb0973da1 Vineet Gupta 2013-01-18 207 " .align 4 \n"
43697cb0973da1 Vineet Gupta 2013-01-18 208 "4: j 3b \n"
43697cb0973da1 Vineet Gupta 2013-01-18 209 " .previous \n"
43697cb0973da1 Vineet Gupta 2013-01-18 210 " .section __ex_table, \"a\" \n"
43697cb0973da1 Vineet Gupta 2013-01-18 211 " .align 4 \n"
43697cb0973da1 Vineet Gupta 2013-01-18 212 " .word 1b, 4b \n"
43697cb0973da1 Vineet Gupta 2013-01-18 213 " .word 11b,4b \n"
43697cb0973da1 Vineet Gupta 2013-01-18 214 " .word 12b,4b \n"
43697cb0973da1 Vineet Gupta 2013-01-18 215 " .word 13b,4b \n"
43697cb0973da1 Vineet Gupta 2013-01-18 216 " .previous \n"
43697cb0973da1 Vineet Gupta 2013-01-18 217 : "+r" (res), "+r"(to), "+r"(from),
43697cb0973da1 Vineet Gupta 2013-01-18 218 "=r"(tmp1), "=r"(tmp2), "=r"(tmp3), "=r"(tmp4)
43697cb0973da1 Vineet Gupta 2013-01-18 219 : "ir"(n)
43697cb0973da1 Vineet Gupta 2013-01-18 220 : "lp_count", "memory");
43697cb0973da1 Vineet Gupta 2013-01-18 221 }
43697cb0973da1 Vineet Gupta 2013-01-18 222 if (orig_n / 8) {
43697cb0973da1 Vineet Gupta 2013-01-18 223 orig_n = orig_n % 8;
43697cb0973da1 Vineet Gupta 2013-01-18 224
43697cb0973da1 Vineet Gupta 2013-01-18 225 __asm__ __volatile__(
43697cb0973da1 Vineet Gupta 2013-01-18 226 "14: ld.ab %3, [%2,4] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 227 "15: ld.ab %4, [%2,4] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 228 " st.ab %3, [%1,4] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 229 " st.ab %4, [%1,4] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 230 " sub %0,%0,8 \n"
43697cb0973da1 Vineet Gupta 2013-01-18 231 "31: ;nop \n"
43697cb0973da1 Vineet Gupta 2013-01-18 232 " .section .fixup, \"ax\" \n"
43697cb0973da1 Vineet Gupta 2013-01-18 233 " .align 4 \n"
43697cb0973da1 Vineet Gupta 2013-01-18 234 "4: j 31b \n"
43697cb0973da1 Vineet Gupta 2013-01-18 235 " .previous \n"
43697cb0973da1 Vineet Gupta 2013-01-18 236 " .section __ex_table, \"a\" \n"
43697cb0973da1 Vineet Gupta 2013-01-18 237 " .align 4 \n"
43697cb0973da1 Vineet Gupta 2013-01-18 238 " .word 14b,4b \n"
43697cb0973da1 Vineet Gupta 2013-01-18 239 " .word 15b,4b \n"
43697cb0973da1 Vineet Gupta 2013-01-18 240 " .previous \n"
43697cb0973da1 Vineet Gupta 2013-01-18 241 : "+r" (res), "+r"(to), "+r"(from),
43697cb0973da1 Vineet Gupta 2013-01-18 242 "=r"(tmp1), "=r"(tmp2)
43697cb0973da1 Vineet Gupta 2013-01-18 243 :
43697cb0973da1 Vineet Gupta 2013-01-18 244 : "memory");
43697cb0973da1 Vineet Gupta 2013-01-18 245 }
43697cb0973da1 Vineet Gupta 2013-01-18 246 if (orig_n / 4) {
43697cb0973da1 Vineet Gupta 2013-01-18 247 orig_n = orig_n % 4;
43697cb0973da1 Vineet Gupta 2013-01-18 248
43697cb0973da1 Vineet Gupta 2013-01-18 249 __asm__ __volatile__(
43697cb0973da1 Vineet Gupta 2013-01-18 250 "16: ld.ab %3, [%2,4] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 251 " st.ab %3, [%1,4] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 252 " sub %0,%0,4 \n"
43697cb0973da1 Vineet Gupta 2013-01-18 253 "32: ;nop \n"
43697cb0973da1 Vineet Gupta 2013-01-18 254 " .section .fixup, \"ax\" \n"
43697cb0973da1 Vineet Gupta 2013-01-18 255 " .align 4 \n"
43697cb0973da1 Vineet Gupta 2013-01-18 256 "4: j 32b \n"
43697cb0973da1 Vineet Gupta 2013-01-18 257 " .previous \n"
43697cb0973da1 Vineet Gupta 2013-01-18 258 " .section __ex_table, \"a\" \n"
43697cb0973da1 Vineet Gupta 2013-01-18 259 " .align 4 \n"
43697cb0973da1 Vineet Gupta 2013-01-18 260 " .word 16b,4b \n"
43697cb0973da1 Vineet Gupta 2013-01-18 261 " .previous \n"
43697cb0973da1 Vineet Gupta 2013-01-18 262 : "+r" (res), "+r"(to), "+r"(from), "=r"(tmp1)
43697cb0973da1 Vineet Gupta 2013-01-18 263 :
43697cb0973da1 Vineet Gupta 2013-01-18 264 : "memory");
43697cb0973da1 Vineet Gupta 2013-01-18 265 }
43697cb0973da1 Vineet Gupta 2013-01-18 266 if (orig_n / 2) {
43697cb0973da1 Vineet Gupta 2013-01-18 267 orig_n = orig_n % 2;
43697cb0973da1 Vineet Gupta 2013-01-18 268
43697cb0973da1 Vineet Gupta 2013-01-18 269 __asm__ __volatile__(
43697cb0973da1 Vineet Gupta 2013-01-18 270 "17: ldw.ab %3, [%2,2] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 271 " stw.ab %3, [%1,2] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 272 " sub %0,%0,2 \n"
43697cb0973da1 Vineet Gupta 2013-01-18 273 "33: ;nop \n"
43697cb0973da1 Vineet Gupta 2013-01-18 274 " .section .fixup, \"ax\" \n"
43697cb0973da1 Vineet Gupta 2013-01-18 275 " .align 4 \n"
43697cb0973da1 Vineet Gupta 2013-01-18 276 "4: j 33b \n"
43697cb0973da1 Vineet Gupta 2013-01-18 277 " .previous \n"
43697cb0973da1 Vineet Gupta 2013-01-18 278 " .section __ex_table, \"a\" \n"
43697cb0973da1 Vineet Gupta 2013-01-18 279 " .align 4 \n"
43697cb0973da1 Vineet Gupta 2013-01-18 280 " .word 17b,4b \n"
43697cb0973da1 Vineet Gupta 2013-01-18 281 " .previous \n"
43697cb0973da1 Vineet Gupta 2013-01-18 282 : "+r" (res), "+r"(to), "+r"(from), "=r"(tmp1)
43697cb0973da1 Vineet Gupta 2013-01-18 283 :
43697cb0973da1 Vineet Gupta 2013-01-18 284 : "memory");
43697cb0973da1 Vineet Gupta 2013-01-18 285 }
43697cb0973da1 Vineet Gupta 2013-01-18 286 if (orig_n & 1) {
43697cb0973da1 Vineet Gupta 2013-01-18 287 __asm__ __volatile__(
43697cb0973da1 Vineet Gupta 2013-01-18 288 "18: ldb.ab %3, [%2,2] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 289 " stb.ab %3, [%1,2] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 290 " sub %0,%0,1 \n"
43697cb0973da1 Vineet Gupta 2013-01-18 291 "34: ; nop \n"
43697cb0973da1 Vineet Gupta 2013-01-18 292 " .section .fixup, \"ax\" \n"
43697cb0973da1 Vineet Gupta 2013-01-18 293 " .align 4 \n"
43697cb0973da1 Vineet Gupta 2013-01-18 294 "4: j 34b \n"
43697cb0973da1 Vineet Gupta 2013-01-18 295 " .previous \n"
43697cb0973da1 Vineet Gupta 2013-01-18 296 " .section __ex_table, \"a\" \n"
43697cb0973da1 Vineet Gupta 2013-01-18 297 " .align 4 \n"
43697cb0973da1 Vineet Gupta 2013-01-18 298 " .word 18b,4b \n"
43697cb0973da1 Vineet Gupta 2013-01-18 299 " .previous \n"
43697cb0973da1 Vineet Gupta 2013-01-18 300 : "+r" (res), "+r"(to), "+r"(from), "=r"(tmp1)
43697cb0973da1 Vineet Gupta 2013-01-18 301 :
43697cb0973da1 Vineet Gupta 2013-01-18 302 : "memory");
43697cb0973da1 Vineet Gupta 2013-01-18 303 }
43697cb0973da1 Vineet Gupta 2013-01-18 304 } else { /* n is NOT constant, so laddered copy of 16x,8,4,2,1 */
43697cb0973da1 Vineet Gupta 2013-01-18 305
43697cb0973da1 Vineet Gupta 2013-01-18 306 __asm__ __volatile__(
43697cb0973da1 Vineet Gupta 2013-01-18 307 " mov %0,%3 \n"
43697cb0973da1 Vineet Gupta 2013-01-18 308 " lsr.f lp_count, %3,4 \n" /* 16x bytes */
43697cb0973da1 Vineet Gupta 2013-01-18 309 " lpnz 3f \n"
43697cb0973da1 Vineet Gupta 2013-01-18 310 "1: ld.ab %5, [%2, 4] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 311 "11: ld.ab %6, [%2, 4] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 312 "12: ld.ab %7, [%2, 4] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 313 "13: ld.ab %8, [%2, 4] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 314 " st.ab %5, [%1, 4] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 315 " st.ab %6, [%1, 4] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 316 " st.ab %7, [%1, 4] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 317 " st.ab %8, [%1, 4] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 318 " sub %0,%0,16 \n"
43697cb0973da1 Vineet Gupta 2013-01-18 319 "3: and.f %3,%3,0xf \n" /* stragglers */
43697cb0973da1 Vineet Gupta 2013-01-18 320 " bz 34f \n"
43697cb0973da1 Vineet Gupta 2013-01-18 321 " bbit0 %3,3,31f \n" /* 8 bytes left */
43697cb0973da1 Vineet Gupta 2013-01-18 322 "14: ld.ab %5, [%2,4] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 323 "15: ld.ab %6, [%2,4] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 324 " st.ab %5, [%1,4] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 325 " st.ab %6, [%1,4] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 326 " sub.f %0,%0,8 \n"
43697cb0973da1 Vineet Gupta 2013-01-18 327 "31: bbit0 %3,2,32f \n" /* 4 bytes left */
43697cb0973da1 Vineet Gupta 2013-01-18 328 "16: ld.ab %5, [%2,4] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 329 " st.ab %5, [%1,4] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 330 " sub.f %0,%0,4 \n"
43697cb0973da1 Vineet Gupta 2013-01-18 331 "32: bbit0 %3,1,33f \n" /* 2 bytes left */
43697cb0973da1 Vineet Gupta 2013-01-18 332 "17: ldw.ab %5, [%2,2] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 333 " stw.ab %5, [%1,2] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 334 " sub.f %0,%0,2 \n"
43697cb0973da1 Vineet Gupta 2013-01-18 335 "33: bbit0 %3,0,34f \n"
43697cb0973da1 Vineet Gupta 2013-01-18 336 "18: ldb.ab %5, [%2,1] \n" /* 1 byte left */
43697cb0973da1 Vineet Gupta 2013-01-18 337 " stb.ab %5, [%1,1] \n"
43697cb0973da1 Vineet Gupta 2013-01-18 338 " sub.f %0,%0,1 \n"
43697cb0973da1 Vineet Gupta 2013-01-18 339 "34: ;nop \n"
43697cb0973da1 Vineet Gupta 2013-01-18 340 " .section .fixup, \"ax\" \n"
43697cb0973da1 Vineet Gupta 2013-01-18 341 " .align 4 \n"
43697cb0973da1 Vineet Gupta 2013-01-18 342 "4: j 34b \n"
43697cb0973da1 Vineet Gupta 2013-01-18 343 " .previous \n"
43697cb0973da1 Vineet Gupta 2013-01-18 344 " .section __ex_table, \"a\" \n"
43697cb0973da1 Vineet Gupta 2013-01-18 345 " .align 4 \n"
43697cb0973da1 Vineet Gupta 2013-01-18 346 " .word 1b, 4b \n"
43697cb0973da1 Vineet Gupta 2013-01-18 347 " .word 11b,4b \n"
43697cb0973da1 Vineet Gupta 2013-01-18 348 " .word 12b,4b \n"
43697cb0973da1 Vineet Gupta 2013-01-18 349 " .word 13b,4b \n"
43697cb0973da1 Vineet Gupta 2013-01-18 350 " .word 14b,4b \n"
43697cb0973da1 Vineet Gupta 2013-01-18 351 " .word 15b,4b \n"
43697cb0973da1 Vineet Gupta 2013-01-18 352 " .word 16b,4b \n"
43697cb0973da1 Vineet Gupta 2013-01-18 353 " .word 17b,4b \n"
43697cb0973da1 Vineet Gupta 2013-01-18 354 " .word 18b,4b \n"
43697cb0973da1 Vineet Gupta 2013-01-18 355 " .previous \n"
43697cb0973da1 Vineet Gupta 2013-01-18 356 : "=r" (res), "+r"(to), "+r"(from), "+r"(n), "=r"(val),
43697cb0973da1 Vineet Gupta 2013-01-18 357 "=r"(tmp1), "=r"(tmp2), "=r"(tmp3), "=r"(tmp4)
43697cb0973da1 Vineet Gupta 2013-01-18 358 :
43697cb0973da1 Vineet Gupta 2013-01-18 359 : "lp_count", "memory");
43697cb0973da1 Vineet Gupta 2013-01-18 360 }
43697cb0973da1 Vineet Gupta 2013-01-18 361
43697cb0973da1 Vineet Gupta 2013-01-18 362 return res;
43697cb0973da1 Vineet Gupta 2013-01-18 363 }
43697cb0973da1 Vineet Gupta 2013-01-18 364
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v4 1/4] dt-bindings: pci: qcom: Add opp table
2023-08-22 15:12 ` [PATCH v4 1/4] dt-bindings: pci: qcom: Add opp table Krishna chaitanya chundru
2023-08-22 16:06 ` Konrad Dybcio
@ 2023-08-23 6:25 ` Manivannan Sadhasivam
1 sibling, 0 replies; 17+ messages in thread
From: Manivannan Sadhasivam @ 2023-08-23 6:25 UTC (permalink / raw)
To: Krishna chaitanya chundru
Cc: helgaas, linux-pci, linux-arm-msm, linux-kernel, quic_vbadigan,
quic_nitegupt, quic_skananth, quic_ramkri, quic_parass,
krzysztof.kozlowski, Andy Gross, Bjorn Andersson, Konrad Dybcio,
Bjorn Helgaas, Lorenzo Pieralisi, Krzysztof Wilczyński,
Rob Herring, Krzysztof Kozlowski, Conor Dooley,
Manivannan Sadhasivam,
open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS
On Tue, Aug 22, 2023 at 08:42:18PM +0530, Krishna chaitanya chundru wrote:
> PCIe needs to choose the appropriate performance state of RPMH power
> domain based upon the PCIe gen speed.
>
> Adding the Operating Performance Points table allows to adjust power domain
> performance state, depending on the PCIe gen speed.
>
> Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com>
Acked-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
- Mani
> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
> ---
> Documentation/devicetree/bindings/pci/qcom,pcie.yaml | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/pci/qcom,pcie.yaml b/Documentation/devicetree/bindings/pci/qcom,pcie.yaml
> index 81971be4..779339c 100644
> --- a/Documentation/devicetree/bindings/pci/qcom,pcie.yaml
> +++ b/Documentation/devicetree/bindings/pci/qcom,pcie.yaml
> @@ -121,6 +121,10 @@ properties:
> description: GPIO controlled connection to WAKE# signal
> maxItems: 1
>
> + operating-points-v2: true
> + opp-table:
> + type: object
> +
> required:
> - compatible
> - reg
> --
> 2.7.4
>
--
மணிவண்ணன் சதாசிவம்
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v4 4/4] PCI: qcom: Add OPP support for speed based performance state of RPMH
2023-08-22 15:12 ` [PATCH v4 4/4] PCI: qcom: Add OPP support for speed based performance state of RPMH Krishna chaitanya chundru
@ 2023-08-23 7:06 ` Manivannan Sadhasivam
2023-09-07 6:05 ` Krishna Chaitanya Chundru
0 siblings, 1 reply; 17+ messages in thread
From: Manivannan Sadhasivam @ 2023-08-23 7:06 UTC (permalink / raw)
To: Krishna chaitanya chundru
Cc: manivannan.sadhasivam, helgaas, linux-pci, linux-arm-msm,
linux-kernel, quic_vbadigan, quic_nitegupt, quic_skananth,
quic_ramkri, quic_parass, krzysztof.kozlowski, Andy Gross,
Bjorn Andersson, Konrad Dybcio, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring, Bjorn Helgaas
Subject should be, "PCI: qcom: Add OPP support to scale performance state of
power domain"
On Tue, Aug 22, 2023 at 08:42:21PM +0530, Krishna chaitanya chundru wrote:
> Before link training vote for the maximum performance state of RPMH
> and once link is up, vote for the performance state based upon the link
> speed.
>
Commit message should have the justification on why OPP support should be
addded, not just how you add it. The reasoning should be, "While scaling the
interconnect clocks based on PCIe link speed, it is also mandatory to scale the
power domain performance state so that the SoC can run under optimum power
conditions."
> Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com>
> ---
> drivers/pci/controller/dwc/pcie-qcom.c | 52 ++++++++++++++++++++++++++++++++++
> 1 file changed, 52 insertions(+)
>
> diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controller/dwc/pcie-qcom.c
> index 7a87a47..161fdad 100644
> --- a/drivers/pci/controller/dwc/pcie-qcom.c
> +++ b/drivers/pci/controller/dwc/pcie-qcom.c
> @@ -22,6 +22,7 @@
> #include <linux/of_device.h>
> #include <linux/of_gpio.h>
> #include <linux/pci.h>
> +#include <linux/pm_opp.h>
> #include <linux/pm_runtime.h>
> #include <linux/platform_device.h>
> #include <linux/phy/pcie.h>
> @@ -1357,6 +1358,33 @@ static int qcom_pcie_icc_init(struct qcom_pcie *pcie)
> return 0;
> }
>
> +static void qcom_pcie_opp_update(struct qcom_pcie *pcie)
> +{
> + struct dw_pcie *pci = pcie->pci;
> + struct dev_pm_opp *opp;
> + u32 offset, status;
> + int speed, ret = 0;
> +
> + offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP);
> + status = readw(pci->dbi_base + offset + PCI_EXP_LNKSTA);
> +
> + /* Only update constraints if link is up. */
> + if (!(status & PCI_EXP_LNKSTA_DLLLA))
> + return;
> +
> + speed = FIELD_GET(PCI_EXP_LNKSTA_CLS, status);
> +
Since icc_update() also queries link status register, this could be moved inside
icc_update() to avoid code duplication and probably the function con be renamed
to "qcom_pcie_icc_opp_update()".
> + opp = dev_pm_opp_find_level_exact(pci->dev, speed);
> + if (!IS_ERR(opp)) {
As we decided for pcie-qcom-ep, let's return error from _update() function if
icc paths/opp support were specified in DT.
Use a separate patch for returning error from existing qcom_pcie_icc_update()
function and add opp support on top.
> + ret = dev_pm_opp_set_opp(pci->dev, opp);
> + if (ret)
> + dev_err(pci->dev, "Failed to set opp: level %d ret %d\n",
> + dev_pm_opp_get_level(opp), ret);
> + dev_pm_opp_put(opp);
> + }
> +
> +}
> +
> static void qcom_pcie_icc_update(struct qcom_pcie *pcie)
> {
> struct dw_pcie *pci = pcie->pci;
> @@ -1439,8 +1467,10 @@ static void qcom_pcie_init_debugfs(struct qcom_pcie *pcie)
> static int qcom_pcie_probe(struct platform_device *pdev)
> {
> const struct qcom_pcie_cfg *pcie_cfg;
> + unsigned long max_level = INT_MAX;
> struct device *dev = &pdev->dev;
> struct qcom_pcie *pcie;
> + struct dev_pm_opp *opp;
> struct dw_pcie_rp *pp;
> struct resource *res;
> struct dw_pcie *pci;
> @@ -1511,6 +1541,23 @@ static int qcom_pcie_probe(struct platform_device *pdev)
> if (ret)
> goto err_pm_runtime_put;
>
> + /* OPP table is optional */
> + ret = devm_pm_opp_of_add_table(dev);
> + if (ret && ret != -ENODEV) {
> + dev_err(dev, "Invalid OPP table in Device tree\n");
"Failed to add OPP table"
Also, use dev_err_probe() here and below.
> + goto err_pm_runtime_put;
> + }
> +
> + /* vote for max level in the opp table */
> + opp = dev_pm_opp_find_level_floor(dev, &max_level);
Use a bool flag to check whether opp support is present or not and use that to
decide calling these APIs.
> + if (!IS_ERR(opp)) {
> + ret = dev_pm_opp_set_opp(dev, opp);
> + if (ret)
> + dev_err(pci->dev, "Failed to set opp: level %d ret %d\n",
> + dev_pm_opp_get_level(opp), ret);
> + dev_pm_opp_put(opp);
> + }
> +
> ret = pcie->cfg->ops->get_resources(pcie);
> if (ret)
> goto err_pm_runtime_put;
> @@ -1531,6 +1578,8 @@ static int qcom_pcie_probe(struct platform_device *pdev)
>
> qcom_pcie_icc_update(pcie);
>
> + qcom_pcie_opp_update(pcie);
> +
> if (pcie->mhi)
> qcom_pcie_init_debugfs(pcie);
>
> @@ -1577,6 +1626,7 @@ static int qcom_pcie_suspend_noirq(struct device *dev)
> */
> if (!dw_pcie_link_up(pcie->pci)) {
> qcom_pcie_host_deinit(&pcie->pci->pp);
> + dev_pm_opp_set_opp(dev, NULL);
This will print error when OPP table was not specified in DT. So use the flag as
I suggested above.
- Mani
> pcie->suspended = true;
> }
>
> @@ -1593,6 +1643,8 @@ static int qcom_pcie_resume_noirq(struct device *dev)
> if (ret)
> return ret;
>
> + qcom_pcie_opp_update(pcie);
> +
> pcie->suspended = false;
> }
>
> --
> 2.7.4
>
--
மணிவண்ணன் சதாசிவம்
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v4 1/4] dt-bindings: pci: qcom: Add opp table
2023-08-22 16:06 ` Konrad Dybcio
@ 2023-09-07 6:01 ` Krishna Chaitanya Chundru
0 siblings, 0 replies; 17+ messages in thread
From: Krishna Chaitanya Chundru @ 2023-09-07 6:01 UTC (permalink / raw)
To: Konrad Dybcio, manivannan.sadhasivam
Cc: helgaas, linux-pci, linux-arm-msm, linux-kernel, quic_vbadigan,
quic_nitegupt, quic_skananth, quic_ramkri, quic_parass,
krzysztof.kozlowski, Andy Gross, Bjorn Andersson, Bjorn Helgaas,
Lorenzo Pieralisi, Krzysztof Wilczyński, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Manivannan Sadhasivam,
open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS
On 8/22/2023 9:36 PM, Konrad Dybcio wrote:
> On 22.08.2023 17:12, Krishna chaitanya chundru wrote:
>> PCIe needs to choose the appropriate performance state of RPMH power
>> domain based upon the PCIe gen speed.
>>
>> Adding the Operating Performance Points table allows to adjust power domain
>> performance state, depending on the PCIe gen speed.
>>
>> Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com>
>> Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
>> ---
> I only got patches 1, 2 and 4 of this series.
>
> Please consider using the b4 tool [1], which takes care of
> all of the sending shenanigans for you.
>
> Konrad
>
> [1] https://b4.docs.kernel.org/en/latest/index.html
Sorry, for late reply I have taken care of this in next patch series.
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level
2023-08-23 1:05 ` Pavan Kondeti
@ 2023-09-07 6:04 ` Krishna Chaitanya Chundru
0 siblings, 0 replies; 17+ messages in thread
From: Krishna Chaitanya Chundru @ 2023-09-07 6:04 UTC (permalink / raw)
To: Pavan Kondeti
Cc: manivannan.sadhasivam, helgaas, linux-pci, linux-arm-msm,
linux-kernel, quic_vbadigan, quic_nitegupt, quic_skananth,
quic_ramkri, quic_parass, krzysztof.kozlowski, Viresh Kumar,
Nishanth Menon, Stephen Boyd, Rafael J. Wysocki,
open list:OPERATING PERFORMANCE POINTS (OPP)
On 8/23/2023 6:35 AM, Pavan Kondeti wrote:
> On Tue, Aug 22, 2023 at 08:42:20PM +0530, Krishna chaitanya chundru wrote:
>> Add dev_pm_opp_find_level_floor() for searching a lesser match or
>> operating on OPP in the order of decreasing level.
>>
> "OPP: Add api to retrieve opps which is at most the provided level". Pls
> change this to "opp: Add dev_pm_opp_find_level_floor()". The API name
> conveys the message.
>
> In the description, you can give a use case. i.e voting for the max
> level during initialization of a driver.
>
Done
>> Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com>
>> ---
>> drivers/opp/core.c | 26 ++++++++++++++++++++++++++
>> include/linux/pm_opp.h | 4 ++++
>> 2 files changed, 30 insertions(+)
>>
>> diff --git a/drivers/opp/core.c b/drivers/opp/core.c
>> index 954c948..e668cf2 100644
>> --- a/drivers/opp/core.c
>> +++ b/drivers/opp/core.c
>> @@ -727,6 +727,32 @@ struct dev_pm_opp *dev_pm_opp_find_level_ceil(struct device *dev,
>> }
>> EXPORT_SYMBOL_GPL(dev_pm_opp_find_level_ceil);
>>
>> +
>> +/**
>> + * dev_pm_opp_find_level_floor() - Search for a rounded floor freq
>> + * @dev: device for which we do this operation
>> + * @freq: Start level
>> + *
> %s/freq/level
>
> Run make W=1 so that kerneldoc is tested.
Done
>> + * Search for the matching floor *available* OPP from a starting level
>> + * for a device.
>> + *
>> + * Return: matching *opp and refreshes *level accordingly, else returns
>> + * ERR_PTR in case of error and should be handled using IS_ERR. Error return
>> + * values can be:
> What do you mean by refresh here?
Level argument will be updated by this API with the opp level being
returned here,
I was trying to use same terminology used in other API's
>> + * EINVAL: for bad pointer
>> + * ERANGE: no match found for search
>> + * ENODEV: if device not found in list of registered devices
>> + *
>> + * The callers are required to call dev_pm_opp_put() for the returned OPP after
>> + * use.
>> + */
>> +struct dev_pm_opp *dev_pm_opp_find_level_floor(struct device *dev,
>> + unsigned long *level)
>> +{
>> + return _find_key_floor(dev, level, 0, true, _read_level, NULL);
>> +}
>> +EXPORT_SYMBOL_GPL(dev_pm_opp_find_level_floor);
>> +
>> /**
>> * dev_pm_opp_find_bw_ceil() - Search for a rounded ceil bandwidth
>> * @dev: device for which we do this operation
>> diff --git a/include/linux/pm_opp.h b/include/linux/pm_opp.h
>> index dc1fb58..a3bc386 100644
>> --- a/include/linux/pm_opp.h
>> +++ b/include/linux/pm_opp.h
>> @@ -128,6 +128,8 @@ struct dev_pm_opp *dev_pm_opp_find_level_exact(struct device *dev,
>> unsigned int level);
>> struct dev_pm_opp *dev_pm_opp_find_level_ceil(struct device *dev,
>> unsigned int *level);
>> +struct dev_pm_opp *dev_pm_opp_find_level_floor(struct device *dev,
>> + unsigned long *level);
>>
>> struct dev_pm_opp *dev_pm_opp_find_freq_ceil(struct device *dev,
>> unsigned long *freq);
>> @@ -285,6 +287,8 @@ static inline struct dev_pm_opp *dev_pm_opp_find_bw_ceil(struct device *dev,
>>
>> static inline struct dev_pm_opp *dev_pm_opp_find_bw_floor(struct device *dev,
>> unsigned int *bw, int index)
>> +static inline struct dev_pm_opp *dev_pm_opp_find_level_floor(struct device *dev,
>> + unsigned long *level)
>> {
>> return ERR_PTR(-EOPNOTSUPP);
>> }
>>
> Please run ./scripts/checkpatch.pl --strict <your patch> and fix the
> indentation warnings from this patch.
>
> Thanks,
> Pavan
Done
- KC
^ permalink raw reply [flat|nested] 17+ messages in thread
* Re: [PATCH v4 4/4] PCI: qcom: Add OPP support for speed based performance state of RPMH
2023-08-23 7:06 ` Manivannan Sadhasivam
@ 2023-09-07 6:05 ` Krishna Chaitanya Chundru
0 siblings, 0 replies; 17+ messages in thread
From: Krishna Chaitanya Chundru @ 2023-09-07 6:05 UTC (permalink / raw)
To: Manivannan Sadhasivam
Cc: manivannan.sadhasivam, helgaas, linux-pci, linux-arm-msm,
linux-kernel, quic_vbadigan, quic_nitegupt, quic_skananth,
quic_ramkri, quic_parass, krzysztof.kozlowski, Andy Gross,
Bjorn Andersson, Konrad Dybcio, Lorenzo Pieralisi,
Krzysztof Wilczyński, Rob Herring, Bjorn Helgaas
On 8/23/2023 12:36 PM, Manivannan Sadhasivam wrote:
> Subject should be, "PCI: qcom: Add OPP support to scale performance state of
> power domain"
>
> On Tue, Aug 22, 2023 at 08:42:21PM +0530, Krishna chaitanya chundru wrote:
>> Before link training vote for the maximum performance state of RPMH
>> and once link is up, vote for the performance state based upon the link
>> speed.
>>
> Commit message should have the justification on why OPP support should be
> addded, not just how you add it. The reasoning should be, "While scaling the
> interconnect clocks based on PCIe link speed, it is also mandatory to scale the
> power domain performance state so that the SoC can run under optimum power
> conditions."
done
>> Signed-off-by: Krishna chaitanya chundru <quic_krichai@quicinc.com>
>> ---
>> drivers/pci/controller/dwc/pcie-qcom.c | 52 ++++++++++++++++++++++++++++++++++
>> 1 file changed, 52 insertions(+)
>>
>> diff --git a/drivers/pci/controller/dwc/pcie-qcom.c b/drivers/pci/controller/dwc/pcie-qcom.c
>> index 7a87a47..161fdad 100644
>> --- a/drivers/pci/controller/dwc/pcie-qcom.c
>> +++ b/drivers/pci/controller/dwc/pcie-qcom.c
>> @@ -22,6 +22,7 @@
>> #include <linux/of_device.h>
>> #include <linux/of_gpio.h>
>> #include <linux/pci.h>
>> +#include <linux/pm_opp.h>
>> #include <linux/pm_runtime.h>
>> #include <linux/platform_device.h>
>> #include <linux/phy/pcie.h>
>> @@ -1357,6 +1358,33 @@ static int qcom_pcie_icc_init(struct qcom_pcie *pcie)
>> return 0;
>> }
>>
>> +static void qcom_pcie_opp_update(struct qcom_pcie *pcie)
>> +{
>> + struct dw_pcie *pci = pcie->pci;
>> + struct dev_pm_opp *opp;
>> + u32 offset, status;
>> + int speed, ret = 0;
>> +
>> + offset = dw_pcie_find_capability(pci, PCI_CAP_ID_EXP);
>> + status = readw(pci->dbi_base + offset + PCI_EXP_LNKSTA);
>> +
>> + /* Only update constraints if link is up. */
>> + if (!(status & PCI_EXP_LNKSTA_DLLLA))
>> + return;
>> +
>> + speed = FIELD_GET(PCI_EXP_LNKSTA_CLS, status);
>> +
> Since icc_update() also queries link status register, this could be moved inside
> icc_update() to avoid code duplication and probably the function con be renamed
> to "qcom_pcie_icc_opp_update()".
done
>> + opp = dev_pm_opp_find_level_exact(pci->dev, speed);
>> + if (!IS_ERR(opp)) {
> As we decided for pcie-qcom-ep, let's return error from _update() function if
> icc paths/opp support were specified in DT.
>
> Use a separate patch for returning error from existing qcom_pcie_icc_update()
> function and add opp support on top.
done
>> + ret = dev_pm_opp_set_opp(pci->dev, opp);
>> + if (ret)
>> + dev_err(pci->dev, "Failed to set opp: level %d ret %d\n",
>> + dev_pm_opp_get_level(opp), ret);
>> + dev_pm_opp_put(opp);
>> + }
>> +
>> +}
>> +
>> static void qcom_pcie_icc_update(struct qcom_pcie *pcie)
>> {
>> struct dw_pcie *pci = pcie->pci;
>> @@ -1439,8 +1467,10 @@ static void qcom_pcie_init_debugfs(struct qcom_pcie *pcie)
>> static int qcom_pcie_probe(struct platform_device *pdev)
>> {
>> const struct qcom_pcie_cfg *pcie_cfg;
>> + unsigned long max_level = INT_MAX;
>> struct device *dev = &pdev->dev;
>> struct qcom_pcie *pcie;
>> + struct dev_pm_opp *opp;
>> struct dw_pcie_rp *pp;
>> struct resource *res;
>> struct dw_pcie *pci;
>> @@ -1511,6 +1541,23 @@ static int qcom_pcie_probe(struct platform_device *pdev)
>> if (ret)
>> goto err_pm_runtime_put;
>>
>> + /* OPP table is optional */
>> + ret = devm_pm_opp_of_add_table(dev);
>> + if (ret && ret != -ENODEV) {
>> + dev_err(dev, "Invalid OPP table in Device tree\n");
> "Failed to add OPP table"
>
> Also, use dev_err_probe() here and below.
>
>> + goto err_pm_runtime_put;
>> + }
>> +
>> + /* vote for max level in the opp table */
>> + opp = dev_pm_opp_find_level_floor(dev, &max_level);
> Use a bool flag to check whether opp support is present or not and use that to
> decide calling these APIs.
done
>> + if (!IS_ERR(opp)) {
>> + ret = dev_pm_opp_set_opp(dev, opp);
>> + if (ret)
>> + dev_err(pci->dev, "Failed to set opp: level %d ret %d\n",
>> + dev_pm_opp_get_level(opp), ret);
>> + dev_pm_opp_put(opp);
>> + }
>> +
>> ret = pcie->cfg->ops->get_resources(pcie);
>> if (ret)
>> goto err_pm_runtime_put;
>> @@ -1531,6 +1578,8 @@ static int qcom_pcie_probe(struct platform_device *pdev)
>>
>> qcom_pcie_icc_update(pcie);
>>
>> + qcom_pcie_opp_update(pcie);
>> +
>> if (pcie->mhi)
>> qcom_pcie_init_debugfs(pcie);
>>
>> @@ -1577,6 +1626,7 @@ static int qcom_pcie_suspend_noirq(struct device *dev)
>> */
>> if (!dw_pcie_link_up(pcie->pci)) {
>> qcom_pcie_host_deinit(&pcie->pci->pp);
>> + dev_pm_opp_set_opp(dev, NULL);
> This will print error when OPP table was not specified in DT. So use the flag as
> I suggested above.
>
> - Mani
done
- KC
>> pcie->suspended = true;
>> }
>>
>> @@ -1593,6 +1643,8 @@ static int qcom_pcie_resume_noirq(struct device *dev)
>> if (ret)
>> return ret;
>>
>> + qcom_pcie_opp_update(pcie);
>> +
>> pcie->suspended = false;
>> }
>>
>> --
>> 2.7.4
>>
^ permalink raw reply [flat|nested] 17+ messages in thread
end of thread, other threads:[~2023-09-07 17:57 UTC | newest]
Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-08-22 15:12 [PATCH v4 0/4] PCI: qcom: Add support for OPP Krishna chaitanya chundru
2023-08-22 15:12 ` [PATCH v4 1/4] dt-bindings: pci: qcom: Add opp table Krishna chaitanya chundru
2023-08-22 16:06 ` Konrad Dybcio
2023-09-07 6:01 ` Krishna Chaitanya Chundru
2023-08-23 6:25 ` Manivannan Sadhasivam
2023-08-22 15:12 ` [PATCH v4 2/4] arm64: dts: qcom: sm8450: Add opp table support to PCIe Krishna chaitanya chundru
2023-08-22 15:12 ` [PATCH v4 3/4] OPP: Add api to retrieve opps which is at most the provided level Krishna chaitanya chundru
2023-08-22 21:33 ` kernel test robot
2023-08-22 23:10 ` kernel test robot
2023-08-22 23:42 ` kernel test robot
2023-08-23 0:48 ` kernel test robot
2023-08-23 1:05 ` Pavan Kondeti
2023-09-07 6:04 ` Krishna Chaitanya Chundru
2023-08-23 1:13 ` kernel test robot
2023-08-22 15:12 ` [PATCH v4 4/4] PCI: qcom: Add OPP support for speed based performance state of RPMH Krishna chaitanya chundru
2023-08-23 7:06 ` Manivannan Sadhasivam
2023-09-07 6:05 ` Krishna Chaitanya Chundru
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox