From mboxrd@z Thu Jan  1 00:00:00 1970
Return-Path: <dev-bounces@dpdk.org>
Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124])
	by inbox.dpdk.org (Postfix) with ESMTP id B3D5DA0C43;
	Fri, 22 Oct 2021 15:41:58 +0200 (CEST)
Received: from [217.70.189.124] (localhost [127.0.0.1])
	by mails.dpdk.org (Postfix) with ESMTP id 98BD34114A;
	Fri, 22 Oct 2021 15:41:58 +0200 (CEST)
Received: from mga07.intel.com (mga07.intel.com [134.134.136.100])
 by mails.dpdk.org (Postfix) with ESMTP id C7FA141149
 for <dev@dpdk.org>; Fri, 22 Oct 2021 15:41:56 +0200 (CEST)
X-IronPort-AV: E=McAfee;i="6200,9189,10144"; a="292765408"
X-IronPort-AV: E=Sophos;i="5.87,173,1631602800"; d="scan'208";a="292765408"
Received: from orsmga001.jf.intel.com ([10.7.209.18])
 by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 22 Oct 2021 06:41:55 -0700
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="5.87,173,1631602800"; d="scan'208";a="527947452"
Received: from fmsmsx601.amr.corp.intel.com ([10.18.126.81])
 by orsmga001.jf.intel.com with ESMTP; 22 Oct 2021 06:41:55 -0700
Received: from fmsmsx608.amr.corp.intel.com (10.18.126.88) by
 fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server
 (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.1.2242.12; Fri, 22 Oct 2021 06:41:55 -0700
Received: from FMSEDG603.ED.cps.intel.com (10.1.192.133) by
 fmsmsx608.amr.corp.intel.com (10.18.126.88) with Microsoft SMTP Server
 (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id
 15.1.2242.12 via Frontend Transport; Fri, 22 Oct 2021 06:41:55 -0700
Received: from NAM12-BN8-obe.outbound.protection.outlook.com (104.47.55.177)
 by edgegateway.intel.com (192.55.55.68) with Microsoft SMTP Server
 (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.1.2242.12; Fri, 22 Oct 2021 06:41:52 -0700
ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none;
 b=MuLdPpkixUQc5HTcZ4TcqoU5ceoFJpaZT3otTD9IPUjYeFiq85iLsT6S7j0WOb1Gc22V0sfRfpYSnLy67QZLzsVcG/XriAIJKAcAv5gy/O4Jq2+K/Wi8JnZguN1uAMhJgxwkH2pAyy+sW97PITh+XFkjLnLwL1OIL4lXnMBrE3l5Q4VANaEmnFT+Mmv0pNkD/Ur17h+0SwyHRrsWQD9q4vB51j5OjG+4hzFnqGSbOB0BqK1uGbEmB7+1KCgZoo/3zLdXDzcpkUG6zdQFBj4khJSGZA7Z5Ey4R/pNSeMOPPKuVbi1cuNtzf9e1cQOBiNId/2aVTHF7E7yHN1uR8bxQg==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; 
 s=arcselector9901;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1;
 bh=MDxcgVJya7OVw24ST2wm6imY9HpZ7WX0GU1vZWsBllo=;
 b=C1xs/UMNib0if8/7qTpZ2W8loY3EYpWj3wksThLwK7oHL0tzJi4tmZ/d9RQuhbTdDulrpgOGy7Dirugg+NQgtgN+SwrsQec/nbxjHsBgbdXQddSXPYCdK33+NTNn1pHaGFmMqZrE9CTmJ5ELLT3tsGyCwB54Bdcs/z0swtf1di/bqXxkjHSAxh3UZPdrcYOgJqfYny7SjeZecXtFkZ6JR07s4kvlTxQGKkNIGaAd5ZbecRI/M9D7fEx+2iWScKu9xM5AtghlTYCUrVeficReCTGuyJGYv79RJLYRP1mPPJNQs/nWiccf5mEXeLD8VzQTEWf3ga4gxdq20l/0SAVMOQ==
ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass
 smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com;
 dkim=pass header.d=intel.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; 
 s=selector2-intel-onmicrosoft-com;
 h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;
 bh=MDxcgVJya7OVw24ST2wm6imY9HpZ7WX0GU1vZWsBllo=;
 b=mkyILcu0In4w2+y9lCexfGWY4Z52duFmQQDawFb0iKkTSqcRi766S5oSwpDX3m2lFfuDz0ypxYuVrZHtKVeEkfabdPqC1wKNXeUeR98/sSuSgMoRw2JCi6DVIinZ4/L2pIxxW1qMB3l1QTHO+rr4DlOCezRc1ftY1K63Tzhzq0M=
Authentication-Results: redhat.com; dkim=none (message not signed)
 header.d=none;redhat.com; dmarc=none action=none header.from=intel.com;
Received: from PH0PR11MB5047.namprd11.prod.outlook.com (2603:10b6:510:3c::18)
 by PH0PR11MB4886.namprd11.prod.outlook.com (2603:10b6:510:33::22)
 with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4628.18; Fri, 22 Oct
 2021 13:41:51 +0000
Received: from PH0PR11MB5047.namprd11.prod.outlook.com
 ([fe80::f1a0:809a:3d2e:e13c]) by PH0PR11MB5047.namprd11.prod.outlook.com
 ([fe80::f1a0:809a:3d2e:e13c%9]) with mapi id 15.20.4628.018; Fri, 22 Oct 2021
 13:41:51 +0000
To: Miao Li <miao.li@intel.com>, <dev@dpdk.org>
CC: <chenbo.xia@intel.com>, <maxime.coquelin@redhat.com>
References: <20211015170911.478394-1-miao.li@intel.com>
 <20211018141638.5916-1-miao.li@intel.com>
 <20211018141638.5916-2-miao.li@intel.com>
From: David Hunt <david.hunt@intel.com>
Message-ID: <1fe8e437-6642-d16a-fe9f-9abf10570f82@intel.com>
Date: Fri, 22 Oct 2021 14:41:45 +0100
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101
 Firefox/78.0 Thunderbird/78.14.0
In-Reply-To: <20211018141638.5916-2-miao.li@intel.com>
Content-Type: text/plain; charset=utf-8; format=flowed
Content-Transfer-Encoding: 7bit
Content-Language: en-GB
X-ClientProxiedBy: DB6PR1001CA0009.EURPRD10.PROD.OUTLOOK.COM
 (2603:10a6:4:b7::19) To PH0PR11MB5047.namprd11.prod.outlook.com
 (2603:10b6:510:3c::18)
MIME-Version: 1.0
Received: from [10.4.11.161] (95.45.23.115) by
 DB6PR1001CA0009.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:4:b7::19) with Microsoft
 SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id
 15.20.4628.16 via Frontend Transport; Fri, 22 Oct 2021 13:41:49 +0000
X-MS-PublicTrafficType: Email
X-MS-Office365-Filtering-Correlation-Id: a527b866-73a7-4a32-1b55-08d99561b3b2
X-MS-TrafficTypeDiagnostic: PH0PR11MB4886:
X-Microsoft-Antispam-PRVS: <PH0PR11MB48860F3ED77E787B67CBE59E98809@PH0PR11MB4886.namprd11.prod.outlook.com>
X-MS-Oob-TLC-OOBClassifiers: OLM:2150;
X-MS-Exchange-SenderADCheck: 1
X-MS-Exchange-AntiSpam-Relay: 0
X-Microsoft-Antispam: BCL:0;
X-Microsoft-Antispam-Message-Info: +RY5PszrJG/C+zb3XQWb8ZluL1VS/cXB5bTMFJhXm5m8tLUADN0nKWYCloKLVs6PG/eWTHAsZeB0bWa+Snfzx3bAh59yMf851oMY/2ObodXcz1nV1wMFXU9znLClpTkGYU2+FL8Bl1Lcc9hrc5ZpqoW8IHSSuQuuMyZYPqYNmzCeddi3EOpfUOw0bQcd9x3PWx7XjttO1yXg1pquirHI8j8eznPR5ORLa4hw61M3tN8rbeqEgPic3hX5dhUCTfqjMKlyqt1rGoc/FSdqcioHOTrlqKjZbm6uPtP/B9yjivyTBgzL1h+fJXl0b07+1DJerpKdvogYEQic7SZmDdDORB79i9JbwOZZEpPPGfRJeX6nimgeq2dkzqVU767TdDxnRrFY3x4oBAT3ZV/+vnIwUHB8DIHAmi0uFbD6YaRRRaTXL9rvmAVIqWdtccDpmKtU0WzmE8yz6kGZlbVCu0y2Vbh4XuQU6RKvFy8xCgIwaTa64Z4zIcxUKsOi7kQRoZVS8AD4ijL+zCFfVHxb9FG5RcLCmG4dWKwTKG8cEeEmP+nLSRXM9ffsv8+AmODrKKdmqxPF59sF2NbJ4zKtubEE+X0+I1o9sRIq5QMCmMlxrcjtanXhVPJ1CF9BNgNhtxZt+4to9dWNHF44/CAMHEYGzH+O6rT6v63mgZhdI65nL7d+6saQyouKPlQ8WVaup04ae0cShhSBgPXojBRQrl1HUU6++WSp7hvoes0kzHmV2Ww=
X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:;
 IPV:NLI; SFV:NSPM; H:PH0PR11MB5047.namprd11.prod.outlook.com; PTR:; CAT:NONE;
 SFS:(366004)(2616005)(8676002)(956004)(2906002)(8936002)(44832011)(26005)(6666004)(16576012)(36756003)(31686004)(66946007)(38100700002)(508600001)(5660300002)(6486002)(86362001)(53546011)(31696002)(316002)(4326008)(186003)(66476007)(66556008)(82960400001)(83380400001)(43740500002)(45980500001);
 DIR:OUT; SFP:1102; 
X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1
X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SGluaExIaEVnVVk4NnhKWlRWc0xUVVdwSDhUWnlyNDNNblN4VDlHQWJkVE5z?=
 =?utf-8?B?b3ZPYkNUVG92dlVJbzkvaXpMc2VvNkV5MnZaYjJ3dDB4V2VoN281WXFSdWds?=
 =?utf-8?B?UnJjbFFnaHF6cGRueWhPUjVpWnA2K0tIRHphWllEQ2crR25BdHFKQjNlMi9E?=
 =?utf-8?B?ZUFqWEZTc0Y0SHRHTXBwekkzSkdzTlVROW9aL1NnZmNXWEFUL1NZMStPRWVn?=
 =?utf-8?B?eXJvVW1lTHVUczdWNjFSRkNwUlc5c2VXN3huWk83YkJjT2lUeWFkZVVCS3R3?=
 =?utf-8?B?cXNFVElYN0MzMnpZanE1OWFRcE1iTzdyNXhoK0xYcWpUVWx4L2VQMUxEUGhK?=
 =?utf-8?B?eTFEYWNoQTltY3NvQU9sdXo0SSt0V2VyWFlYTkRBckRLVlZsU1JQNHdQaDA0?=
 =?utf-8?B?eTVvRVRxOGthb2pMcDhDRk5KODRIYnlwcU1XWG5xSkl1QThQVzN1b2RDTXIx?=
 =?utf-8?B?SFJ1UUY4eWdFeC9uZ3JJb0lBYmVCT0pFZVJyMTBET0puZ2lNdWEwL08yYkxT?=
 =?utf-8?B?OWFvNk4wTEt0N09lVE83dTJKSXd6L1JodFpFanBRdlY0SjRUdkVYUmd2TldR?=
 =?utf-8?B?cjBFd29mRU1hdDJxZWRRbHNqSm5oSmprdi83Vit0azdTanoyOGFpQlFCWmF5?=
 =?utf-8?B?bk83VFBiamUveTd0MER3cXd1K3BGa3IwQ0NlYzFPTVJ0bFlQaUhod2NZZE5E?=
 =?utf-8?B?eVd0RUI5Z2U1aEhoMzc0Yk5SU1ZNdmpFb21IZEpmdGxETm9NdjFyTytKdzJt?=
 =?utf-8?B?a0lvcFMraUp3U3E5WmRWUzVaKy82bE1PcDRCNkhDamxDdG85RTlZeVcxZzBS?=
 =?utf-8?B?cTVKUWJqOGlqTWdSaVR5cm95TVNNZlJ6d1R5T1B6eEVQbCtGNkxEZ1FqTjZq?=
 =?utf-8?B?b1pneUpkSGZsTkFKdzRwT1g0bURrNGJzdGFuaGxQQ1B0ekxseGhkNWhzVzF4?=
 =?utf-8?B?UjVZMzlOdnh0NXJwbHJjcjVkRW9Yb1hjUDQxektRT3FpcnJBbkhGQ1ErMjh4?=
 =?utf-8?B?VlRnRDNwRy9CWDk1RXcvZmFxbi9OQnBCdGJ3bEdNMzd6ZyttVmFZV2w3M1lu?=
 =?utf-8?B?cGpGM09zS2RBbU41UDlKV0VNaXozNUJwN1hFZWNHUHFxakR5MS9IMnNqYll0?=
 =?utf-8?B?TWlOK0VGZkdWUzYwL2t3cTlKT0NVNUJZUnlrZDNpeXA3S29zeTNXK2dsN2E3?=
 =?utf-8?B?Mmc0Tm5pTHRWRnR2WUdEUWJSdjNucXc4Y25yWEVmR3JFM1pJd1RNa0t2MXEr?=
 =?utf-8?B?M25Qbk9HM0twUEUvOFdweDlSRk04emt4Z20rZXlmWjZlZDdod2M4YUcxdENV?=
 =?utf-8?B?YnJDVjdXUTJIdXR1WkhUL2ZSYkVOQS9KMm9QdStkbU4rTWFPdkU4eGtpSml2?=
 =?utf-8?B?ZEFjWlM0TTJjdVBXYTBmWWRrallaZTVML2dmYmZjUENOK2dyWUQ2SGRrU1U1?=
 =?utf-8?B?djZXdUp0NHhBK1BJZUxLRlpBQ2Vpd1F5blZOa3huSkNDTWdESnFWSGNmYWNx?=
 =?utf-8?B?emVPYURwZGtuZ2FmU3lGRXUvSEY5VVZOeDA4cURZamZ2ZmtVNHJURDN6bFg0?=
 =?utf-8?B?ZExCQ21pYjZBUDZ1c0dCcThCVXhDNldBS1Y0Mk1BVGk2ejlTdmJqS2tqeXlH?=
 =?utf-8?B?ZWpubU94Vk9oSmlUTVh4dTBjeU1jMFZreTMzcE12cE1GM0JZUWRGYnpxcW50?=
 =?utf-8?B?Qm5HbjUzOEtvVVdPdW9pQlNFdk4wTWQ4YU83K3FrYzg0OTFlSEl0LzE3MEpE?=
 =?utf-8?B?R0o4VDI4TmppaFVNekdtem9vZ3hjajQzUWp5blRjRDlveDF4NWFOK0JuWFlX?=
 =?utf-8?B?NnoybDZHRnE2Zkh1Y28yS1MvaGpGaThHVTkxcFJjZWFOR3BxeGdMZmQ3TDRw?=
 =?utf-8?B?NjY3aC91clVvc3NXWVFucHY0UUhKUDRZTUVVRVI0U1hWeFYwOEI4RDU4VkFU?=
 =?utf-8?Q?wQkEWSAzrHU=3D?=
X-MS-Exchange-CrossTenant-Network-Message-Id: a527b866-73a7-4a32-1b55-08d99561b3b2
X-MS-Exchange-CrossTenant-AuthSource: PH0PR11MB5047.namprd11.prod.outlook.com
X-MS-Exchange-CrossTenant-AuthAs: Internal
X-MS-Exchange-CrossTenant-OriginalArrivalTime: 22 Oct 2021 13:41:51.0429 (UTC)
X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted
X-MS-Exchange-CrossTenant-Id: 46c98d88-e344-4ed4-8496-4ed7712e255d
X-MS-Exchange-CrossTenant-MailboxType: HOSTED
X-MS-Exchange-CrossTenant-UserPrincipalName: david.hunt@intel.com
X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR11MB4886
X-OriginatorOrg: intel.com
Subject: Re: [dpdk-dev] [PATCH v7 1/5] net/virtio: implement
 rte_power_monitor API
X-BeenThere: dev@dpdk.org
X-Mailman-Version: 2.1.29
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 18/10/2021 3:16 PM, Miao Li wrote:
> This patch implements rte_power_monitor API in virtio PMD to reduce
> power consumption when no packet come in. According to current semantics
> of power monitor, this commit adds a callback function to decide whether
> aborts the sleep by checking current value against the expected value and
> virtio_get_monitor_addr to provide address to monitor. When no packet come
> in, the value of address will not be changed and the running core will
> sleep. Once packets arrive, the value of address will be changed and the
> running core will wakeup.
>
> Signed-off-by: Miao Li <miao.li@intel.com>
> Reviewed-by: Chenbo Xia <chenbo.xia@intel.com>
> ---
>   doc/guides/rel_notes/release_21_11.rst |  4 ++
>   drivers/net/virtio/virtio_ethdev.c     | 56 ++++++++++++++++++++++++++
>   2 files changed, 60 insertions(+)
>
> diff --git a/doc/guides/rel_notes/release_21_11.rst b/doc/guides/rel_notes/release_21_11.rst
> index d5435a64aa..c298844898 100644
> --- a/doc/guides/rel_notes/release_21_11.rst
> +++ b/doc/guides/rel_notes/release_21_11.rst
> @@ -80,6 +80,10 @@ New Features
>     Added macros ETH_RSS_IPV4_CHKSUM and ETH_RSS_L4_CHKSUM, now IPv4 and
>     TCP/UDP/SCTP header checksum field can be used as input set for RSS.
>   
> +* **Updated virtio PMD.**
> +
> +  Implement rte_power_monitor API in virtio PMD.
> +
>   * **Updated af_packet ethdev driver.**
>   
>     * Default VLAN strip behavior was changed. VLAN tag won't be stripped
> diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
> index 6aa36b3f39..1227f3f1f4 100644
> --- a/drivers/net/virtio/virtio_ethdev.c
> +++ b/drivers/net/virtio/virtio_ethdev.c
> @@ -74,6 +74,8 @@ static int virtio_mac_addr_set(struct rte_eth_dev *dev,
>   				struct rte_ether_addr *mac_addr);
>   
>   static int virtio_intr_disable(struct rte_eth_dev *dev);
> +static int virtio_get_monitor_addr(void *rx_queue,
> +				struct rte_power_monitor_cond *pmc);
>   
>   static int virtio_dev_queue_stats_mapping_set(
>   	struct rte_eth_dev *eth_dev,
> @@ -982,6 +984,7 @@ static const struct eth_dev_ops virtio_eth_dev_ops = {
>   	.mac_addr_add            = virtio_mac_addr_add,
>   	.mac_addr_remove         = virtio_mac_addr_remove,
>   	.mac_addr_set            = virtio_mac_addr_set,
> +	.get_monitor_addr        = virtio_get_monitor_addr,
>   };
>   
>   /*
> @@ -1313,6 +1316,59 @@ virtio_mac_addr_set(struct rte_eth_dev *dev, struct rte_ether_addr *mac_addr)
>   	return 0;
>   }
>   
> +#define CLB_VAL_IDX 0
> +#define CLB_MSK_IDX 1
> +#define CLB_MATCH_IDX 2
> +static int
> +virtio_monitor_callback(const uint64_t value,
> +		const uint64_t opaque[RTE_POWER_MONITOR_OPAQUE_SZ])
> +{
> +	const uint64_t m = opaque[CLB_MSK_IDX];
> +	const uint64_t v = opaque[CLB_VAL_IDX];
> +	const uint64_t c = opaque[CLB_MATCH_IDX];
> +
> +	if (c)
> +		return (value & m) == v ? -1 : 0;
> +	else
> +		return (value & m) == v ? 0 : -1;
> +}
> +
> +static int
> +virtio_get_monitor_addr(void *rx_queue, struct rte_power_monitor_cond *pmc)
> +{
> +	struct virtnet_rx *rxvq = rx_queue;
> +	struct virtqueue *vq = virtnet_rxq_to_vq(rxvq);
> +	struct virtio_hw *hw;
> +
> +	if (vq == NULL)
> +		return -EINVAL;
> +
> +	hw = vq->hw;
> +	if (virtio_with_packed_queue(hw)) {
> +		struct vring_packed_desc *desc;
> +		desc = vq->vq_packed.ring.desc;
> +		pmc->addr = &desc[vq->vq_used_cons_idx].flags;
> +		if (vq->vq_packed.used_wrap_counter)
> +			pmc->opaque[CLB_VAL_IDX] =
> +						VRING_PACKED_DESC_F_AVAIL_USED;
> +		else
> +			pmc->opaque[CLB_VAL_IDX] = 0;
> +		pmc->opaque[CLB_MSK_IDX] = VRING_PACKED_DESC_F_AVAIL_USED;
> +		pmc->opaque[CLB_MATCH_IDX] = 1;
> +		pmc->size = sizeof(desc[vq->vq_used_cons_idx].flags);
> +	} else {
> +		pmc->addr = &vq->vq_split.ring.used->idx;
> +		pmc->opaque[CLB_VAL_IDX] = vq->vq_used_cons_idx
> +					& (vq->vq_nentries - 1);
> +		pmc->opaque[CLB_MSK_IDX] = vq->vq_nentries - 1;
> +		pmc->opaque[CLB_MATCH_IDX] = 0;
> +		pmc->size = sizeof(vq->vq_split.ring.used->idx);
> +	}
> +	pmc->fn = virtio_monitor_callback;
> +
> +	return 0;
> +}
> +
>   static int
>   virtio_vlan_filter_set(struct rte_eth_dev *dev, uint16_t vlan_id, int on)
>   {


LGTM.

Acked-by: David Hunt <david.hunt@intel.com>