Received: by 2002:a05:6a10:5bc5:0:0:0:0 with SMTP id os5csp1684694pxb; Thu, 28 Oct 2021 08:13:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzlxX7VDkMHQqu5I9LH+VTWF6tZh3ky4d/vPgxZKH619enNDy0tnVVSyk/aZtqN7bY6BAEn X-Received: by 2002:a65:4209:: with SMTP id c9mr3587003pgq.399.1635433982513; Thu, 28 Oct 2021 08:13:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1635433982; cv=none; d=google.com; s=arc-20160816; b=zSuSGyKlcmeQY55Mony0TXEPNxYBLt1wGcIhWgpr8d+Xx5KDYf4ThazNJOWmvxGlXh 4S73KfwAEXJKjPL968nUXjRkJY9hLjVxUIIC98xitl/617o8boNA1Qy6kUdcgCzs3/lz bZN8zvbLLvL8GBgOZJQZsKGNxrjjRfg4DvkicOeEixgNSAa0MgEtcpivHkJHZ02Q3y7M A7Oew7bpVwQw9VbIDFneGS6lkD42ZY8HfFUWNdUKOos/ZKW5qFYXnRHnKoTqSQ8NzAsf tdsa7M3gIO+PdOWuFe3cn2Xg/pWwbHczuCKNDGuEJfg4Ha5+8E6mD+jx464t7MvoF8+1 5Zow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=qtLGRHy545DdCsOSxA2MMcPeB+jsx0SxGTiuC+qeygU=; b=y+9WaSxOkPBxyK27+Blt5cHk3jLnWKrfiPQZz0+DwWkXG2STpSsBJQoEIEdNi0685L q7jJYk+dgMKc8gR2+trWZwvNIbJgkzwmfUNCe7kmwKr/5Hmv7Wk5bENpy88cRaASnPD7 xC5sV8lrIbHKgbsLw66ksrvSW9jjzRD0oCE0b7W59/Fp5RmnmLNXgjZem8iLAIv19fxb oUm1b1lJ0InEHKKgwNe6Dhvt6VaGe4UeSWkoTG4d2kbGrZkiJM3ln8lOgBltHNjtbTQH +UqehsqaLxMKrQuuIcyMwsOxh6uxJTHvJqyesmKPNZeQcmsFhqMCL4zBn0mQbdxduir4 y7bw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alibaba.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id a17si4681152plh.327.2021.10.28.08.12.49; Thu, 28 Oct 2021 08:13:02 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=alibaba.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231324AbhJ1PMc (ORCPT + 99 others); Thu, 28 Oct 2021 11:12:32 -0400 Received: from out30-57.freemail.mail.aliyun.com ([115.124.30.57]:49385 "EHLO out30-57.freemail.mail.aliyun.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231411AbhJ1PM0 (ORCPT ); Thu, 28 Oct 2021 11:12:26 -0400 X-Alimail-AntiSpam: AC=PASS;BC=-1|-1;BR=01201311R201e4;CH=green;DM=||false|;DS=||;FP=0|-1|-1|-1|0|-1|-1|-1;HT=e01e04407;MF=xianting.tian@linux.alibaba.com;NM=1;PH=DS;RN=11;SR=0;TI=SMTPD_---0Uu1.ECo_1635433795; Received: from localhost(mailfrom:xianting.tian@linux.alibaba.com fp:SMTPD_---0Uu1.ECo_1635433795) by smtp.aliyun-inc.com(127.0.0.1); Thu, 28 Oct 2021 23:09:56 +0800 From: Xianting Tian To: gregkh@linuxfoundation.org, jirislaby@kernel.org, amit@kernel.org, arnd@arndb.de, osandov@fb.com Cc: shile.zhang@linux.alibaba.com, sfr@canb.auug.org.au, linuxppc-dev@lists.ozlabs.org, virtualization@lists.linux-foundation.org, linux-kernel@vger.kernel.org, Xianting Tian Subject: [PATCH v12 0/2] make hvc pass dma capable memory to its backend Date: Thu, 28 Oct 2021 23:09:52 +0800 Message-Id: <20211028150954.1356334-1-xianting.tian@linux.alibaba.com> X-Mailer: git-send-email 2.17.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Dear all, This patch series make hvc framework pass DMA capable memory to put_chars() of hvc backend(eg, virtio-console), and revert commit c4baad5029 ("virtio-console: avoid DMA from stackā€) V1 virtio-console: avoid DMA from vmalloc area https://lkml.org/lkml/2021/7/27/494 For v1 patch, Arnd Bergmann suggests to fix the issue in the first place: Make hvc pass DMA capable memory to put_chars() The fix suggestion is included in v2. V2 [PATCH 1/2] tty: hvc: pass DMA capable memory to put_chars() https://lkml.org/lkml/2021/8/1/8 [PATCH 2/2] virtio-console: remove unnecessary kmemdup() https://lkml.org/lkml/2021/8/1/9 For v2 patch, Arnd Bergmann suggests to make new buf part of the hvc_struct structure, and fix the compile issue. The fix suggestion is included in v3. V3 [PATCH v3 1/2] tty: hvc: pass DMA capable memory to put_chars() https://lkml.org/lkml/2021/8/3/1347 [PATCH v3 2/2] virtio-console: remove unnecessary kmemdup() https://lkml.org/lkml/2021/8/3/1348 For v3 patch, Jiri Slaby suggests to make 'char c[N_OUTBUF]' part of hvc_struct, and make 'hp->outbuf' aligned and use struct_size() to calculate the size of hvc_struct. The fix suggestion is included in v4. V4 [PATCH v4 0/2] make hvc pass dma capable memory to its backend https://lkml.org/lkml/2021/8/5/1350 [PATCH v4 1/2] tty: hvc: pass DMA capable memory to put_chars() https://lkml.org/lkml/2021/8/5/1351 [PATCH v4 2/2] virtio-console: remove unnecessary kmemdup() https://lkml.org/lkml/2021/8/5/1352 For v4 patch, Arnd Bergmann suggests to introduce another array(cons_outbuf[]) for the buffer pointers next to the cons_ops[] and vtermnos[] arrays. This fix included in this v5 patch. V5 Arnd Bergmann suggests to use "L1_CACHE_BYTES" as dma alignment, use 'sizeof(long)' as dma alignment is wrong. fix it in v6. V6 It contains coding error, fix it in v7 and it worked normally according to test result. V7 Greg KH suggests to add test and code review developer, Jiri Slaby suggests to use lockless buffer and fix dma alignment in separate patch. fix above things in v8. V8 This contains coding error when switch to use new buffer. fix it in v9. V9 It didn't make things much clearer, it needs add more comments for new added buf. Add use lock to protect new added buffer. fix in v10. V10 Remove 'char outchar' and its lock from hvc_struct, adjust hvc_struct and use pahole to display the struct layout. fix it in v11. V11 Fix early console print issue, which is broken by v11, in v12. ********TEST STEPS********* 1, config guest console=hvc0 2, start guest 3, login guest Welcome to Buildroot buildroot login: root # # cat /proc/cmdline console=hvc0 root=/dev/vda rw init=/sbin/init # drivers/tty/hvc/hvc_console.c | 48 ++++++++++++++++++++++++----------- drivers/tty/hvc/hvc_console.h | 30 +++++++++++++++++++++- drivers/char/virtio_console.c | 12 ++---------- 3 file changed