From: Thomas Monjalon <thomas@monjalon.net>
To: Wathsala Vithanage <wathsala.vithanage@arm.com>
Cc: Tyler Retzlaff <roretzla@linux.microsoft.com>,
Ruifeng Wang <ruifeng.wang@arm.com>,
dev@dpdk.org, nd@arm.com, Dhruv Tripathi <dhruv.tripathi@arm.com>,
Honnappa Nagarahalli <honnappa.nagarahalli@arm.com>,
Jack Bond-Preston <jack.bond-preston@foss.arm.com>,
Nick Connolly <nick.connolly@arm.com>,
Vinod Krishna <vinod.krishna@arm.com>,
david.marchand@redhat.com
Subject: Re: [PATCH v2 2/2] eal: add Arm WFET in power management intrinsics
Date: Thu, 27 Jun 2024 17:30:37 +0200 [thread overview]
Message-ID: <6442594.6TB3vktIsb@thomas> (raw)
In-Reply-To: <20240619064529.619526-2-wathsala.vithanage@arm.com>
19/06/2024 08:45, Wathsala Vithanage:
> --- a/lib/eal/arm/include/rte_cpuflags_64.h
> +++ b/lib/eal/arm/include/rte_cpuflags_64.h
> @@ -36,6 +36,7 @@ enum rte_cpu_flag_t {
> RTE_CPUFLAG_SVEF64MM,
> RTE_CPUFLAG_SVEBF16,
> RTE_CPUFLAG_AARCH64,
> + RTE_CPUFLAG_WFXT,
> };
It may be useful to add comments explaining each flag.
May be a separate patch in this series?
> - * Copyright(c) 2019 Arm Limited
> + * Copyright(c) 2024 Arm Limited
No, it's wrong to remove initial date,
and no, you don't need to update dates at all.
> -#ifdef RTE_WAIT_UNTIL_EQUAL_ARCH_DEFINED
Why removing this #ifdef?
> -/* Send a local event to quit WFE. */
> +/* Send a local event to quit WFE/WFxT. */
> #define __RTE_ARM_SEVL() { asm volatile("sevl" : : : "memory"); }
>
> -/* Send a global event to quit WFE for all cores. */
> +/* Send a global event to quit WFE/WFxT for all cores. */
> #define __RTE_ARM_SEV() { asm volatile("sev" : : : "memory"); }
>
> /* Put processor into low power WFE(Wait For Event) state. */
> #define __RTE_ARM_WFE() { asm volatile("wfe" : : : "memory"); }
>
> +/* Put processor into low power WFET (WFE with Timeout) state. */
> +#ifdef RTE_ARM_FEATURE_WFXT
> +#define __RTE_ARM_WFET(t) { \
> + asm volatile("wfet %x[to]" \
> + : \
> + : [to] "r" (t) \
> + : "memory"); \
> + }
Is there any intrinsic function available?
[...]
> --- a/lib/eal/arm/rte_cpuflags.c
> +++ b/lib/eal/arm/rte_cpuflags.c
> @@ -115,6 +115,7 @@ const struct feature_entry rte_cpu_feature_table[] = {
> FEAT_DEF(SVEF32MM, REG_HWCAP2, 10)
> FEAT_DEF(SVEF64MM, REG_HWCAP2, 11)
> FEAT_DEF(SVEBF16, REG_HWCAP2, 12)
> + FEAT_DEF(WFXT, REG_HWCAP2, 31)
> FEAT_DEF(AARCH64, REG_PLATFORM, 0)
Are you sure of alignment? (looks wrong in my email client)
[...]
> rte_cpu_get_intrinsics_support(struct rte_cpu_intrinsics *intrinsics)
> {
> memset(intrinsics, 0, sizeof(*intrinsics));
> -#ifdef RTE_ARM_USE_WFE
> intrinsics->power_monitor = 1;
> -#endif
Why removing this #ifdef?
> +uint8_t wfet_en;
It should be made static probably.
This variable will be unused in some cases, needs #ifdef.
> +
> +RTE_INIT(rte_power_intrinsics_init)
> +{
> +#ifdef RTE_ARCH_64
> + if (rte_cpu_get_flag_enabled(RTE_CPUFLAG_WFXT))
> + wfet_en = 1;
> +#endif
> +}
> +
> +/**
> + * This function uses WFE/WFET instruction to make lcore suspend
> * execution on ARM.
> - * Note that timestamp based timeout is not supported yet.
> */
> int
> rte_power_monitor(const struct rte_power_monitor_cond *pmc,
> const uint64_t tsc_timestamp)
> {
> - RTE_SET_USED(tsc_timestamp);
> -
> -#ifdef RTE_ARM_USE_WFE
> +#ifdef RTE_ARCH_64
It looks wrong.
If RTE_ARM_USE_WFE is disabled, you should not call __RTE_ARM_WFE().
> const unsigned int lcore_id = rte_lcore_id();
> uint64_t cur_value;
>
> @@ -33,28 +44,30 @@ rte_power_monitor(const struct rte_power_monitor_cond *pmc,
>
> switch (pmc->size) {
> case sizeof(uint8_t):
> - __RTE_ARM_LOAD_EXC_8(pmc->addr, cur_value, rte_memory_order_relaxed)
> - __RTE_ARM_WFE()
> + __RTE_ARM_LOAD_EXC_8(pmc->addr, cur_value, rte_memory_order_relaxed);
next prev parent reply other threads:[~2024-06-27 15:30 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-04 4:44 [PATCH 1/2] config/arm: adds Arm Neoverse N3 SoC Wathsala Vithanage
2024-06-04 4:44 ` [PATCH 2/2] eal: add Arm WFET in power management intrinsics Wathsala Vithanage
2024-06-04 15:41 ` Stephen Hemminger
2024-06-19 6:45 ` [PATCH v2 1/2] config/arm: adds Arm Neoverse N3 SoC Wathsala Vithanage
2024-06-19 6:45 ` [PATCH v2 2/2] eal: add Arm WFET in power management intrinsics Wathsala Vithanage
2024-06-27 15:30 ` Thomas Monjalon [this message]
2024-07-01 21:34 ` Wathsala Wathawana Vithanage
2024-07-02 8:29 ` Thomas Monjalon
2024-07-03 13:27 ` Wathsala Wathawana Vithanage
2024-07-03 13:33 ` Thomas Monjalon
2024-07-03 16:58 ` Wathsala Wathawana Vithanage
2024-07-04 10:55 ` Pavan Nikhilesh Bhagavatula
2024-07-04 14:14 ` Thomas Monjalon
2024-07-04 14:55 ` Stephen Hemminger
2024-07-04 18:59 ` Thomas Monjalon
2024-07-05 16:10 ` [EXTERNAL] " Pavan Nikhilesh Bhagavatula
2024-07-07 17:37 ` [EXTERNAL] " Honnappa Nagarahalli
2024-07-05 16:01 ` Wathsala Wathawana Vithanage
2024-07-05 16:11 ` Pavan Nikhilesh Bhagavatula
2024-07-05 16:25 ` Wathsala Wathawana Vithanage
2024-07-03 16:19 ` Wathsala Wathawana Vithanage
2024-07-15 22:53 ` [PATCH v3 1/4] eal: expand the availability of WFE and related instructions Wathsala Vithanage
2024-07-15 22:53 ` [PATCH v3 2/4] config/arm: adds Arm Neoverse N3 SoC Wathsala Vithanage
2024-07-16 1:52 ` Honnappa Nagarahalli
2024-07-15 22:53 ` [PATCH v3 3/4] eal: add Arm WFET in power management intrinsics Wathsala Vithanage
2024-07-15 22:53 ` [PATCH v3 4/4] eal: describe Arm CPU features including WFXT Wathsala Vithanage
2024-07-16 1:02 ` Honnappa Nagarahalli
2024-07-26 17:15 ` [PATCH v4 1/4] eal: expand the availability of WFE and related instructions Wathsala Vithanage
2024-07-26 17:15 ` [PATCH v4 2/4] config/arm: adds Arm Neoverse N3 SoC Wathsala Vithanage
2024-07-26 17:15 ` [PATCH v4 3/4] eal: add Arm WFET in power management intrinsics Wathsala Vithanage
2024-10-10 17:01 ` Thomas Monjalon
2024-07-26 17:15 ` [PATCH v4 4/4] eal: describe Arm CPU features including WFXT Wathsala Vithanage
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=6442594.6TB3vktIsb@thomas \
--to=thomas@monjalon.net \
--cc=david.marchand@redhat.com \
--cc=dev@dpdk.org \
--cc=dhruv.tripathi@arm.com \
--cc=honnappa.nagarahalli@arm.com \
--cc=jack.bond-preston@foss.arm.com \
--cc=nd@arm.com \
--cc=nick.connolly@arm.com \
--cc=roretzla@linux.microsoft.com \
--cc=ruifeng.wang@arm.com \
--cc=vinod.krishna@arm.com \
--cc=wathsala.vithanage@arm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).