Received: by 10.213.65.68 with SMTP id h4csp616416imn; Fri, 6 Apr 2018 06:13:55 -0700 (PDT) X-Google-Smtp-Source: AIpwx4/YUTrsCb5hQGw3Fx1iPYZrWHCHZPTvoI5K0UwnM4pUhgdH4OEUB/2ppA9xAJOw2DhB+rM1 X-Received: by 2002:a17:902:f24:: with SMTP id 33-v6mr27258050ply.242.1523020435134; Fri, 06 Apr 2018 06:13:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523020435; cv=none; d=google.com; s=arc-20160816; b=UXVZna4LImU32a2Y5qMD7fy/ihjh6p/po1GoVJ/7KBGVhkFSR93YMkkaSHlIe7pKh4 NEPCRDFODoMpfdTrc2qoIkgiNYolrQ1unmz+BVs1/N82vzYaz1WDtamfxPtgHXxluB3+ 3hU+iUzydeU6cbcjRUmtj0oYGUKcTTAodbmjcTV2NAnd0WNsfKojs76ET7egfWb6oyBD TAPIu4TsPa6krlvZQ6bz5s+AcUpp+rTq60SJNKVQtAElTsGC7wi4LefxD/aq98MvAw+t 2Wh81bZv/oM+Ze+8+ojy7Qd3asA0ZwKIh4z4Gj9FfaWTdyUMUM8O2YWKexs3mb/pc4Oe O5yw== 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:cc:to :subject:from:dkim-signature:arc-authentication-results; bh=DEGi4zwPWGsdwTBz/0dNzVyu2aHgR8ELPGXzYZRw0eQ=; b=bOnNkTd9/ibxXBbcC3El8q6wcjmivUcuUUgGlIOuq0F2Hci5gmJkzoevfmAhv9eMn8 lbsUsk/5TWiUu0WRnoCuTP2t9YsIeFWfUCstv4TDuRGlbO6s6hwwb/k7J1w8jBd5BYub 94+1E5+bhNB7lJ/kV+5ifIhJCNJ5zkAMo1D6WqYeJJrjnJXO+cOl94s6x39YQglaLj1L iaHx9dIj63KBjBoU07ykRz0P73HASFiiFwf1o6QkigCmgi3PHJzBHEhlLYewHl4hL8rR 9cqnhZxKsJZVItwumeOTG4aIliZ7LvC3bBHVrppUwk9l5SH2oixIRNq6KoNY+1UENLH8 oR1Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=GC4P7v7l; 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 2si7850433pfk.291.2018.04.06.06.13.40; Fri, 06 Apr 2018 06:13:55 -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=GC4P7v7l; 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 S1752945AbeDFNMZ (ORCPT + 99 others); Fri, 6 Apr 2018 09:12:25 -0400 Received: from mail-ot0-f194.google.com ([74.125.82.194]:35397 "EHLO mail-ot0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752588AbeDFNMX (ORCPT ); Fri, 6 Apr 2018 09:12:23 -0400 Received: by mail-ot0-f194.google.com with SMTP id f47-v6so1110272oth.2 for ; Fri, 06 Apr 2018 06:12:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:subject:to:cc:message-id:date:user-agent:mime-version :content-language:content-transfer-encoding; bh=DEGi4zwPWGsdwTBz/0dNzVyu2aHgR8ELPGXzYZRw0eQ=; b=GC4P7v7lcCvrdTko6hQU124I4vFEsci9Sy1azwf+aTR3LivRaDy4LoK5WnQpHd3B0A hAGOQ0tbAG4cxSgBNRcSzs32lVe0attfVTqTcPBQwkTKYnaZSgg9D0LMZ2w+DfO7V57v LDTDGbDrjMsk+XyfzR1Hmdc3ZEdqSRjveMWZR1X8GzwwjBJmXk8bw9n6w+TEcFYtwuHg 2d2ZUChsC4XoFaWoU8IXZy54qunczDFeC+h21WPkvRhvwz0KwnLnbkyV79duRb2qz8Mq OAz9ytu/ZdJT/GdFHTFo24uZ9zBC9QNsB5KYdy92hELWLIhfYrmBHj8Z8JsolHRMhf0s yJtA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:subject:to:cc:message-id:date:user-agent :mime-version:content-language:content-transfer-encoding; bh=DEGi4zwPWGsdwTBz/0dNzVyu2aHgR8ELPGXzYZRw0eQ=; b=jBYwgTGjK7NNzJ6mYzcegBEDCJWnqPP/4BaQ3/8tfoqf7EEPIXlcVDTLQhQvi/sXFX WY/Y5fbtizkG7EZ9ABypj9BXa8g4bSOH82d+0Fxsol+Czc5AERUeHDd7Ezjwu0qNx5D9 cb10I/ETyCZjuANFiIlezPUsw6xPELdcBlv+KmPGK6FC5U6zq/y5mfXMtMFDD3YOybLq JO3kc7xZf35aWKQayMNkOYTVLQFoFG+DmuPXcsN9e+mKL44a3Eeo7FtiwYSl0iF4Neiw hehxODT7qBWhve2W2Nxaz9gPZKMqAwgUfuUBs7UU2ciMvv2Bo6JG6C19LxCy7PnZMa4c vaWQ== X-Gm-Message-State: AElRT7EiENr4KZUDkct/Kapt5IudL/k6WnkKxBHEjz+hj4+mvYEKIYpB TKHHaeFHv37pf5tu50beL6g= X-Received: by 2002:a9d:6211:: with SMTP id g17-v6mr17421066otj.192.1523020343187; Fri, 06 Apr 2018 06:12:23 -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 i15-v6sm5167186oik.28.2018.04.06.06.12.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 06 Apr 2018 06:12:22 -0700 (PDT) From: Stuart Hayes Subject: [PATCH v4] dell_rbu: make firmware payload memory uncachable To: linux-kernel@vger.kernel.org Cc: Takashi Iwai Message-ID: Date: Fri, 6 Apr 2018 08:12:21 -0500 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Antivirus: Avast (VPS 180405-12, 04/05/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 --- v2 Added include, removed extra parentheses v3 Corrected formatting and include line v4 Moved set_memory_uc() outside the while loop so that the memory is definitely allocated before it is set to uncachable This driver has no maintainer. diff --git a/drivers/firmware/dell_rbu.c b/drivers/firmware/dell_rbu.c index 2f452f1f7c8a..53f27a6e2d76 100644 --- a/drivers/firmware/dell_rbu.c +++ b/drivers/firmware/dell_rbu.c @@ -45,6 +45,7 @@ #include #include #include +#include MODULE_AUTHOR("Abhay Salunke "); MODULE_DESCRIPTION("Driver for updating BIOS image on DELL systems"); @@ -181,6 +182,11 @@ static int create_packet(void *data, size_t length) packet_data_temp_buf = NULL; } } + /* + * set to uncachable or it may never get written back before reboot + */ + set_memory_uc((unsigned long)packet_data_temp_buf, 1 << ordernum); + spin_lock(&rbu_data.lock); newpacket->data = packet_data_temp_buf; @@ -349,6 +355,8 @@ 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((unsigned long)newpacket->data, + 1 << newpacket->ordernum); free_pages((unsigned long) newpacket->data, newpacket->ordernum); kfree(newpacket);