From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <dev-bounces@dpdk.org> Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id DA333A04DF; Fri, 30 Oct 2020 11:09:51 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 11CE5C87A; Fri, 30 Oct 2020 11:09:49 +0100 (CET) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id A0932C85E for <dev@dpdk.org>; Fri, 30 Oct 2020 11:09:46 +0100 (CET) IronPort-SDR: AuijvIsfLhQMWxsKQiDEqkBJScfayb0yh6bD+0p3baQEzPk9ndBlaQ/QhH5QX3UX3+cB9zQ5Ne /JVa7Il99fdA== X-IronPort-AV: E=McAfee;i="6000,8403,9789"; a="168683074" X-IronPort-AV: E=Sophos;i="5.77,432,1596524400"; d="scan'208";a="168683074" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Oct 2020 03:09:44 -0700 IronPort-SDR: clRWbx4Y5xkSvKt+dO+f4Lia+cVplNTm1tmHSZiWpGX16aYK0+LV1B0YE1WS7LFul24OXNmcOa /BghmkRcoptg== X-IronPort-AV: E=Sophos;i="5.77,432,1596524400"; d="scan'208";a="537016004" Received: from cflatley-mobl1.ger.corp.intel.com (HELO [10.213.250.146]) ([10.213.250.146]) by orsmga005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Oct 2020 03:09:39 -0700 To: David Marchand <david.marchand@redhat.com>, Liang Ma <liang.j.ma@intel.com> Cc: dev <dev@dpdk.org>, "Ruifeng Wang (Arm Technology China)" <ruifeng.wang@arm.com>, "Wang, Haiyue" <haiyue.wang@intel.com>, Bruce Richardson <bruce.richardson@intel.com>, "Ananyev, Konstantin" <konstantin.ananyev@intel.com>, David Hunt <david.hunt@intel.com>, Jerin Jacob <jerinjacobk@gmail.com>, Neil Horman <nhorman@tuxdriver.com>, Thomas Monjalon <thomas@monjalon.net>, Timothy McDaniel <timothy.mcdaniel@intel.com>, Gage Eads <gage.eads@intel.com>, Marcin Wojtas <mw@semihalf.com>, Guy Tzalik <gtzalik@amazon.com>, Ajit Khaparde <ajit.khaparde@broadcom.com>, Harman Kalra <hkalra@marvell.com>, John Daley <johndale@cisco.com>, "Wei Hu (Xavier)" <xavier.huwei@huawei.com>, Ziyang Xuan <xuanziyang2@huawei.com>, Matan Azrad <matan@nvidia.com>, Yong Wang <yongwang@vmware.com>, Jerin Jacob <jerinj@marvell.com>, Jan Viktorin <viktorin@rehivetech.com>, David Christensen <drc@linux.vnet.ibm.com>, Ray Kinsella <mdr@ashroe.eu> References: <1603494392-7181-1-git-send-email-liang.j.ma@intel.com> <1603810749-22285-1-git-send-email-liang.j.ma@intel.com> <1603810749-22285-4-git-send-email-liang.j.ma@intel.com> <CAJFAV8zxtPFtv2K1-0tm9Rtb-FsCiG334=RQpXVYqWhkS4kTkQ@mail.gmail.com> From: "Burakov, Anatoly" <anatoly.burakov@intel.com> Message-ID: <a760da2d-2552-2a7e-e2f9-7bd9d9cee99b@intel.com> Date: Fri, 30 Oct 2020 10:09:37 +0000 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Thunderbird/68.12.0 MIME-Version: 1.0 In-Reply-To: <CAJFAV8zxtPFtv2K1-0tm9Rtb-FsCiG334=RQpXVYqWhkS4kTkQ@mail.gmail.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] [PATCH v10 3/9] eal: add intrinsics support check infrastructure X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions <dev.dpdk.org> List-Unsubscribe: <https://mails.dpdk.org/options/dev>, <mailto:dev-request@dpdk.org?subject=unsubscribe> List-Archive: <http://mails.dpdk.org/archives/dev/> List-Post: <mailto:dev@dpdk.org> List-Help: <mailto:dev-request@dpdk.org?subject=help> List-Subscribe: <https://mails.dpdk.org/listinfo/dev>, <mailto:dev-request@dpdk.org?subject=subscribe> Errors-To: dev-bounces@dpdk.org Sender: "dev" <dev-bounces@dpdk.org> On 29-Oct-20 9:27 PM, David Marchand wrote: > On Tue, Oct 27, 2020 at 4:00 PM Liang Ma <liang.j.ma@intel.com> wrote: >> >> Currently, it is not possible to check support for intrinsics that >> are platform-specific, cannot be abstracted in a generic way, or do not >> have support on all architectures. The CPUID flags can be used to some >> extent, but they are only defined for their platform, while intrinsics >> will be available to all code as they are in generic headers. >> >> This patch introduces infrastructure to check support for certain >> platform-specific intrinsics, and adds support for checking support for >> IA power management-related intrinsics for UMWAIT/UMONITOR and TPAUSE. >> >> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com> >> Signed-off-by: Liang Ma <liang.j.ma@intel.com> >> Acked-by: David Christensen <drc@linux.vnet.ibm.com> >> Acked-by: Jerin Jacob <jerinj@marvell.com> >> Acked-by: Ruifeng Wang <ruifeng.wang@arm.com> >> Acked-by: Ray Kinsella <mdr@ashroe.eu> > > Coming late to the party, it seems crowded... > > > >> diff --git a/lib/librte_eal/include/generic/rte_cpuflags.h b/lib/librte_eal/include/generic/rte_cpuflags.h >> index 872f0ebe3e..28a5aecde8 100644 >> --- a/lib/librte_eal/include/generic/rte_cpuflags.h >> +++ b/lib/librte_eal/include/generic/rte_cpuflags.h >> @@ -13,6 +13,32 @@ >> #include "rte_common.h" >> #include <errno.h> >> >> +#include <rte_compat.h> >> + >> +/** >> + * Structure used to describe platform-specific intrinsics that may or may not >> + * be supported at runtime. >> + */ >> +struct rte_cpu_intrinsics { >> + uint32_t power_monitor : 1; >> + /**< indicates support for rte_power_monitor function */ >> + uint32_t power_pause : 1; >> + /**< indicates support for rte_power_pause function */ >> +}; > > - The rte_power library is supposed to be built on top of cpuflags. > Not the other way around. > Those capabilities should have been kept inside the rte_power_ API and > not pollute the cpuflags API. > > - All of this should have come as a single patch as the previously > introduced API is unusable before. > > >> + >> +/** >> + * @warning >> + * @b EXPERIMENTAL: this API may change without prior notice >> + * >> + * Check CPU support for various intrinsics at runtime. >> + * >> + * @param intrinsics >> + * Pointer to a structure to be filled. >> + */ >> +__rte_experimental >> +void >> +rte_cpu_get_intrinsics_support(struct rte_cpu_intrinsics *intrinsics); >> + >> /** >> * Enumeration of all CPU features supported >> */ >> diff --git a/lib/librte_eal/include/generic/rte_power_intrinsics.h b/lib/librte_eal/include/generic/rte_power_intrinsics.h >> index fb897d9060..03a326f076 100644 >> --- a/lib/librte_eal/include/generic/rte_power_intrinsics.h >> +++ b/lib/librte_eal/include/generic/rte_power_intrinsics.h >> @@ -32,6 +32,10 @@ >> * checked against the expected value, and if they match, the entering of >> * optimized power state may be aborted. >> * >> + * @warning It is responsibility of the user to check if this function is >> + * supported at runtime using `rte_cpu_get_features()` API call. Failing to do >> + * so may result in an illegal CPU instruction error. >> + * > > - Reading this API description... what am I supposed to do in my > application or driver who wants to use the new > rte_power_monitor/rte_power_pause stuff? > > I should call rte_cpu_get_features(TOTO) ? > This comment does not give a hint. > > I suppose the intent was to refer to the rte_cpu_get_intrinsics_support() thing. > This must be fixed. > > > - Again, I wonder why we are exposing all this stuff. > This should be hidden in the rte_power API. > > We're exposing all of this here because the intrinsics are *not* part of the power API but rather are generic headers within EAL. Therefore, any infrastructure checking for their support can *not* reside in the power library, but instead has to be in EAL. The intended usage here is to call this function before calling rte_power_monitor(), such that: struct rte_cpu_intrinsics intrinsics; rte_cpu_get_intrinsics_support(&intrinsics); if (!intrinsics.power_monitor) { // rte_power_monitor not supported and cannot be used return; } // proceed with rte_power_monitor usage Failing to do that will result in either -ENOTSUP on non-x86, or illegal instruction crash on x86 that doesn't have that instruction (because we encode raw opcode). I've *not* added this to the previous patches because i wanted to get this part reviewed specifically, and not mix it with other IA-specific stuff. It seems that i've succeeded in that goal, as this patch has 4 likes^W acks :) -- Thanks, Anatoly