Received: by 10.213.65.68 with SMTP id h4csp257910imn; Wed, 21 Mar 2018 18:07:06 -0700 (PDT) X-Google-Smtp-Source: AG47ELtuMTodv0rIJ+8VXPm+K9C8J/mBf+uRlQVw3MB527xdYeOQthz/nDwnNYutuIplVRn4eXGm X-Received: by 2002:a17:902:7102:: with SMTP id a2-v6mr22594317pll.87.1521680826553; Wed, 21 Mar 2018 18:07:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1521680826; cv=none; d=google.com; s=arc-20160816; b=HTjMxH3p/yxIATWOpg2Ztc0WYoIGkVq0TJN9DSjpdLShc0SxKJ0Oou++wzzIHwBwWO IgYd9NR0yvLEOp0sAeq3KVmSQb7/JYrbYqMwG0gUoOk/BJCiPpzZOfzvQ4GsJ56sQ1kN pev3u3/67VJQMjdhEEMuzyT8PrHajBpQ+DcMAtBeY9nP9IMlH0Ah/j5uqrr3YXPfC1xg xHCk4YeEbzkt1v/TMgeqTNd43t9kgUBZoOpaByv2LSXBFA++hranOLX0Z7M8AhIjn7O+ d2Ycx8xqLDay/W15HOP0s2uFzl9+CJi/U4DP7RLGoo0z0jvrhkKodszEu4BtqcgPENgM /ebQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:mime-version:user-agent:date:message-id:subject :from:to:dkim-signature:arc-authentication-results; bh=wBNCPtAF8Hs9NqcQKNHiYCKJdzHsLMIRoQZpfy4PKIw=; b=nNgziRKEaZbKHv579ZL2c8W6cxZIezZ+x2eG/6wPML6BGjVCg+Jd2ubHsr8F5fQdkz ya63pGklmiunjAKr5nEVUsgH+lQwXsR3//1syotfHOLVeUGgGtYATfTUbcXjm/qYIrsI /Ee4KFzxHpyY1RoyV2xohouXAEUG/MYggQDeJj+A35iq1u+UlEQeCHZ3furNtJ9dHvq8 RPXwO9iN3etQV0Mz56mFSZ5VbM7RF2JteumFz7oKOQfuBHDRDa+/EoSaVvNJ2maGcjFh iEjhLXE35lj5gazrK4BQtUx1k2OwYuhdNUqOE5daL5nRzVKGT5X2OK1SieozCbvygd5a whHA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=odSLRaSU; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z7si3550235pgp.438.2018.03.21.18.06.51; Wed, 21 Mar 2018 18:07:06 -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; dkim=pass header.i=@gmail.com header.s=20161025 header.b=odSLRaSU; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752833AbeCVBGB (ORCPT + 99 others); Wed, 21 Mar 2018 21:06:01 -0400 Received: from mail-ot0-f194.google.com ([74.125.82.194]:44311 "EHLO mail-ot0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751883AbeCVBF7 (ORCPT ); Wed, 21 Mar 2018 21:05:59 -0400 Received: by mail-ot0-f194.google.com with SMTP id x6-v6so6266963otg.11 for ; Wed, 21 Mar 2018 18:05:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=to:from:subject:message-id:date:user-agent:mime-version :content-language:content-transfer-encoding; bh=wBNCPtAF8Hs9NqcQKNHiYCKJdzHsLMIRoQZpfy4PKIw=; b=odSLRaSU8gF2CSkRpTFKhZQEjmZRV0FdMbhfK+ONJR92Ty2CedLkmHsUh2V7W1VzcJ ONfVWj+pY71QcUmxW3J4/DyxjH0l35GpHgKtuSG/bsAH3rMVzFI3WtPDHJuSv/FPH6jc CPX3n2zhVwi4GkIikJNAq2hK1GwFcVhxyQ+JdC+4eApkyowMHz1vgkpJrvlOIzUi48VO vzPkbanvkArMxSGwVaZ/nYzprO2F+ovoAiZm//Q/9CfnYPiKEdfZOxW6UDVnPGO9qgZR FekXBPJRSQO0dlQeqayg2vyhYm7Fiwwou8C9yakA/+f2q5MhipC2ScYHalZSkfcVkogT LsTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:to:from:subject:message-id:date:user-agent :mime-version:content-language:content-transfer-encoding; bh=wBNCPtAF8Hs9NqcQKNHiYCKJdzHsLMIRoQZpfy4PKIw=; b=hA83ETVZNZvCViZ0QX8MkbxqxNiAJROmxhRZERBNj8icI2KfNIUYKm2Tli8H4xZzwe pJ1NCrqOrCeV4sV5fQybReks8246wP+//D2dNuOe3mO0BEhgsc+apTrKEpmFBvK1fW5e /cLCamqqznVs7sdMNYMZHu1Qkf4XwHtWCq7uzEXMRr8zWr+u3J0J+yL5LM9cKCLJxd9K 2spIku/ETDr2JLrI2vsO7BlhfCJXAoNg50P+9dhRkGkQcKLQPqYOa4yHn3TpsP/tAFR9 9mDDW46FSfnQW2mHeqVjINFnIA54eRIltcAJgykya9Gwsee0P2Y2RWHUOhvxdFRIFCnx mdtQ== X-Gm-Message-State: AElRT7F1atUUgNPqrM9XUX1H8SPkzxT3fLNYDgmrazXosxnhDpmJUC+G QS9eQL7XG39rjEFgSMytWKViBGjM X-Received: by 2002:a9d:4d12:: with SMTP id n18-v6mr4084257otf.170.1521680758418; Wed, 21 Mar 2018 18:05:58 -0700 (PDT) Received: from [192.168.0.2] (cpe-24-27-59-32.austin.res.rr.com. [24.27.59.32]) by smtp.gmail.com with ESMTPSA id 13sm2764661oix.45.2018.03.21.18.05.57 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 21 Mar 2018 18:05:57 -0700 (PDT) To: linux-kernel@vger.kernel.org From: Stuart Hayes Subject: [PATCH] dell_rbu: make firmware payload memory uncachable Message-ID: <40006403-999f-fde5-316a-63e9a48ce11c@gmail.com> Date: Wed, 21 Mar 2018 20:05:52 -0500 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.5.2 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Antivirus: Avast (VPS 180321-4, 03/21/2018), Outbound message X-Antivirus-Status: Clean Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The dell_rbu driver takes firmware update payloads and puts them in memory so the system BIOS can find them after a reboot. This sometimes fails (though rarely), because the memory containing the payload is in the CPU cache but never gets written back to main memory before the system is rebooted (CPU cache contents are lost on reboot). With this patch, the payload memory will be changed to uncachable to ensure that the payload is actually in main memory before the system is rebooted. Signed-off-by: Stuart Hayes --- Note that there is no maintainer for this driver, so I'd be grateful if someone could apply this... thank you! diff --git a/drivers/firmware/dell_rbu.c b/drivers/firmware/dell_rbu.c index 2f452f1..6b84814 100644 --- a/drivers/firmware/dell_rbu.c +++ b/drivers/firmware/dell_rbu.c @@ -180,6 +180,11 @@ static int create_packet(void *data, size_t length) invalid_addr_packet_array[idx++] = packet_data_temp_buf; packet_data_temp_buf = NULL; } + /* + * set to uncachable or it may never get written back before + * reboot + */ + set_memory_uc(packet_data_temp_buf, 1 << (ordernum)); } spin_lock(&rbu_data.lock); @@ -349,6 +354,7 @@ static void packet_empty_list(void) * to make sure there are no stale RBU packets left in memory */ memset(newpacket->data, 0, rbu_data.packetsize); + set_memory_wb(newpacket->data, (1 << newpacket->ordernum)); free_pages((unsigned long) newpacket->data, newpacket->ordernum); kfree(newpacket);