[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen staging] x86/AMD: flush TLB after ucode update



commit f19a199281a23725beb73bef61eb8964d8e225ce
Author:     Jan Beulich <jbeulich@xxxxxxxx>
AuthorDate: Mon Jan 28 17:40:39 2019 +0100
Commit:     Jan Beulich <jbeulich@xxxxxxxx>
CommitDate: Mon Jan 28 17:40:39 2019 +0100

    x86/AMD: flush TLB after ucode update
    
    The increased number of messages (spec_ctrl.c:print_details()) within a
    certain time window made me notice some slowness of boot time screen
    output. Experimentally I've narrowed the time window to be from
    immediately after the early ucode update on the BSP to the PAT write in
    cpu_init(), which upon further investigation has an effect because of
    the full TLB flush that's implied by that write.
    
    For that reason, as a workaround, flush the TLB of the mapping of the
    page that holds the blob. Note that flushing just a single page is
    sufficient: As per verify_patch_size() patch size can't exceed 4k, and
    the way xmalloc() works the blob can't be crossing a page boundary.
    
    Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
    Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
    Reviewed-by: Brian Woods <brian.woods@xxxxxxx>
    Release-acked-by: Juergen Gross <jgross@xxxxxxxx>
---
 xen/arch/x86/microcode_amd.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/xen/arch/x86/microcode_amd.c b/xen/arch/x86/microcode_amd.c
index fba44ccba9..7a854c012f 100644
--- a/xen/arch/x86/microcode_amd.c
+++ b/xen/arch/x86/microcode_amd.c
@@ -218,6 +218,12 @@ static int apply_microcode(unsigned int cpu)
 
     spin_unlock_irqrestore(&microcode_update_lock, flags);
 
+    /*
+     * Some processors leave the ucode blob mapping as UC after the update.
+     * Flush the mapping to regain normal cacheability.
+     */
+    flush_area_local(hdr, FLUSH_TLB_GLOBAL | FLUSH_ORDER(0));
+
     /* check current patch id and patch's id for match */
     if ( hw_err || (rev != hdr->patch_id) )
     {
--
generated by git-patchbot for /home/xen/git/xen.git#staging

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/xen-changelog

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.