Message ID | 20230731174613.4133167-2-davidai@google.com (mailing list archive) |
---|---|
State | RFC, archived |
Headers | show |
Series | Improve VM CPUfreq and task placement behavior | expand |
On Mon, 31 Jul 2023 10:46:08 -0700, David Dai wrote: > Adding bindings to represent a virtual cpufreq device. > > Virtual machines may expose MMIO regions for a virtual cpufreq device for > guests to read frequency information or to request frequency selection. The > virtual cpufreq device has an individual controller for each CPU. > > Co-developed-by: Saravana Kannan <saravanak@google.com> > Signed-off-by: Saravana Kannan <saravanak@google.com> > Signed-off-by: David Dai <davidai@google.com> > --- > .../bindings/cpufreq/cpufreq-virtual.yaml | 89 +++++++++++++++++++ > 1 file changed, 89 insertions(+) > create mode 100644 Documentation/devicetree/bindings/cpufreq/cpufreq-virtual.yaml > My bot found errors running 'make DT_CHECKER_FLAGS=-m dt_binding_check' on your patch (DT_CHECKER_FLAGS is new in v5.13): yamllint warnings/errors: dtschema/dtc warnings/errors: Traceback (most recent call last): File "/usr/local/lib/python3.10/dist-packages/jsonschema/validators.py", line 909, in resolve_from_url document = self.store[url] File "/usr/local/lib/python3.10/dist-packages/jsonschema/_utils.py", line 28, in __getitem__ return self.store[self.normalize(uri)] KeyError: 'http://devicetree.org/meta-schemas/core.yamll' During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/lib/python3.10/dist-packages/jsonschema/validators.py", line 912, in resolve_from_url document = self.resolve_remote(url) File "/usr/local/lib/python3.10/dist-packages/jsonschema/validators.py", line 1011, in resolve_remote result = self.handlers[scheme](uri) File "/usr/local/lib/python3.10/dist-packages/dtschema/schema.py", line 91, in http_handler raise RefResolutionError('Error in referenced schema matching $id: ' + uri) jsonschema.exceptions.RefResolutionError: Error in referenced schema matching $id: http://devicetree.org/meta-schemas/core.yamll During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/usr/local/bin/dt-doc-validate", line 64, in <module> ret |= check_doc(f) File "/usr/local/bin/dt-doc-validate", line 32, in check_doc for error in sorted(dtsch.iter_errors(), key=lambda e: e.linecol): File "/usr/local/lib/python3.10/dist-packages/dtschema/schema.py", line 130, in iter_errors meta_schema = self.resolver.resolve_from_url(self['$schema']) File "/usr/local/lib/python3.10/dist-packages/jsonschema/validators.py", line 914, in resolve_from_url raise exceptions.RefResolutionError(exc) jsonschema.exceptions.RefResolutionError: Error in referenced schema matching $id: http://devicetree.org/meta-schemas/core.yamll Documentation/devicetree/bindings/cpufreq/cpufreq-virtual.example.dts:69.19-72.13: Warning (unit_address_vs_reg): /example-0/soc/cpufreq: node has a reg or ranges property, but no unit name Documentation/devicetree/bindings/cpufreq/cpufreq-virtual.example.dtb: /example-0/cpus/cpu@0: failed to match any schema with compatible: ['arm,arm-v8'] Documentation/devicetree/bindings/cpufreq/cpufreq-virtual.example.dtb: /example-0/cpus/cpu@1: failed to match any schema with compatible: ['arm,arm-v8'] doc reference errors (make refcheckdocs): See https://patchwork.ozlabs.org/project/devicetree-bindings/patch/20230731174613.4133167-2-davidai@google.com The base for the series is generally the latest rc1. A different dependency should be noted in *this* patch. If you already ran 'make dt_binding_check' and didn't see the above error(s), then make sure 'yamllint' is installed and dt-schema is up to date: pip3 install dtschema --upgrade Please check and re-submit after running the above command yourself. Note that DT_SCHEMA_FILES can be set to your schema file to speed up checking your schema. However, it must be unset to test all examples with your schema.
On 31/07/2023 19:46, David Dai wrote: > Adding bindings to represent a virtual cpufreq device. > > Virtual machines may expose MMIO regions for a virtual cpufreq device for > guests to read frequency information or to request frequency selection. The > virtual cpufreq device has an individual controller for each CPU. A nit, subject: drop second/last, redundant "bindings for". The "dt-bindings" prefix is already stating that these are bindings. > > Co-developed-by: Saravana Kannan <saravanak@google.com> > Signed-off-by: Saravana Kannan <saravanak@google.com> > Signed-off-by: David Dai <davidai@google.com> > --- > .../bindings/cpufreq/cpufreq-virtual.yaml | 89 +++++++++++++++++++ > 1 file changed, 89 insertions(+) > create mode 100644 Documentation/devicetree/bindings/cpufreq/cpufreq-virtual.yaml > > diff --git a/Documentation/devicetree/bindings/cpufreq/cpufreq-virtual.yaml b/Documentation/devicetree/bindings/cpufreq/cpufreq-virtual.yaml > new file mode 100644 > index 000000000000..f377cfc972ca > --- /dev/null > +++ b/Documentation/devicetree/bindings/cpufreq/cpufreq-virtual.yaml > @@ -0,0 +1,89 @@ > +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/cpufreq/cpufreq-virtual.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yamll# > + > +title: Virtual CPUFreq > + > +maintainers: > + - David Dai <davidai@google.com> > + - Saravana Kannan <saravanak@google.com> > + > +description: > + Virtual CPUFreq is a virtualized driver in guest kernels that sends frequency > + selection of its vCPUs as a hint to the host through MMIO regions. The host > + uses the hint to schedule vCPU threads and select physical CPU frequency. It > + enables accurate Per-Entity Load Tracking for tasks running in the guest by > + querying host CPU frequency unless a virtualized FIE (ex. AMU) exists. Why do you need DT for this? You control hypervisor, thus control the interface to the guest. I think Rob made it pretty clear that discoverable usecases (which is yours) are not for DT. Incomplete style-review follows: > + > +properties: > + compatible: > + const: virtual,cpufreq Missing blank line. > + reg: > + maxItems: 1 > + > +required: > + - compatible > + - reg > + > +additionalProperties: false > + > +examples: > + - | > + cpus { > + #address-cells = <1>; > + #size-cells = <0>; > + > + cpu@0 { > + compatible = "arm,arm-v8"; > + device_type = "cpu"; > + reg = <0x0>; > + operating-points-v2 = <&opp_table0>; > + }; > + > + cpu@1 { > + compatible = "arm,arm-v8"; > + device_type = "cpu"; > + reg = <0x0>; > + operating-points-v2 = <&opp_table1>; > + }; > + }; > + > + opp_table0: opp-table-0 { > + compatible = "operating-points-v2"; > + > + opp1098000000 { > + opp-hz = /bits/ 64 <1098000000>; > + opp-level = <1>; > + }; > + > + opp1197000000 { > + opp-hz = /bits/ 64 <1197000000>; > + opp-level = <2>; > + }; > + }; > + > + opp_table1: opp-table-1 { > + compatible = "operating-points-v2"; > + > + opp1106000000 { > + opp-hz = /bits/ 64 <1106000000>; > + opp-level = <1>; > + }; > + > + opp1277000000 { > + opp-hz = /bits/ 64 <1277000000>; > + opp-level = <2>; > + }; > + }; > + > + soc { > + #address-cells = <1>; > + #size-cells = <1>; > + > + cpufreq { Missing unit address > + reg = <0x1040000 0x10>; > + compatible = "virtual,cpufreq"; compatible is always the first property. Also, you did not test it... Best regards, Krzysztof
On Sat, Aug 5, 2023 at 12:38 PM Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> wrote: > > On 31/07/2023 19:46, David Dai wrote: > > Adding bindings to represent a virtual cpufreq device. > > > > Virtual machines may expose MMIO regions for a virtual cpufreq device for > > guests to read frequency information or to request frequency selection. The > > virtual cpufreq device has an individual controller for each CPU. > > A nit, subject: drop second/last, redundant "bindings for". The > "dt-bindings" prefix is already stating that these are bindings. > > > > > Co-developed-by: Saravana Kannan <saravanak@google.com> > > Signed-off-by: Saravana Kannan <saravanak@google.com> > > Signed-off-by: David Dai <davidai@google.com> > > --- > > .../bindings/cpufreq/cpufreq-virtual.yaml | 89 +++++++++++++++++++ > > 1 file changed, 89 insertions(+) > > create mode 100644 Documentation/devicetree/bindings/cpufreq/cpufreq-virtual.yaml > > > > diff --git a/Documentation/devicetree/bindings/cpufreq/cpufreq-virtual.yaml b/Documentation/devicetree/bindings/cpufreq/cpufreq-virtual.yaml > > new file mode 100644 > > index 000000000000..f377cfc972ca > > --- /dev/null > > +++ b/Documentation/devicetree/bindings/cpufreq/cpufreq-virtual.yaml > > @@ -0,0 +1,89 @@ > > +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause > > +%YAML 1.2 > > +--- > > +$id: http://devicetree.org/schemas/cpufreq/cpufreq-virtual.yaml# > > +$schema: http://devicetree.org/meta-schemas/core.yamll# > > + > > +title: Virtual CPUFreq > > + > > +maintainers: > > + - David Dai <davidai@google.com> > > + - Saravana Kannan <saravanak@google.com> > > + > > +description: > > + Virtual CPUFreq is a virtualized driver in guest kernels that sends frequency > > + selection of its vCPUs as a hint to the host through MMIO regions. The host > > + uses the hint to schedule vCPU threads and select physical CPU frequency. It > > + enables accurate Per-Entity Load Tracking for tasks running in the guest by > > + querying host CPU frequency unless a virtualized FIE (ex. AMU) exists. > > Why do you need DT for this? You control hypervisor, thus control the > interface to the guest. I think Rob made it pretty clear that > discoverable usecases (which is yours) are not for DT. > > Incomplete style-review follows: > > > + > > +properties: > > + compatible: > > + const: virtual,cpufreq > > Missing blank line. > > > + reg: > > + maxItems: 1 > > + > > +required: > > + - compatible > > + - reg > > + > > +additionalProperties: false > > + > > +examples: > > + - | > > + cpus { > > + #address-cells = <1>; > > + #size-cells = <0>; > > + > > + cpu@0 { > > + compatible = "arm,arm-v8"; > > + device_type = "cpu"; > > + reg = <0x0>; > > + operating-points-v2 = <&opp_table0>; > > + }; > > + > > + cpu@1 { > > + compatible = "arm,arm-v8"; > > + device_type = "cpu"; > > + reg = <0x0>; > > + operating-points-v2 = <&opp_table1>; > > + }; > > + }; > > + > > + opp_table0: opp-table-0 { > > + compatible = "operating-points-v2"; > > + > > + opp1098000000 { > > + opp-hz = /bits/ 64 <1098000000>; > > + opp-level = <1>; > > + }; > > + > > + opp1197000000 { > > + opp-hz = /bits/ 64 <1197000000>; > > + opp-level = <2>; > > + }; > > + }; > > + > > + opp_table1: opp-table-1 { > > + compatible = "operating-points-v2"; > > + > > + opp1106000000 { > > + opp-hz = /bits/ 64 <1106000000>; > > + opp-level = <1>; > > + }; > > + > > + opp1277000000 { > > + opp-hz = /bits/ 64 <1277000000>; > > + opp-level = <2>; > > + }; > > + }; > > + > > + soc { > > + #address-cells = <1>; > > + #size-cells = <1>; > > + > > + cpufreq { > > Missing unit address > > > + reg = <0x1040000 0x10>; > > + compatible = "virtual,cpufreq"; > > compatible is always the first property. > > Also, you did not test it... Why do you say this? This patch series was obviously tested very well with all the data we collected. -Saravana
On 09/08/2023 01:31, Saravana Kannan wrote: >> >>> + reg = <0x1040000 0x10>; >>> + compatible = "virtual,cpufreq"; >> >> compatible is always the first property. >> >> Also, you did not test it... > > Why do you say this? This patch series was obviously tested very well > with all the data we collected. Why do I say? Because of warning and huge fat Python exception? Test it... you will see. Best regards, Krzysztof
diff --git a/Documentation/devicetree/bindings/cpufreq/cpufreq-virtual.yaml b/Documentation/devicetree/bindings/cpufreq/cpufreq-virtual.yaml new file mode 100644 index 000000000000..f377cfc972ca --- /dev/null +++ b/Documentation/devicetree/bindings/cpufreq/cpufreq-virtual.yaml @@ -0,0 +1,89 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/cpufreq/cpufreq-virtual.yaml# +$schema: http://devicetree.org/meta-schemas/core.yamll# + +title: Virtual CPUFreq + +maintainers: + - David Dai <davidai@google.com> + - Saravana Kannan <saravanak@google.com> + +description: + Virtual CPUFreq is a virtualized driver in guest kernels that sends frequency + selection of its vCPUs as a hint to the host through MMIO regions. The host + uses the hint to schedule vCPU threads and select physical CPU frequency. It + enables accurate Per-Entity Load Tracking for tasks running in the guest by + querying host CPU frequency unless a virtualized FIE (ex. AMU) exists. + +properties: + compatible: + const: virtual,cpufreq + reg: + maxItems: 1 + +required: + - compatible + - reg + +additionalProperties: false + +examples: + - | + cpus { + #address-cells = <1>; + #size-cells = <0>; + + cpu@0 { + compatible = "arm,arm-v8"; + device_type = "cpu"; + reg = <0x0>; + operating-points-v2 = <&opp_table0>; + }; + + cpu@1 { + compatible = "arm,arm-v8"; + device_type = "cpu"; + reg = <0x0>; + operating-points-v2 = <&opp_table1>; + }; + }; + + opp_table0: opp-table-0 { + compatible = "operating-points-v2"; + + opp1098000000 { + opp-hz = /bits/ 64 <1098000000>; + opp-level = <1>; + }; + + opp1197000000 { + opp-hz = /bits/ 64 <1197000000>; + opp-level = <2>; + }; + }; + + opp_table1: opp-table-1 { + compatible = "operating-points-v2"; + + opp1106000000 { + opp-hz = /bits/ 64 <1106000000>; + opp-level = <1>; + }; + + opp1277000000 { + opp-hz = /bits/ 64 <1277000000>; + opp-level = <2>; + }; + }; + + soc { + #address-cells = <1>; + #size-cells = <1>; + + cpufreq { + reg = <0x1040000 0x10>; + compatible = "virtual,cpufreq"; + }; + };