Received: by 10.213.65.68 with SMTP id h4csp1558139imn; Mon, 19 Mar 2018 07:24:41 -0700 (PDT) X-Google-Smtp-Source: AG47ELs+Z/ISQ6sMt5qJDwkb3qju1Icu+SmNY7NlDYXb2sqwrSh8sTZRjUt/cvnmiiGxThVBDcXU X-Received: by 2002:a17:902:b703:: with SMTP id d3-v6mr12487916pls.209.1521469480992; Mon, 19 Mar 2018 07:24:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1521469480; cv=none; d=google.com; s=arc-20160816; b=cbEZlV5vFJM3xHot8fEk0tbKqajB5xkaQpX40qHmrWMTWomtC5HNtsVT7cpI0IwTGA M73AB6Ti+afu9fHT+Csm4A2epG7v/8rEMWin4pIByUGF/Jb8/j6d8D0exV2qzDmEaFls o5oHOfDTa/7M8Q8HwJXkGN94zWSBX7wdPyCj5cWT8qSPGBIoCOC/0ye88IHnPNGV89/p ksF6wzTJIc1SGkwvLBQiLNqdhnxaokZxTMXWBndUyZMWZLsBjdGLD+2SE4QC/c0viehm oUguV0rRM0tRAMmebQfdtA9okFp3KQFUnmLywlrIvAl4tg7R9H9VtqlMqWcdtU/HYkY4 w1MQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=HD4Jp6L+ZMedr1qP6oJ8TYzehHaj4QhbpM2an5idLyk=; b=J+6ZINPNzC8bXn7EiK4vN8WSO0bhErlEEYAAdfIse5GpTw/pFIth713tuiMTQbZBqM f5UNAdcEFVWi93Xmu7q0j0onWPS0gnhnThbIq42mVGH84DDFKnem/IDDrKDqRQogV44n Ip4L74YWnjAkDsVepRccc6gzhw0INl+80aF/MVcCBetkrlr2AvMAY2BtWgdr8DG/Ru8J 8r0dMg62xXt4YK5rih4Ak5f6GZWtQK0YsX4eKbXxcI+l3U2YLP8nw7r/O51BkcQuID2w xUS2A7MtibNvzVSaw9y3o/kfGmlR/XkYybUkEz05a3T15waG9c6ruCz5ds9Dtvw1GDgI jGUw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u2si41549pgc.321.2018.03.19.07.24.26; Mon, 19 Mar 2018 07:24:40 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755558AbeCSOWQ (ORCPT + 99 others); Mon, 19 Mar 2018 10:22:16 -0400 Received: from stargate.chelsio.com ([12.32.117.8]:19287 "EHLO stargate.chelsio.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933505AbeCSOWL (ORCPT ); Mon, 19 Mar 2018 10:22:11 -0400 Received: from localhost (scalar.blr.asicdesigners.com [10.193.185.94]) by stargate.chelsio.com (8.13.8/8.13.8) with ESMTP id w2JELttg018018; Mon, 19 Mar 2018 07:21:56 -0700 From: Rahul Lakkireddy To: x86@kernel.org, linux-kernel@vger.kernel.org, netdev@vger.kernel.org Cc: tglx@linutronix.de, mingo@redhat.com, hpa@zytor.com, davem@davemloft.net, akpm@linux-foundation.org, torvalds@linux-foundation.org, ganeshgr@chelsio.com, nirranjan@chelsio.com, indranil@chelsio.com, Rahul Lakkireddy Subject: [RFC PATCH 2/3] x86/io: implement 256-bit IO read and write Date: Mon, 19 Mar 2018 19:50:35 +0530 Message-Id: <6ec3e7e0c70e85a804933f27bb4275d5363c044b.1521469118.git.rahul.lakkireddy@chelsio.com> X-Mailer: git-send-email 2.5.3 In-Reply-To: References: In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Use VMOVDQU AVX CPU instruction when available to do 256-bit IO read and write. Signed-off-by: Rahul Lakkireddy Signed-off-by: Ganesh Goudar --- arch/x86/include/asm/io.h | 57 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 56 insertions(+), 1 deletion(-) diff --git a/arch/x86/include/asm/io.h b/arch/x86/include/asm/io.h index 95e948627fd0..b04f417b3374 100644 --- a/arch/x86/include/asm/io.h +++ b/arch/x86/include/asm/io.h @@ -109,7 +109,62 @@ build_mmio_write(__writeq, "q", unsigned long, "r", ) #define readq readq #define writeq writeq -#endif +#ifdef CONFIG_AS_AVX +#include + +static inline u256 __readqq(const volatile void __iomem *addr) +{ + u256 ret; + + kernel_fpu_begin(); + asm volatile("vmovdqu %0, %%ymm0" : + : "m" (*(volatile u256 __force *)addr)); + asm volatile("vmovdqu %%ymm0, %0" : "=m" (ret)); + kernel_fpu_end(); + return ret; +} + +static inline u256 readqq(const volatile void __iomem *addr) +{ + u256 ret; + + kernel_fpu_begin(); + asm volatile("vmovdqu %0, %%ymm0" : + : "m" (*(volatile u256 __force *)addr)); + asm volatile("vmovdqu %%ymm0, %0" : "=m" (ret) : : "memory"); + kernel_fpu_end(); + return ret; +} + +#define __raw_readqq __readqq +#define readqq_relaxed(a) __readqq(a) +#define readqq readqq + +static inline void __writeqq(u256 val, volatile void __iomem *addr) +{ + kernel_fpu_begin(); + asm volatile("vmovdqu %0, %%ymm0" : : "m" (val)); + asm volatile("vmovdqu %%ymm0, %0" + : "=m" (*(volatile u256 __force *)addr)); + kernel_fpu_end(); +} + +static inline void writeqq(u256 val, volatile void __iomem *addr) +{ + kernel_fpu_begin(); + asm volatile("vmovdqu %0, %%ymm0" : : "m" (val)); + asm volatile("vmovdqu %%ymm0, %0" + : "=m" (*(volatile u256 __force *)addr) + : : "memory"); + kernel_fpu_end(); +} + +#define __raw_writeqq __writeqq +#define writeqq_relaxed(a) __writeqq(a) +#define writeqq writeqq +#endif /* CONFIG_AS_AVX */ + +#endif /* CONFIG_X86_64 */ #define ARCH_HAS_VALID_PHYS_ADDR_RANGE extern int valid_phys_addr_range(phys_addr_t addr, size_t size); -- 2.14.1