lkml.org 
[lkml]   [2018]   [Mar]   [2]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 109/115] powerpc/pseries: Enable RAS hotplug events later
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

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

    From: Sam Bobroff <sam.bobroff@au1.ibm.com>

    commit c9dccf1d074a67d36c510845f663980d69e3409b upstream.

    Currently if the kernel receives a memory hot-unplug event early
    enough, it may get stuck in an infinite loop in
    dissolve_free_huge_pages(). This appears as a stall just after:

    pseries-hotplug-mem: Attempting to hot-remove XX LMB(s) at YYYYYYYY

    It appears to be caused by "minimum_order" being uninitialized, due to
    init_ras_IRQ() executing before hugetlb_init().

    To correct this, extract the part of init_ras_IRQ() that enables
    hotplug event processing and place it in the machine_late_initcall
    phase, which is guaranteed to be after hugetlb_init() is called.

    Signed-off-by: Sam Bobroff <sam.bobroff@au1.ibm.com>
    Acked-by: Balbir Singh <bsingharora@gmail.com>
    [mpe: Reorder the functions to make the diff readable]
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/powerpc/platforms/pseries/ras.c | 31 ++++++++++++++++++++++---------
    1 file changed, 22 insertions(+), 9 deletions(-)

    --- a/arch/powerpc/platforms/pseries/ras.c
    +++ b/arch/powerpc/platforms/pseries/ras.c
    @@ -49,6 +49,28 @@ static irqreturn_t ras_error_interrupt(i


    /*
    + * Enable the hotplug interrupt late because processing them may touch other
    + * devices or systems (e.g. hugepages) that have not been initialized at the
    + * subsys stage.
    + */
    +int __init init_ras_hotplug_IRQ(void)
    +{
    + struct device_node *np;
    +
    + /* Hotplug Events */
    + np = of_find_node_by_path("/event-sources/hot-plug-events");
    + if (np != NULL) {
    + if (dlpar_workqueue_init() == 0)
    + request_event_sources_irqs(np, ras_hotplug_interrupt,
    + "RAS_HOTPLUG");
    + of_node_put(np);
    + }
    +
    + return 0;
    +}
    +machine_late_initcall(pseries, init_ras_hotplug_IRQ);
    +
    +/*
    * Initialize handlers for the set of interrupts caused by hardware errors
    * and power system events.
    */
    @@ -66,15 +88,6 @@ static int __init init_ras_IRQ(void)
    of_node_put(np);
    }

    - /* Hotplug Events */
    - np = of_find_node_by_path("/event-sources/hot-plug-events");
    - if (np != NULL) {
    - if (dlpar_workqueue_init() == 0)
    - request_event_sources_irqs(np, ras_hotplug_interrupt,
    - "RAS_HOTPLUG");
    - of_node_put(np);
    - }
    -
    /* EPOW Events */
    np = of_find_node_by_path("/event-sources/epow-events");
    if (np != NULL) {

    \
     
     \ /
      Last update: 2018-03-02 10:17    [W:4.431 / U:0.000 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site