Skip to content
  • David Gibson's avatar
    pseries: Fix and cleanup CPU initialization and reset · 048706d9
    David Gibson authored
    
    
    The current pseries machine init function iterates over the CPUs at several
    points, doing various bits of initialization.  This is messy; these can
    and should be merged into a single iteration doing all the necessary per
    cpu initialization.  Worse, some of these initializations were setting up
    state which should be set on every reset, not just at machine init time.
    A few of the initializations simply weren't necessary at all.
    
    This patch, therefore, moves those things that need to be to the
    per-cpu reset handler, and combines the remainder into two loops over
    the cpus (which also creates them).  The second loop is for setting up
    hash table information, and will be removed in a subsequent patch also
    making other fixes to the hash table setup.
    
    This exposes a bug in our start-cpu RTAS routine (called by the guest to
    start up CPUs other than CPU0) under kvm.  Previously, this function did
    not make a call to ensure that it's changes to the new cpu's state were
    pushed into KVM in-kernel state.  We sort-of got away with this because
    some of the initializations had already placed the secondary CPUs into the
    right starting state for the sorts of Linux guests we've been running.
    
    Nonetheless the start-cpu RTAS call's behaviour was not correct and could
    easily have been broken by guest changes.  This patch also fixes it.
    
    Signed-off-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
    Reviewed-by: default avatarAndreas Färber <afaerber@suse.de>
    Signed-off-by: default avatarAlexander Graf <agraf@suse.de>
    048706d9