Message ID | 5318cc53-31b4-5c83-abb7-c3ff5d892af2@gmail.com (mailing list archive) |
---|---|
State | Superseded, archived |
Delegated to: | Andy Shevchenko |
Headers | show |
> -----Original Message----- > From: platform-driver-x86-owner@vger.kernel.org [mailto:platform-driver-x86- > owner@vger.kernel.org] On Behalf Of Stuart Hayes > Sent: Friday, July 6, 2018 11:19 AM > To: linux-kernel@vger.kernel.org > Cc: Takashi Iwai; Andy Shevchenko; dvhart@infradead.org; Platform Driver > Subject: [PATCH resend v4] dell_rbu: make firmware payload memory uncachable > > 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 <stuart.w.hayes@gmail.com> > Reviewed-by: Takashi Iwai <tiwai@suse.de> > Signed-off-by: Takashi Iwai <tiwai@suse.de> Reviewed-by: Mario Limonciello <mario.limonciello@dell.com> > --- > 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. Stuart, Outside of this patch, I think it would make sense to send some follow up patch series that do the following: 1) Let you take over as maintainer (Update MAINTAINERS) 2) Move this driver to platform-x86 3) Update dell_rbu.txt with the correct URLs and mention that it's only for enterprise hardware. Client hardware has instead opted to support UEFI capsules for updates from Linux. Since it's really a platform feature and specific to only Dell enterprise hardware I think it makes sense to move over to an area with subsystem maintainers that can help to review patches as needed. > > > 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 <linux/moduleparam.h> > #include <linux/firmware.h> > #include <linux/dma-mapping.h> > +#include <asm/set_memory.h> > > MODULE_AUTHOR("Abhay Salunke <abhay_salunke@dell.com>"); > 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);
On Fri, Jul 6, 2018 at 7:28 PM, <Mario.Limonciello@dell.com> wrote: > Reviewed-by: Mario Limonciello <mario.limonciello@dell.com> Pushed to my review and testing queue, thanks! >> This driver has no maintainer. > > Stuart, > > Outside of this patch, I think it would make sense to send some follow up patch > series that do the following: > > 1) Let you take over as maintainer (Update MAINTAINERS) > 2) Move this driver to platform-x86 Darren, what do you think about this step? If we would go this way, first move, then take maintainership to reduce a churn. > 3) Update dell_rbu.txt with the correct URLs and mention that it's only for enterprise > hardware. Client hardware has instead opted to support UEFI capsules for updates > from Linux. > > Since it's really a platform feature and specific to only Dell enterprise hardware > I think it makes sense to move over to an area with subsystem maintainers that > can help to review patches as needed.
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 <linux/moduleparam.h> #include <linux/firmware.h> #include <linux/dma-mapping.h> +#include <asm/set_memory.h> MODULE_AUTHOR("Abhay Salunke <abhay_salunke@dell.com>"); 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);