Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp3866001pxj; Mon, 21 Jun 2021 08:16:03 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx1vgbkqVHHqs2TZziqWo3AfRSfZmULhTzjjWvvY8Vkh11INFFN4GqdtSms5Rcrwc4OwKnz X-Received: by 2002:a17:906:3016:: with SMTP id 22mr24964429ejz.28.1624288563339; Mon, 21 Jun 2021 08:16:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1624288563; cv=none; d=google.com; s=arc-20160816; b=nY47MIEGk1AmRbKUZlFaLs0tkaGIirC8W2w5mQn+a3C55ufTwjXvdd6Rkpvfj1DUs7 c0E9+AeOBo3MQhJns0/vkDhQLNsGUpGi0l4Vb2FLHnr8+Q0hODoIO/HTOd2GOJIDKY2d XFx9YupVE3ynzQwHpT68jwbcsuta+08dZWo5wWFnpw//jGDPSoASY/J8NEv+2AAOxun0 iiPv7wodC4FzHjDICRnswEKc1nhlIRXPUQ+JplWu7hprPxsMDVJ9CGDfSaPSQcgU2KF8 4JtowXa9TGBqAQf4aUL25akmi8FEHaOJtc2oQXxmWh/31FZCcCQRe6snk7QiryYkSZqP 4OJw== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :ironport-sdr:ironport-sdr; bh=Auxqy04RGy4Ta1pVJGkBHGKff034rckiRjmCKZfaZ1I=; b=wAimTzNENAkgzFew56SXO6hQWWL3Qzwn4PIQVMYC19SIES0qt0Qi06Ug5R9h97LMw8 swe/gz2IO2ROg04l9XIQxdo7Ii44d8VbNiL20yamrCi/qnq+uLYTcX/S84Z5WJyjQ1g3 N+iV3wYkZavFvsl8pYgjtOlgcQg+eW9/vTJLL8YJzT6RDn7iuAlvtAS9Afjviezwl6zx 41d6gtp6yJ8tdxpFdoeEsdQYCSq4kTC1WUkg4wCvrxVFA4cKuQyohE/smsEo4pchpnk2 uddmVEDdbd2uN9XCv3oDN+p5z59JiMdEtoTIPQKeTYDZX/vh9d4ni9AfJUJbmGd3Svsx x+Qw== 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=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id q5si327518edh.490.2021.06.21.08.15.40; Mon, 21 Jun 2021 08:16:03 -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=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230251AbhFUPPg (ORCPT + 99 others); Mon, 21 Jun 2021 11:15:36 -0400 Received: from mga04.intel.com ([192.55.52.120]:18879 "EHLO mga04.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230180AbhFUPPc (ORCPT ); Mon, 21 Jun 2021 11:15:32 -0400 IronPort-SDR: G8UrbbQlnas514Z5CbACKxdCdBdyiRj53MTj24Pg2htw9TYCZyf62cDBPOG+vUwgHZ074d/bRm FlDMP5fQk1bA== X-IronPort-AV: E=McAfee;i="6200,9189,10022"; a="205039520" X-IronPort-AV: E=Sophos;i="5.83,289,1616482800"; d="scan'208";a="205039520" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 21 Jun 2021 08:13:17 -0700 IronPort-SDR: jh/Gf1XeIgMdcDiUZ02W5iGDCD64DVQtENMrfITgZn1z7LH0TclaZrxODsBm80nWA3O7sxWBkr xgVWCVWvcP6Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.83,289,1616482800"; d="scan'208";a="486522882" Received: from black.fi.intel.com (HELO black.fi.intel.com.) ([10.237.72.28]) by orsmga001.jf.intel.com with ESMTP; 21 Jun 2021 08:13:16 -0700 From: Alexander Shishkin To: Greg Kroah-Hartman Cc: linux-kernel@vger.kernel.org, Alexander Shishkin , Andy Shevchenko Subject: [PATCH 3/4] intel_th: msu: Make contiguous buffers uncached Date: Mon, 21 Jun 2021 18:12:45 +0300 Message-Id: <20210621151246.31891-4-alexander.shishkin@linux.intel.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210621151246.31891-1-alexander.shishkin@linux.intel.com> References: <20210621151246.31891-1-alexander.shishkin@linux.intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org We already keep the multiblock mode buffers uncached, but forget the single mode. Address this. Signed-off-by: Alexander Shishkin Reviewed-by: Andy Shevchenko --- drivers/hwtracing/intel_th/msu.c | 48 +++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 16 deletions(-) diff --git a/drivers/hwtracing/intel_th/msu.c b/drivers/hwtracing/intel_th/msu.c index 2edc4666633d..432ade0842f6 100644 --- a/drivers/hwtracing/intel_th/msu.c +++ b/drivers/hwtracing/intel_th/msu.c @@ -1024,33 +1024,49 @@ static int __msc_buffer_win_alloc(struct msc_window *win, } #ifdef CONFIG_X86 -static void msc_buffer_set_uc(struct msc_window *win, unsigned int nr_segs) +static void msc_buffer_set_uc(struct msc *msc) { struct scatterlist *sg_ptr; + struct msc_window *win; int i; - for_each_sg(win->sgt->sgl, sg_ptr, nr_segs, i) { - /* Set the page as uncached */ - set_memory_uc((unsigned long)sg_virt(sg_ptr), - PFN_DOWN(sg_ptr->length)); + if (msc->mode == MSC_MODE_SINGLE) { + set_memory_uc((unsigned long)msc->base, msc->nr_pages); + return; + } + + list_for_each_entry(win, &msc->win_list, entry) { + for_each_sg(win->sgt->sgl, sg_ptr, win->nr_segs, i) { + /* Set the page as uncached */ + set_memory_uc((unsigned long)sg_virt(sg_ptr), + PFN_DOWN(sg_ptr->length)); + } } } -static void msc_buffer_set_wb(struct msc_window *win) +static void msc_buffer_set_wb(struct msc *msc) { struct scatterlist *sg_ptr; + struct msc_window *win; int i; - for_each_sg(win->sgt->sgl, sg_ptr, win->nr_segs, i) { - /* Reset the page to write-back */ - set_memory_wb((unsigned long)sg_virt(sg_ptr), - PFN_DOWN(sg_ptr->length)); + if (msc->mode == MSC_MODE_SINGLE) { + set_memory_wb((unsigned long)msc->base, msc->nr_pages); + return; + } + + list_for_each_entry(win, &msc->win_list, entry) { + for_each_sg(win->sgt->sgl, sg_ptr, win->nr_segs, i) { + /* Reset the page to write-back */ + set_memory_wb((unsigned long)sg_virt(sg_ptr), + PFN_DOWN(sg_ptr->length)); + } } } #else /* !X86 */ static inline void -msc_buffer_set_uc(struct msc_window *win, unsigned int nr_segs) {} -static inline void msc_buffer_set_wb(struct msc_window *win) {} +msc_buffer_set_uc(struct msc *msc) {} +static inline void msc_buffer_set_wb(struct msc *msc) {} #endif /* CONFIG_X86 */ /** @@ -1097,8 +1113,6 @@ static int msc_buffer_win_alloc(struct msc *msc, unsigned int nr_blocks) if (ret <= 0) goto err_nomem; - msc_buffer_set_uc(win, ret); - win->nr_segs = ret; win->nr_blocks = nr_blocks; @@ -1152,8 +1166,6 @@ static void msc_buffer_win_free(struct msc *msc, struct msc_window *win) msc->base_addr = 0; } - msc_buffer_set_wb(win); - if (msc->mbuf && msc->mbuf->free_window) msc->mbuf->free_window(msc->mbuf_priv, win->sgt); else @@ -1260,6 +1272,8 @@ static int msc_buffer_multi_alloc(struct msc *msc, unsigned long *nr_pages, */ static void msc_buffer_free(struct msc *msc) { + msc_buffer_set_wb(msc); + if (msc->mode == MSC_MODE_SINGLE) msc_buffer_contig_free(msc); else if (msc->mode == MSC_MODE_MULTI) @@ -1303,6 +1317,8 @@ static int msc_buffer_alloc(struct msc *msc, unsigned long *nr_pages, } if (!ret) { + msc_buffer_set_uc(msc); + /* allocation should be visible before the counter goes to 0 */ smp_mb__before_atomic(); -- 2.30.2