lkml.org 
[lkml]   [2015]   [Jun]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.13.y-ckt 034/122] powerpc/pseries: Correct cpu affinity for dlpar added cpus
    Date
    3.13.11-ckt22 -stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Nathan Fontenot <nfont@linux.vnet.ibm.com>

    commit f32393c943e297b8ae180c8f83d81a156c7d0412 upstream.

    The incorrect ordering of operations during cpu dlpar add results in invalid
    affinity for the cpu being added. The ibm,associativity property in the
    device tree is populated with all zeroes for the added cpu which results in
    invalid affinity mappings and all cpus appear to belong to node 0.

    This occurs because rtas configure-connector is called prior to making the
    rtas set-indicator calls. Phyp does not assign affinity information
    for a cpu until the rtas set-indicator calls are made to set the isolation
    and allocation state.

    Correct the order of operations to make the rtas set-indicator
    calls (done in dlpar_acquire_drc) before calling rtas configure-connector.

    Fixes: 1a8061c46c46 ("powerpc/pseries: Add kernel based CPU DLPAR handling")

    Signed-off-by: Nathan Fontenot <nfont@linux.vnet.ibm.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Kamal Mostafa <kamal@canonical.com>
    ---
    arch/powerpc/platforms/pseries/dlpar.c | 10 ++++------
    1 file changed, 4 insertions(+), 6 deletions(-)

    diff --git a/arch/powerpc/platforms/pseries/dlpar.c b/arch/powerpc/platforms/pseries/dlpar.c
    index a8fe5aa..261bf79 100644
    --- a/arch/powerpc/platforms/pseries/dlpar.c
    +++ b/arch/powerpc/platforms/pseries/dlpar.c
    @@ -408,6 +408,10 @@ static ssize_t dlpar_cpu_probe(const char *buf, size_t count)
    if (rc)
    return -EINVAL;

    + rc = dlpar_acquire_drc(drc_index);
    + if (rc)
    + return -EINVAL;
    +
    parent = of_find_node_by_path("/cpus");
    if (!parent)
    return -ENODEV;
    @@ -418,12 +422,6 @@ static ssize_t dlpar_cpu_probe(const char *buf, size_t count)

    of_node_put(parent);

    - rc = dlpar_acquire_drc(drc_index);
    - if (rc) {
    - dlpar_free_cc_nodes(dn);
    - return -EINVAL;
    - }
    -
    rc = dlpar_attach_node(dn);
    if (rc) {
    dlpar_release_drc(drc_index);
    --
    1.9.1


    \
     
     \ /
      Last update: 2015-06-18 01:21    [W:2.936 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site