[{"id":1763745,"web_url":"http://patchwork.ozlabs.org/comment/1763745/","msgid":"<20170906103621.092395dd@roar.ozlabs.ibm.com>","date":"2017-09-06T00:36:21","subject":"Re: [rfc 2/3] powerpc/mce: Extract physical_address for UE errors","submitter":{"id":69518,"url":"http://patchwork.ozlabs.org/api/people/69518/","name":"Nicholas Piggin","email":"npiggin@gmail.com"},"content":"On Tue,  5 Sep 2017 14:15:54 +1000\nBalbir Singh <bsingharora@gmail.com> wrote:\n\n> Walk the page table for NIP and extract the instruction. Then\n> use the instruction to find the effective address via analyse_instr().\n> \n> We might have page table walking races, but we expect them to\n> be rare, the physical address extraction is best effort. The idea\n> is to then hook up this infrastructure to memory failure eventually.\n\nCool. Too bad hardware doesn't give us the RA.\n\n> \n> Signed-off-by: Balbir Singh <bsingharora@gmail.com>\n> ---\n>  arch/powerpc/include/asm/mce.h  |  2 +-\n>  arch/powerpc/kernel/mce.c       |  6 ++++-\n>  arch/powerpc/kernel/mce_power.c | 60 +++++++++++++++++++++++++++++++++++++----\n>  3 files changed, 61 insertions(+), 7 deletions(-)\n> \n> diff --git a/arch/powerpc/include/asm/mce.h b/arch/powerpc/include/asm/mce.h\n> index 75292c7..3a1226e 100644\n> --- a/arch/powerpc/include/asm/mce.h\n> +++ b/arch/powerpc/include/asm/mce.h\n> @@ -204,7 +204,7 @@ struct mce_error_info {\n>  \n>  extern void save_mce_event(struct pt_regs *regs, long handled,\n>  \t\t\t   struct mce_error_info *mce_err, uint64_t nip,\n> -\t\t\t   uint64_t addr);\n> +\t\t\t   uint64_t addr, uint64_t phys_addr);\n>  extern int get_mce_event(struct machine_check_event *mce, bool release);\n>  extern void release_mce_event(void);\n>  extern void machine_check_queue_event(void);\n> diff --git a/arch/powerpc/kernel/mce.c b/arch/powerpc/kernel/mce.c\n> index e254399..f41a75d 100644\n> --- a/arch/powerpc/kernel/mce.c\n> +++ b/arch/powerpc/kernel/mce.c\n> @@ -82,7 +82,7 @@ static void mce_set_error_info(struct machine_check_event *mce,\n>   */\n>  void save_mce_event(struct pt_regs *regs, long handled,\n>  \t\t    struct mce_error_info *mce_err,\n> -\t\t    uint64_t nip, uint64_t addr)\n> +\t\t    uint64_t nip, uint64_t addr, uint64_t phys_addr)\n>  {\n>  \tint index = __this_cpu_inc_return(mce_nest_count) - 1;\n>  \tstruct machine_check_event *mce = this_cpu_ptr(&mce_event[index]);\n> @@ -140,6 +140,10 @@ void save_mce_event(struct pt_regs *regs, long handled,\n>  \t} else if (mce->error_type == MCE_ERROR_TYPE_UE) {\n>  \t\tmce->u.ue_error.effective_address_provided = true;\n>  \t\tmce->u.ue_error.effective_address = addr;\n> +\t\tif (phys_addr != ULONG_MAX) {\n> +\t\t\tmce->u.ue_error.physical_address_provided = true;\n> +\t\t\tmce->u.ue_error.physical_address = phys_addr;\n> +\t\t}\n>  \t}\n>  \treturn;\n>  }\n> diff --git a/arch/powerpc/kernel/mce_power.c b/arch/powerpc/kernel/mce_power.c\n> index b76ca19..b77a698 100644\n> --- a/arch/powerpc/kernel/mce_power.c\n> +++ b/arch/powerpc/kernel/mce_power.c\n> @@ -27,6 +27,25 @@\n>  #include <asm/mmu.h>\n>  #include <asm/mce.h>\n>  #include <asm/machdep.h>\n> +#include <asm/pgtable.h>\n> +#include <asm/pte-walk.h>\n> +#include <asm/sstep.h>\n> +\n> +static unsigned long addr_to_pfn(struct mm_struct *mm, unsigned long addr)\n> +{\n> +\tpte_t *ptep;\n> +\tunsigned long flags;\n> +\n> +\tlocal_irq_save(flags);\n> +\tif (mm == current->mm)\n> +\t\tptep = find_current_mm_pte(mm->pgd, addr, NULL, NULL);\n> +\telse\n> +\t\tptep = find_init_mm_pte(addr, NULL);\n> +\tlocal_irq_restore(flags);\n> +\tif (!ptep)\n> +\t\treturn ULONG_MAX;\n> +\treturn pte_pfn(*ptep);\n\nI think you need to check that it's still cacheable memory here?\n!pte_speical && pfn <= highest_memmap_pfn?\n\n\n> +}\n>  \n>  static void flush_tlb_206(unsigned int num_sets, unsigned int action)\n>  {\n> @@ -489,7 +508,8 @@ static int mce_handle_ierror(struct pt_regs *regs,\n>  \n>  static int mce_handle_derror(struct pt_regs *regs,\n>  \t\tconst struct mce_derror_table table[],\n> -\t\tstruct mce_error_info *mce_err, uint64_t *addr)\n> +\t\tstruct mce_error_info *mce_err, uint64_t *addr,\n> +\t\tuint64_t *phys_addr)\n>  {\n>  \tuint64_t dsisr = regs->dsisr;\n>  \tint handled = 0;\n> @@ -555,7 +575,37 @@ static int mce_handle_derror(struct pt_regs *regs,\n>  \t\tmce_err->initiator = table[i].initiator;\n>  \t\tif (table[i].dar_valid)\n>  \t\t\t*addr = regs->dar;\n> -\n> +\t\telse if (mce_err->severity == MCE_SEV_ERROR_SYNC &&\n> +\t\t\t\ttable[i].error_type == MCE_ERROR_TYPE_UE) {\n> +\t\t\t/*\n> +\t\t\t * Carefully look at the NIP to determine\n> +\t\t\t * the instruction to analyse. Reading the NIP\n> +\t\t\t * in real-mode is tricky and can lead to recursive\n> +\t\t\t * faults\n> +\t\t\t */\n\nWhat recursive faults? If you ensure NIP is cacheable memory, I guess you\ncan get a recursive machine check from reading it, but that's probably\ntolerable.\n\n> +\t\t\tint instr;\n> +\t\t\tstruct mm_struct *mm;\n> +\t\t\tunsigned long nip = regs->nip;\n> +\t\t\tunsigned long pfn = 0, instr_addr;\n> +\t\t\tstruct instruction_op op;\n> +\t\t\tstruct pt_regs tmp = *regs;\n> +\n> +\t\t\tif (user_mode(regs))\n> +\t\t\t\tmm = current->mm;\n> +\t\t\telse\n> +\t\t\t\tmm = &init_mm;\n> +\n> +\t\t\tpfn = addr_to_pfn(mm, nip);\n> +\t\t\tif (pfn != ULONG_MAX) {\n> +\t\t\t\tinstr_addr = (pfn << PAGE_SHIFT) + (nip & ~PAGE_MASK);\n> +\t\t\t\tinstr = *(unsigned int *)(instr_addr);\n> +\t\t\t\tif (!analyse_instr(&op, &tmp, instr)) {\n> +\t\t\t\t\tpfn = addr_to_pfn(mm, op.ea);\n> +\t\t\t\t\t*addr = op.ea;\n> +\t\t\t\t\t*phys_addr = pfn;\n> +\t\t\t\t}\n\nInstruction may no longer be a load/store at this point, right? Or\ninstruction or page tables could have changed so this does not point to\na valid pfn of cacheable memory. memory_failure() has some checks, but\nI wouldn't mind if you put some checks in here so you can enumerate all\nthe ways this can go wrong :P\n\nHopefully after Paulus's instruction analyzer rework you'll be able to\navoid the pt_regs on stack, but that's probably okay for a backport.\nMCEs have a lot of stack and don't use too much.\n\nThanks,\nNick","headers":{"Return-Path":"<linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org>","X-Original-To":["patchwork-incoming@ozlabs.org","linuxppc-dev@lists.ozlabs.org"],"Delivered-To":["patchwork-incoming@ozlabs.org","linuxppc-dev@lists.ozlabs.org","linuxppc-dev@ozlabs.org"],"Received":["from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3])\n\t(using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xn4SF5d5xz9t2y\n\tfor <patchwork-incoming@ozlabs.org>;\n\tWed,  6 Sep 2017 10:38:05 +1000 (AEST)","from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 3xn4SF4JCYzDrLC\n\tfor <patchwork-incoming@ozlabs.org>;\n\tWed,  6 Sep 2017 10:38:05 +1000 (AEST)","from ozlabs.org (bilbo.ozlabs.org [103.22.144.67])\n\t(using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby lists.ozlabs.org (Postfix) with ESMTPS id 3xn4Qb3jnvzDrFT\n\tfor <linuxppc-dev@lists.ozlabs.org>;\n\tWed,  6 Sep 2017 10:36:39 +1000 (AEST)","from ozlabs.org (ozlabs.org [IPv6:2401:3900:2:1::2])\n\tby bilbo.ozlabs.org (Postfix) with ESMTP id 3xn4QZ45tfz8tS1\n\tfor <linuxppc-dev@lists.ozlabs.org>;\n\tWed,  6 Sep 2017 10:36:38 +1000 (AEST)","by ozlabs.org (Postfix)\n\tid 3xn4QZ3l8Vz9t3f; Wed,  6 Sep 2017 10:36:38 +1000 (AEST)","from mail-pg0-x242.google.com (mail-pg0-x242.google.com\n\t[IPv6:2607:f8b0:400e:c05::242])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xn4QZ0fsCz9t3Z\n\tfor <linuxppc-dev@ozlabs.org>; Wed,  6 Sep 2017 10:36:37 +1000 (AEST)","by mail-pg0-x242.google.com with SMTP id q68so2724200pgq.2\n\tfor <linuxppc-dev@ozlabs.org>; Tue, 05 Sep 2017 17:36:37 -0700 (PDT)","from roar.ozlabs.ibm.com (203-219-56-202.tpgi.com.au.\n\t[203.219.56.202]) by smtp.gmail.com with ESMTPSA id\n\te3sm160451pga.80.2017.09.05.17.36.31\n\t(version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256);\n\tTue, 05 Sep 2017 17:36:34 -0700 (PDT)"],"Authentication-Results":["ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"BIIOlcWT\"; dkim-atps=neutral","lists.ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"BIIOlcWT\"; dkim-atps=neutral","lists.ozlabs.org; dkim=pass (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"BIIOlcWT\"; dkim-atps=neutral","ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=gmail.com\n\t(client-ip=2607:f8b0:400e:c05::242; helo=mail-pg0-x242.google.com;\n\tenvelope-from=npiggin@gmail.com; receiver=<UNKNOWN>)","ozlabs.org; dkim=pass (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"BIIOlcWT\"; dkim-atps=neutral"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;\n\th=date:from:to:cc:subject:message-id:in-reply-to:references\n\t:organization:mime-version:content-transfer-encoding;\n\tbh=NW72PCurSGB8Z8RzX4pE32U9/bJ/BI+omupjIyyYvmc=;\n\tb=BIIOlcWTV1As/y1kxgOUVAa03H0BEjJdvVFA+KRNIFd+MaDikk3cZBKspfiF8aT+IT\n\tO3hwB83yagRWypnjmKwjqa+KY5HKBI4iWnxWAvYmVrbcWEWMFDY1jKGfAHmjrRvQYK+a\n\tOCt6HrH6ZCBbuci0VWqoTs2sQo+vw/MsrCrf42VwzKRaMrFJeye7absWIQ67qFwP8oM9\n\tFSLSaRR7zM5exKil1TbqULBpqEt7P+yzUuIOUl/Y/Rspu6FYPMTtrYsZxLPFQsOTkuZx\n\t5d1+UI2ZlX+yWHabD75PROparqC1i3k4f92MZPySTUMU2slVVT5FmsHvRYkNU5obvwDP\n\tTGog==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:date:from:to:cc:subject:message-id:in-reply-to\n\t:references:organization:mime-version:content-transfer-encoding;\n\tbh=NW72PCurSGB8Z8RzX4pE32U9/bJ/BI+omupjIyyYvmc=;\n\tb=lK3p0/oWFhKTraN2MbLx5gnF6yp1/vGxevVUurymoupNeYtq+XbFfUwlXqFakuYMDh\n\txuB/EOoT0UEPQLgA1cYdvr+ld9kk67abeJGcbrpoFyLvLSOzBA6VcbwKDeUx1Cur0Yf1\n\teL/VxWn79Dt4E8ysRbSU2ckPDmQ2olWfAgUqQ+krklqSJbfB5MjWU7C4ichyFtdwnm7v\n\thUMlPgIcNIhyajhT6ClOhN4D0XLqGIwalYnpWQhMdVytsk0EysnWo6eMrwcUkvaujL+C\n\t+aMCQPd0/RaLh5H3kdhBAUlGKuPTFS/8Y7SQ9+Phgl/Gdq+nnJumEgtMyv6jT2iciQ4z\n\tKRSw==","X-Gm-Message-State":"AHPjjUh6sFTif4GMpWP3dm5z1UUUiehljLe78pU9uCbSFkjymFMwWLvQ\n\tjv4WuboXgmQNgA==","X-Google-Smtp-Source":"ADKCNb5hffXMST5ADJy7gAquRl7BybX276WhcCODrFh/rqptg5fatErN0FiSrd2GY4AEXubAi3x6jQ==","X-Received":"by 10.84.246.200 with SMTP id j8mr6241910plt.95.1504658195645;\n\tTue, 05 Sep 2017 17:36:35 -0700 (PDT)","Date":"Wed, 6 Sep 2017 10:36:21 +1000","From":"Nicholas Piggin <npiggin@gmail.com>","To":"Balbir Singh <bsingharora@gmail.com>","Subject":"Re: [rfc 2/3] powerpc/mce: Extract physical_address for UE errors","Message-ID":"<20170906103621.092395dd@roar.ozlabs.ibm.com>","In-Reply-To":"<20170905041555.27696-3-bsingharora@gmail.com>","References":"<20170905041555.27696-1-bsingharora@gmail.com>\n\t<20170905041555.27696-3-bsingharora@gmail.com>","Organization":"IBM","X-Mailer":"Claws Mail 3.15.0-dirty (GTK+ 2.24.31; x86_64-pc-linux-gnu)","MIME-Version":"1.0","Content-Type":"text/plain; charset=US-ASCII","Content-Transfer-Encoding":"7bit","X-BeenThere":"linuxppc-dev@lists.ozlabs.org","X-Mailman-Version":"2.1.23","Precedence":"list","List-Id":"Linux on PowerPC Developers Mail List\n\t<linuxppc-dev.lists.ozlabs.org>","List-Unsubscribe":"<https://lists.ozlabs.org/options/linuxppc-dev>,\n\t<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=unsubscribe>","List-Archive":"<http://lists.ozlabs.org/pipermail/linuxppc-dev/>","List-Post":"<mailto:linuxppc-dev@lists.ozlabs.org>","List-Help":"<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=help>","List-Subscribe":"<https://lists.ozlabs.org/listinfo/linuxppc-dev>,\n\t<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=subscribe>","Cc":"linuxppc-dev@ozlabs.org, mahesh@linux.vnet.ibm.com,\n\tPaul Mackerras <paulus@samba.org>, alistair@popple.id.au","Errors-To":"linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org","Sender":"\"Linuxppc-dev\"\n\t<linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org>"}},{"id":1763808,"web_url":"http://patchwork.ozlabs.org/comment/1763808/","msgid":"<CAKTCnzmWiNgW1Q8A6S30=gTn-EuLQYVBneXX9MKHQOH+n8buAg@mail.gmail.com>","date":"2017-09-06T04:37:05","subject":"Re: [rfc 2/3] powerpc/mce: Extract physical_address for UE errors","submitter":{"id":9347,"url":"http://patchwork.ozlabs.org/api/people/9347/","name":"Balbir Singh","email":"bsingharora@gmail.com"},"content":"On Wed, Sep 6, 2017 at 10:36 AM, Nicholas Piggin <npiggin@gmail.com> wrote:\n> On Tue,  5 Sep 2017 14:15:54 +1000\n> Balbir Singh <bsingharora@gmail.com> wrote:\n>\n>> Walk the page table for NIP and extract the instruction. Then\n>> use the instruction to find the effective address via analyse_instr().\n>>\n>> We might have page table walking races, but we expect them to\n>> be rare, the physical address extraction is best effort. The idea\n>> is to then hook up this infrastructure to memory failure eventually.\n>\n> Cool. Too bad hardware doesn't give us the RA.\n>\n>>\n>> Signed-off-by: Balbir Singh <bsingharora@gmail.com>\n>> ---\n>>  arch/powerpc/include/asm/mce.h  |  2 +-\n>>  arch/powerpc/kernel/mce.c       |  6 ++++-\n>>  arch/powerpc/kernel/mce_power.c | 60 +++++++++++++++++++++++++++++++++++++----\n>>  3 files changed, 61 insertions(+), 7 deletions(-)\n>>\n>> diff --git a/arch/powerpc/include/asm/mce.h b/arch/powerpc/include/asm/mce.h\n>> index 75292c7..3a1226e 100644\n>> --- a/arch/powerpc/include/asm/mce.h\n>> +++ b/arch/powerpc/include/asm/mce.h\n>> @@ -204,7 +204,7 @@ struct mce_error_info {\n>>\n>>  extern void save_mce_event(struct pt_regs *regs, long handled,\n>>                          struct mce_error_info *mce_err, uint64_t nip,\n>> -                        uint64_t addr);\n>> +                        uint64_t addr, uint64_t phys_addr);\n>>  extern int get_mce_event(struct machine_check_event *mce, bool release);\n>>  extern void release_mce_event(void);\n>>  extern void machine_check_queue_event(void);\n>> diff --git a/arch/powerpc/kernel/mce.c b/arch/powerpc/kernel/mce.c\n>> index e254399..f41a75d 100644\n>> --- a/arch/powerpc/kernel/mce.c\n>> +++ b/arch/powerpc/kernel/mce.c\n>> @@ -82,7 +82,7 @@ static void mce_set_error_info(struct machine_check_event *mce,\n>>   */\n>>  void save_mce_event(struct pt_regs *regs, long handled,\n>>                   struct mce_error_info *mce_err,\n>> -                 uint64_t nip, uint64_t addr)\n>> +                 uint64_t nip, uint64_t addr, uint64_t phys_addr)\n>>  {\n>>       int index = __this_cpu_inc_return(mce_nest_count) - 1;\n>>       struct machine_check_event *mce = this_cpu_ptr(&mce_event[index]);\n>> @@ -140,6 +140,10 @@ void save_mce_event(struct pt_regs *regs, long handled,\n>>       } else if (mce->error_type == MCE_ERROR_TYPE_UE) {\n>>               mce->u.ue_error.effective_address_provided = true;\n>>               mce->u.ue_error.effective_address = addr;\n>> +             if (phys_addr != ULONG_MAX) {\n>> +                     mce->u.ue_error.physical_address_provided = true;\n>> +                     mce->u.ue_error.physical_address = phys_addr;\n>> +             }\n>>       }\n>>       return;\n>>  }\n>> diff --git a/arch/powerpc/kernel/mce_power.c b/arch/powerpc/kernel/mce_power.c\n>> index b76ca19..b77a698 100644\n>> --- a/arch/powerpc/kernel/mce_power.c\n>> +++ b/arch/powerpc/kernel/mce_power.c\n>> @@ -27,6 +27,25 @@\n>>  #include <asm/mmu.h>\n>>  #include <asm/mce.h>\n>>  #include <asm/machdep.h>\n>> +#include <asm/pgtable.h>\n>> +#include <asm/pte-walk.h>\n>> +#include <asm/sstep.h>\n>> +\n>> +static unsigned long addr_to_pfn(struct mm_struct *mm, unsigned long addr)\n>> +{\n>> +     pte_t *ptep;\n>> +     unsigned long flags;\n>> +\n>> +     local_irq_save(flags);\n>> +     if (mm == current->mm)\n>> +             ptep = find_current_mm_pte(mm->pgd, addr, NULL, NULL);\n>> +     else\n>> +             ptep = find_init_mm_pte(addr, NULL);\n>> +     local_irq_restore(flags);\n>> +     if (!ptep)\n>> +             return ULONG_MAX;\n>> +     return pte_pfn(*ptep);\n>\n> I think you need to check that it's still cacheable memory here?\n> !pte_speical && pfn <= highest_memmap_pfn?\n>\n\nfind_*pte will return a NULL PTE, so we do have a check there. !pte_special is a\ngood check to have, I'll add it\n\n\n>\n>> +}\n>>\n>>  static void flush_tlb_206(unsigned int num_sets, unsigned int action)\n>>  {\n>> @@ -489,7 +508,8 @@ static int mce_handle_ierror(struct pt_regs *regs,\n>>\n>>  static int mce_handle_derror(struct pt_regs *regs,\n>>               const struct mce_derror_table table[],\n>> -             struct mce_error_info *mce_err, uint64_t *addr)\n>> +             struct mce_error_info *mce_err, uint64_t *addr,\n>> +             uint64_t *phys_addr)\n>>  {\n>>       uint64_t dsisr = regs->dsisr;\n>>       int handled = 0;\n>> @@ -555,7 +575,37 @@ static int mce_handle_derror(struct pt_regs *regs,\n>>               mce_err->initiator = table[i].initiator;\n>>               if (table[i].dar_valid)\n>>                       *addr = regs->dar;\n>> -\n>> +             else if (mce_err->severity == MCE_SEV_ERROR_SYNC &&\n>> +                             table[i].error_type == MCE_ERROR_TYPE_UE) {\n>> +                     /*\n>> +                      * Carefully look at the NIP to determine\n>> +                      * the instruction to analyse. Reading the NIP\n>> +                      * in real-mode is tricky and can lead to recursive\n>> +                      * faults\n>> +                      */\n>\n> What recursive faults? If you ensure NIP is cacheable memory, I guess you\n> can get a recursive machine check from reading it, but that's probably\n> tolerable.\n\n\nYep, just wanted to call it out here.\n\n>\n>> +                     int instr;\n>> +                     struct mm_struct *mm;\n>> +                     unsigned long nip = regs->nip;\n>> +                     unsigned long pfn = 0, instr_addr;\n>> +                     struct instruction_op op;\n>> +                     struct pt_regs tmp = *regs;\n>> +\n>> +                     if (user_mode(regs))\n>> +                             mm = current->mm;\n>> +                     else\n>> +                             mm = &init_mm;\n>> +\n>> +                     pfn = addr_to_pfn(mm, nip);\n>> +                     if (pfn != ULONG_MAX) {\n>> +                             instr_addr = (pfn << PAGE_SHIFT) + (nip & ~PAGE_MASK);\n>> +                             instr = *(unsigned int *)(instr_addr);\n>> +                             if (!analyse_instr(&op, &tmp, instr)) {\n>> +                                     pfn = addr_to_pfn(mm, op.ea);\n>> +                                     *addr = op.ea;\n>> +                                     *phys_addr = pfn;\n>> +                             }\n>\n> Instruction may no longer be a load/store at this point, right? Or\n> instruction or page tables could have changed so this does not point to\n> a valid pfn of cacheable memory. memory_failure() has some checks, but\n> I wouldn't mind if you put some checks in here so you can enumerate all\n> the ways this can go wrong :P\n\nOK.. I'll add a comment or a warning to indicate the error, I suspect at this\npoint, it means we raced w.r.t pte entry or we had a bad NIP/EA. It could\nalso mean the opcode was not a load store.\n\n>\n> Hopefully after Paulus's instruction analyzer rework you'll be able to\n> avoid the pt_regs on stack, but that's probably okay for a backport.\n> MCEs have a lot of stack and don't use too much.\n>\n\nYep, I kept it so that it could be backported, but I can change it in\na follow-up\npatch\n\nThanks for the detailed review!\n\nBalbir Singh.","headers":{"Return-Path":"<linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org>","X-Original-To":["patchwork-incoming@ozlabs.org","linuxppc-dev@lists.ozlabs.org"],"Delivered-To":["patchwork-incoming@ozlabs.org","linuxppc-dev@lists.ozlabs.org","linuxppc-dev@ozlabs.org"],"Received":["from lists.ozlabs.org (lists.ozlabs.org [103.22.144.68])\n\t(using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xn9nt6bM9z9sNV\n\tfor <patchwork-incoming@ozlabs.org>;\n\tWed,  6 Sep 2017 14:38:42 +1000 (AEST)","from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 3xn9nt5RYVzDrRw\n\tfor <patchwork-incoming@ozlabs.org>;\n\tWed,  6 Sep 2017 14:38:42 +1000 (AEST)","from ozlabs.org (ozlabs.org [IPv6:2401:3900:2:1::2])\n\t(using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby lists.ozlabs.org (Postfix) with ESMTPS id 3xn9m55JGdzDrJL\n\tfor <linuxppc-dev@lists.ozlabs.org>;\n\tWed,  6 Sep 2017 14:37:09 +1000 (AEST)","from ozlabs.org (ozlabs.org [IPv6:2401:3900:2:1::2])\n\tby bilbo.ozlabs.org (Postfix) with ESMTP id 3xn9m53R9Pz8t37\n\tfor <linuxppc-dev@lists.ozlabs.org>;\n\tWed,  6 Sep 2017 14:37:09 +1000 (AEST)","by ozlabs.org (Postfix)\n\tid 3xn9m534wmz9sP3; Wed,  6 Sep 2017 14:37:09 +1000 (AEST)","from mail-vk0-x22d.google.com (mail-vk0-x22d.google.com\n\t[IPv6:2607:f8b0:400c:c05::22d])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xn9m46FwFz9sNV\n\tfor <linuxppc-dev@ozlabs.org>; Wed,  6 Sep 2017 14:37:08 +1000 (AEST)","by mail-vk0-x22d.google.com with SMTP id x85so10172623vkx.5\n\tfor <linuxppc-dev@ozlabs.org>; Tue, 05 Sep 2017 21:37:08 -0700 (PDT)","by 10.176.75.25 with HTTP; Tue, 5 Sep 2017 21:37:05 -0700 (PDT)"],"Authentication-Results":["ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"IA1CXmuj\"; dkim-atps=neutral","lists.ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"IA1CXmuj\"; dkim-atps=neutral","lists.ozlabs.org; dkim=pass (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"IA1CXmuj\"; dkim-atps=neutral","ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=gmail.com\n\t(client-ip=2607:f8b0:400c:c05::22d; helo=mail-vk0-x22d.google.com;\n\tenvelope-from=bsingharora@gmail.com; receiver=<UNKNOWN>)","ozlabs.org; dkim=pass (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"IA1CXmuj\"; dkim-atps=neutral"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;\n\th=mime-version:in-reply-to:references:from:date:message-id:subject:to\n\t:cc; bh=KN9Koe1F5LF3+eCjhkqRDlSCsEz1XXtUn1mxu67aiLY=;\n\tb=IA1CXmuj4iQg98N2DVjjzhFeM7ixMng6F34LJR/GzeQLnYt/9eL66hR+maMavKbOU9\n\tHpFjgIqg2nUoQaiDD8Qpg/SbPI6O/9Onz/lESRp2m5pQj8uJSDhqDBCi4zTpsVBWmOIM\n\t2tFDIxMrlrSa5gYQIKP5M3EnSmvgV/7QDtNq8xGjzNkdqL0su1n+EKCsBXVkmbLg1y/h\n\tJmEUpCvkn/5TdOPvHm8UUzhVbooqoeHY4wQjprCmeXxtK2n6CmVEzybjqTydCRgGMpB7\n\tp71+LNsNcxEcCV9yUxV7isngqMG0O0KJOtRk+aHecprVAxlpIkofkYsxrLCnZfII97lW\n\tLUwA==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:mime-version:in-reply-to:references:from:date\n\t:message-id:subject:to:cc;\n\tbh=KN9Koe1F5LF3+eCjhkqRDlSCsEz1XXtUn1mxu67aiLY=;\n\tb=eaLdZ9b2VuMnXETL0UrReqC+h+V+XE8h+yvhV1MoKGJwGTNSLDKaWuKDXpRafKKSlu\n\tj21bUqJGAMmBlrYD0elrALWxln+z11h+0LEMOezuI8r9+jBC/ej/cOxuzOt3r1vogLeU\n\tviisECsGxfC+DI/M+/098HyqPRtE31pl6NfaOqIFGsxmywDlzeBD/1g3lrcOGwLEIR3Z\n\teBbh0K3/LcbLxqUpXfCvXccHOszE8LZ6iSRpvap/Fon3qaQX0sz6LgQpNPg3f1s6Uvyo\n\t1QCjD5bWyoFilDnSO3WRFd0DYnHATiG8z2Wd8QM6KKqQWgp0X9JoE86iQvkuv7mfPtBI\n\tutPw==","X-Gm-Message-State":"AHPjjUhrhAdTofZAbGA8EmXWQtTyOCpc0W5Q+QPL4FW7bbHnSjNHn/wG\n\tnAd7DPRfOWmyweMCXCqzUCFn0MUzNQ==","X-Google-Smtp-Source":"ADKCNb5ylHoLN0zgvpcnZ5GW1pBbfyCX6vLsoNlgmq984HQn7cOPjat5NvkSnhpDua4zN62l9isLog+InC7/Jm3m9iY=","X-Received":"by 10.31.63.12 with SMTP id m12mr775192vka.26.1504672625688; Tue,\n\t05 Sep 2017 21:37:05 -0700 (PDT)","MIME-Version":"1.0","In-Reply-To":"<20170906103621.092395dd@roar.ozlabs.ibm.com>","References":"<20170905041555.27696-1-bsingharora@gmail.com>\n\t<20170905041555.27696-3-bsingharora@gmail.com>\n\t<20170906103621.092395dd@roar.ozlabs.ibm.com>","From":"Balbir Singh <bsingharora@gmail.com>","Date":"Wed, 6 Sep 2017 14:37:05 +1000","Message-ID":"<CAKTCnzmWiNgW1Q8A6S30=gTn-EuLQYVBneXX9MKHQOH+n8buAg@mail.gmail.com>","Subject":"Re: [rfc 2/3] powerpc/mce: Extract physical_address for UE errors","To":"Nicholas Piggin <npiggin@gmail.com>","Content-Type":"text/plain; charset=\"UTF-8\"","X-BeenThere":"linuxppc-dev@lists.ozlabs.org","X-Mailman-Version":"2.1.23","Precedence":"list","List-Id":"Linux on PowerPC Developers Mail List\n\t<linuxppc-dev.lists.ozlabs.org>","List-Unsubscribe":"<https://lists.ozlabs.org/options/linuxppc-dev>,\n\t<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=unsubscribe>","List-Archive":"<http://lists.ozlabs.org/pipermail/linuxppc-dev/>","List-Post":"<mailto:linuxppc-dev@lists.ozlabs.org>","List-Help":"<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=help>","List-Subscribe":"<https://lists.ozlabs.org/listinfo/linuxppc-dev>,\n\t<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=subscribe>","Cc":"linuxppc-dev <linuxppc-dev@ozlabs.org>,\n\tMahesh Jagannath Salgaonkar <mahesh@linux.vnet.ibm.com>,\n\tPaul Mackerras <paulus@samba.org>,\n\tAlistair Popple <alistair@popple.id.au>","Errors-To":"linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org","Sender":"\"Linuxppc-dev\"\n\t<linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org>"}},{"id":1764424,"web_url":"http://patchwork.ozlabs.org/comment/1764424/","msgid":"<1504738572.2371.3.camel@au1.ibm.com>","date":"2017-09-06T22:56:12","subject":"Re: [rfc 2/3] powerpc/mce: Extract physical_address for UE errors","submitter":{"id":83,"url":"http://patchwork.ozlabs.org/api/people/83/","name":"Benjamin Herrenschmidt","email":"benh@au1.ibm.com"},"content":"On Tue, 2017-09-05 at 14:15 +1000, Balbir Singh wrote:\n>  void save_mce_event(struct pt_regs *regs, long handled,\n>                     struct mce_error_info *mce_err,\n> -                   uint64_t nip, uint64_t addr)\n> +                   uint64_t nip, uint64_t addr, uint64_t phys_addr)\n>  {\n>         int index = __this_cpu_inc_return(mce_nest_count) - 1;\n>         struct machine_check_event *mce = this_cpu_ptr(&mce_event[index]);\n> @@ -140,6 +140,10 @@ void save_mce_event(struct pt_regs *regs, long handled,\n>         } else if (mce->error_type == MCE_ERROR_TYPE_UE) {\n>                 mce->u.ue_error.effective_address_provided = true;\n>                 mce->u.ue_error.effective_address = addr;\n> +               if (phys_addr != ULONG_MAX) {\n> +                       mce->u.ue_error.physical_address_provided = true;\n> +                       mce->u.ue_error.physical_address = phys_addr;\n> +               }\n>         }\n>         return;\n\nWhere is \"addr\" coming from ? Keep in mind that on P9 at least, a UE\nwill *not* give you an EA in DAR in most cases.\n\nBen.","headers":{"Return-Path":"<linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org>","X-Original-To":["patchwork-incoming@ozlabs.org","linuxppc-dev@lists.ozlabs.org"],"Delivered-To":["patchwork-incoming@ozlabs.org","linuxppc-dev@lists.ozlabs.org","linuxppc-dev@ozlabs.org"],"Received":["from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3])\n\t(using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xnf9Y57vnz9t2R\n\tfor <patchwork-incoming@ozlabs.org>;\n\tThu,  7 Sep 2017 08:57:21 +1000 (AEST)","from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 3xnf9Y3VplzDrWj\n\tfor <patchwork-incoming@ozlabs.org>;\n\tThu,  7 Sep 2017 08:57:21 +1000 (AEST)","from ozlabs.org (bilbo.ozlabs.org [103.22.144.67])\n\t(using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby lists.ozlabs.org (Postfix) with ESMTPS id 3xnf8P4ssNzDrVk\n\tfor <linuxppc-dev@lists.ozlabs.org>;\n\tThu,  7 Sep 2017 08:56:21 +1000 (AEST)","from ozlabs.org (bilbo.ozlabs.org [103.22.144.67])\n\tby bilbo.ozlabs.org (Postfix) with ESMTP id 3xnf8P4L16z8w2j\n\tfor <linuxppc-dev@lists.ozlabs.org>;\n\tThu,  7 Sep 2017 08:56:21 +1000 (AEST)","by ozlabs.org (Postfix)\n\tid 3xnf8P42Pbz9t2r; Thu,  7 Sep 2017 08:56:21 +1000 (AEST)","from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com\n\t[148.163.156.1])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xnf8P1LY0z9t2R\n\tfor <linuxppc-dev@ozlabs.org>; Thu,  7 Sep 2017 08:56:20 +1000 (AEST)","from pps.filterd (m0098410.ppops.net [127.0.0.1])\n\tby mx0a-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id\n\tv86MrfYM135865\n\tfor <linuxppc-dev@ozlabs.org>; Wed, 6 Sep 2017 18:56:18 -0400","from e23smtp07.au.ibm.com (e23smtp07.au.ibm.com [202.81.31.140])\n\tby mx0a-001b2d01.pphosted.com with ESMTP id 2ctsxdrtj1-1\n\t(version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT)\n\tfor <linuxppc-dev@ozlabs.org>; Wed, 06 Sep 2017 18:56:18 -0400","from localhost\n\tby e23smtp07.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use\n\tOnly! Violators will be prosecuted\n\tfor <linuxppc-dev@ozlabs.org> from <benh@au1.ibm.com>;\n\tThu, 7 Sep 2017 08:56:16 +1000","from d23relay06.au.ibm.com (202.81.31.225)\n\tby e23smtp07.au.ibm.com (202.81.31.204) with IBM ESMTP SMTP Gateway:\n\tAuthorized Use Only! Violators will be prosecuted; \n\tThu, 7 Sep 2017 08:56:15 +1000","from d23av02.au.ibm.com (d23av02.au.ibm.com [9.190.235.138])\n\tby d23relay06.au.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id\n\tv86MuE0n41091218\n\tfor <linuxppc-dev@ozlabs.org>; Thu, 7 Sep 2017 08:56:14 +1000","from d23av02.au.ibm.com (localhost [127.0.0.1])\n\tby d23av02.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id\n\tv86Mu5cV002972\n\tfor <linuxppc-dev@ozlabs.org>; Thu, 7 Sep 2017 08:56:05 +1000","from ozlabs.au.ibm.com (ozlabs.au.ibm.com [9.192.253.14])\n\tby d23av02.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVin) with ESMTP id\n\tv86Mu5w2002969; Thu, 7 Sep 2017 08:56:05 +1000","from pasglop (unknown [9.192.205.6])\n\t(using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.au.ibm.com (Postfix) with ESMTPSA id 94922A0108;\n\tThu,  7 Sep 2017 08:56:13 +1000 (AEST)"],"Authentication-Results":"ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=au1.ibm.com\n\t(client-ip=148.163.156.1; helo=mx0a-001b2d01.pphosted.com;\n\tenvelope-from=benh@au1.ibm.com; receiver=<UNKNOWN>)","Subject":"Re: [rfc 2/3] powerpc/mce: Extract physical_address for UE errors","From":"Benjamin Herrenschmidt <benh@au1.ibm.com>","To":"Balbir Singh <bsingharora@gmail.com>, npiggin@gmail.com,\n\tmahesh@linux.vnet.ibm.com, alistair@popple.id.au","Date":"Thu, 07 Sep 2017 08:56:12 +1000","In-Reply-To":"<20170905041555.27696-3-bsingharora@gmail.com>","References":"<20170905041555.27696-1-bsingharora@gmail.com>\n\t<20170905041555.27696-3-bsingharora@gmail.com>","Organization":"IBM Australia","Content-Type":"text/plain; charset=\"UTF-8\"","X-Mailer":"Evolution 3.24.5 (3.24.5-1.fc26) ","Mime-Version":"1.0","Content-Transfer-Encoding":"7bit","X-TM-AS-MML":"disable","x-cbid":"17090622-0044-0000-0000-0000028603A3","X-IBM-AV-DETECTION":"SAVI=unused REMOTE=unused XFE=unused","x-cbparentid":"17090622-0045-0000-0000-0000071B041E","Message-Id":"<1504738572.2371.3.camel@au1.ibm.com>","X-Proofpoint-Virus-Version":"vendor=fsecure engine=2.50.10432:, ,\n\tdefinitions=2017-09-06_07:, , signatures=0","X-Proofpoint-Spam-Details":"rule=outbound_notspam policy=outbound score=0\n\tspamscore=0 suspectscore=0\n\tmalwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam\n\tadjust=0 reason=mlx scancount=1 engine=8.0.1-1707230000\n\tdefinitions=main-1709060324","X-BeenThere":"linuxppc-dev@lists.ozlabs.org","X-Mailman-Version":"2.1.23","Precedence":"list","List-Id":"Linux on PowerPC Developers Mail List\n\t<linuxppc-dev.lists.ozlabs.org>","List-Unsubscribe":"<https://lists.ozlabs.org/options/linuxppc-dev>,\n\t<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=unsubscribe>","List-Archive":"<http://lists.ozlabs.org/pipermail/linuxppc-dev/>","List-Post":"<mailto:linuxppc-dev@lists.ozlabs.org>","List-Help":"<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=help>","List-Subscribe":"<https://lists.ozlabs.org/listinfo/linuxppc-dev>,\n\t<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=subscribe>","Reply-To":"benh@au1.ibm.com","Cc":"linuxppc-dev@ozlabs.org","Errors-To":"linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org","Sender":"\"Linuxppc-dev\"\n\t<linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org>"}},{"id":1764471,"web_url":"http://patchwork.ozlabs.org/comment/1764471/","msgid":"<CAKTCnzkiRDQmtKJ1htDh9m7JoHcbHHTm5W-8GbfSa-cWv6m55A@mail.gmail.com>","date":"2017-09-07T01:52:14","subject":"Re: [rfc 2/3] powerpc/mce: Extract physical_address for UE errors","submitter":{"id":9347,"url":"http://patchwork.ozlabs.org/api/people/9347/","name":"Balbir Singh","email":"bsingharora@gmail.com"},"content":"On Thu, Sep 7, 2017 at 8:56 AM, Benjamin Herrenschmidt <benh@au1.ibm.com> wrote:\n> On Tue, 2017-09-05 at 14:15 +1000, Balbir Singh wrote:\n>>  void save_mce_event(struct pt_regs *regs, long handled,\n>>                     struct mce_error_info *mce_err,\n>> -                   uint64_t nip, uint64_t addr)\n>> +                   uint64_t nip, uint64_t addr, uint64_t phys_addr)\n>>  {\n>>         int index = __this_cpu_inc_return(mce_nest_count) - 1;\n>>         struct machine_check_event *mce = this_cpu_ptr(&mce_event[index]);\n>> @@ -140,6 +140,10 @@ void save_mce_event(struct pt_regs *regs, long handled,\n>>         } else if (mce->error_type == MCE_ERROR_TYPE_UE) {\n>>                 mce->u.ue_error.effective_address_provided = true;\n>>                 mce->u.ue_error.effective_address = addr;\n>> +               if (phys_addr != ULONG_MAX) {\n>> +                       mce->u.ue_error.physical_address_provided = true;\n>> +                       mce->u.ue_error.physical_address = phys_addr;\n>> +               }\n>>         }\n>>         return;\n>\n> Where is \"addr\" coming from ? Keep in mind that on P9 at least, a UE\n> will *not* give you an EA in DAR in most cases.\n\nThe EA is derived in mce_handle_derror() via page table walk and\nanalyse_instr(), its the best\nwe can do FWIK\n\nBalbir Singh.","headers":{"Return-Path":"<linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org>","X-Original-To":["patchwork-incoming@ozlabs.org","linuxppc-dev@lists.ozlabs.org"],"Delivered-To":["patchwork-incoming@ozlabs.org","linuxppc-dev@lists.ozlabs.org","linuxppc-dev@ozlabs.org"],"Received":["from lists.ozlabs.org (lists.ozlabs.org [103.22.144.68])\n\t(using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xnk561Ggfz9s8J\n\tfor <patchwork-incoming@ozlabs.org>;\n\tThu,  7 Sep 2017 11:53:46 +1000 (AEST)","from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 3xnk556zlZzDrWX\n\tfor <patchwork-incoming@ozlabs.org>;\n\tThu,  7 Sep 2017 11:53:45 +1000 (AEST)","from ozlabs.org (bilbo.ozlabs.org [103.22.144.67])\n\t(using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby lists.ozlabs.org (Postfix) with ESMTPS id 3xnk3R0HTFzDrVm\n\tfor <linuxppc-dev@lists.ozlabs.org>;\n\tThu,  7 Sep 2017 11:52:19 +1000 (AEST)","from ozlabs.org (ozlabs.org [IPv6:2401:3900:2:1::2])\n\tby bilbo.ozlabs.org (Postfix) with ESMTP id 3xnk3Q6hWFz8shS\n\tfor <linuxppc-dev@lists.ozlabs.org>;\n\tThu,  7 Sep 2017 11:52:18 +1000 (AEST)","by ozlabs.org (Postfix)\n\tid 3xnk3Q6W1Xz9t2v; Thu,  7 Sep 2017 11:52:18 +1000 (AEST)","from mail-ua0-x242.google.com (mail-ua0-x242.google.com\n\t[IPv6:2607:f8b0:400c:c08::242])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xnk3Q183Xz9s8J\n\tfor <linuxppc-dev@ozlabs.org>; Thu,  7 Sep 2017 11:52:17 +1000 (AEST)","by mail-ua0-x242.google.com with SMTP id q29so2696176uaf.4\n\tfor <linuxppc-dev@ozlabs.org>; Wed, 06 Sep 2017 18:52:17 -0700 (PDT)","by 10.176.75.25 with HTTP; Wed, 6 Sep 2017 18:52:14 -0700 (PDT)"],"Authentication-Results":["ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"cFl0EYkD\"; dkim-atps=neutral","lists.ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"cFl0EYkD\"; dkim-atps=neutral","lists.ozlabs.org; dkim=pass (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"cFl0EYkD\"; dkim-atps=neutral","ozlabs.org;\n\tspf=pass (mailfrom) smtp.mailfrom=gmail.com\n\t(client-ip=2607:f8b0:400c:c08::242; helo=mail-ua0-x242.google.com;\n\tenvelope-from=bsingharora@gmail.com; receiver=<UNKNOWN>)","ozlabs.org; dkim=pass (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"cFl0EYkD\"; dkim-atps=neutral"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;\n\th=mime-version:in-reply-to:references:from:date:message-id:subject:to\n\t:cc; bh=jyBJb0ZTkf9iErY/lT46JOytUeCeUN6FUXqSsrSr3HM=;\n\tb=cFl0EYkDFc0orBxfct99qxYKd20hP8lmY0dmikm/MejC3hwXGl8rSTa0qh56lJDqX7\n\tsbGjZqFFZ001xj0IEDoPf0gss6w593hAftd7AGsXkkGq2ceQr2ilK7Xy+0WN8vXY0sCV\n\tZPmDrf22RInak9bmSk9dgdbGmFWodiVNu10VS0FIKyK6ZJLT37ELVn6VWBiRpo+IUL2P\n\tUbuDz9RAX4Z18MFmek5YuosOlP6vISgXah5INyHGHexCnVcyQwaOh0QiDStRRANMmYuu\n\tmDjiULt11lIgWAM8L06DwSu1ci/Z1dxKKAtOVxE0ATxcntO7V4f8DD6z57UbwdxFO8Xi\n\tEy2Q==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:mime-version:in-reply-to:references:from:date\n\t:message-id:subject:to:cc;\n\tbh=jyBJb0ZTkf9iErY/lT46JOytUeCeUN6FUXqSsrSr3HM=;\n\tb=U1SBaZJN/cnIWZrAEUwQAV7/pEYX6VVJO2+CYwj9Y6ketZWomOS9P1i6fTNKhQBojp\n\t5HmzvjZoPlUFEZuu2wUbRsoGVvrs4oIQi/NT6WENgXTD8EOT1zt9jq7Y0r72QgD7rtGN\n\txhW2rk1qfx5ZxPgfnLg+QMaZlWQgNVfFXnyyeHZHHbgQfjoBVJbdBF3ElS0hcGdoiAX6\n\tkWnpcCiPQE4Gv471b9HckNysGJcj6vtCOUe5DhjWN827M8ICLvdFme3ABcT/vJfiWNHw\n\tGrjboV23LQpEl+DM6E2RoCM8QHaASnZnYn5hxCNsz8O7WiPAbwyrgoaeETVoR1IHCqe8\n\tuG6A==","X-Gm-Message-State":"AHPjjUgJ3fMWXmgqXPOQeXK8jnQVGCP+v8omwAlOwzgaDtSwhBGXdjTV\n\tgAOowzRPlb1lDcuslLY6OnZRLGRFVA==","X-Google-Smtp-Source":"ADKCNb4kx19GhWi4UXrR/xXXh3zrMI6RnELBeJxbJKEEYyl+xAFm3KCFmIoKBWIBMFM8lROnbBqD5ZH5Cg/OOTCHTg8=","X-Received":"by 10.159.61.111 with SMTP id m47mr793435uai.33.1504749135438;\n\tWed, 06 Sep 2017 18:52:15 -0700 (PDT)","MIME-Version":"1.0","In-Reply-To":"<1504738572.2371.3.camel@au1.ibm.com>","References":"<20170905041555.27696-1-bsingharora@gmail.com>\n\t<20170905041555.27696-3-bsingharora@gmail.com>\n\t<1504738572.2371.3.camel@au1.ibm.com>","From":"Balbir Singh <bsingharora@gmail.com>","Date":"Thu, 7 Sep 2017 11:52:14 +1000","Message-ID":"<CAKTCnzkiRDQmtKJ1htDh9m7JoHcbHHTm5W-8GbfSa-cWv6m55A@mail.gmail.com>","Subject":"Re: [rfc 2/3] powerpc/mce: Extract physical_address for UE errors","To":"Benjamin Herrenschmidt <benh@au1.ibm.com>","Content-Type":"text/plain; charset=\"UTF-8\"","X-BeenThere":"linuxppc-dev@lists.ozlabs.org","X-Mailman-Version":"2.1.23","Precedence":"list","List-Id":"Linux on PowerPC Developers Mail List\n\t<linuxppc-dev.lists.ozlabs.org>","List-Unsubscribe":"<https://lists.ozlabs.org/options/linuxppc-dev>,\n\t<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=unsubscribe>","List-Archive":"<http://lists.ozlabs.org/pipermail/linuxppc-dev/>","List-Post":"<mailto:linuxppc-dev@lists.ozlabs.org>","List-Help":"<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=help>","List-Subscribe":"<https://lists.ozlabs.org/listinfo/linuxppc-dev>,\n\t<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=subscribe>","Cc":"linuxppc-dev <linuxppc-dev@ozlabs.org>,\n\tMahesh Jagannath Salgaonkar <mahesh@linux.vnet.ibm.com>,\n\tNicholas Piggin <npiggin@gmail.com>,\n\tAlistair Popple <alistair@popple.id.au>","Errors-To":"linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org","Sender":"\"Linuxppc-dev\"\n\t<linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org>"}},{"id":1765066,"web_url":"http://patchwork.ozlabs.org/comment/1765066/","msgid":"<910bf7a9-a7e1-9f26-2f63-88578bed72a6@linux.vnet.ibm.com>","date":"2017-09-08T03:41:24","subject":"Re: [rfc 2/3] powerpc/mce: Extract physical_address for UE errors","submitter":{"id":1436,"url":"http://patchwork.ozlabs.org/api/people/1436/","name":"Mahesh J Salgaonkar","email":"mahesh@linux.vnet.ibm.com"},"content":"On 09/05/2017 09:45 AM, Balbir Singh wrote:\n> Walk the page table for NIP and extract the instruction. Then\n> use the instruction to find the effective address via analyse_instr().\n> \n> We might have page table walking races, but we expect them to\n> be rare, the physical address extraction is best effort. The idea\n> is to then hook up this infrastructure to memory failure eventually.\n> \n> Signed-off-by: Balbir Singh <bsingharora@gmail.com>\n> ---\n>  arch/powerpc/include/asm/mce.h  |  2 +-\n>  arch/powerpc/kernel/mce.c       |  6 ++++-\n>  arch/powerpc/kernel/mce_power.c | 60 +++++++++++++++++++++++++++++++++++++----\n>  3 files changed, 61 insertions(+), 7 deletions(-)\n> \n> diff --git a/arch/powerpc/include/asm/mce.h b/arch/powerpc/include/asm/mce.h\n> index 75292c7..3a1226e 100644\n> --- a/arch/powerpc/include/asm/mce.h\n> +++ b/arch/powerpc/include/asm/mce.h\n> @@ -204,7 +204,7 @@ struct mce_error_info {\n> \n>  extern void save_mce_event(struct pt_regs *regs, long handled,\n>  \t\t\t   struct mce_error_info *mce_err, uint64_t nip,\n> -\t\t\t   uint64_t addr);\n> +\t\t\t   uint64_t addr, uint64_t phys_addr);\n>  extern int get_mce_event(struct machine_check_event *mce, bool release);\n>  extern void release_mce_event(void);\n>  extern void machine_check_queue_event(void);\n> diff --git a/arch/powerpc/kernel/mce.c b/arch/powerpc/kernel/mce.c\n> index e254399..f41a75d 100644\n> --- a/arch/powerpc/kernel/mce.c\n> +++ b/arch/powerpc/kernel/mce.c\n> @@ -82,7 +82,7 @@ static void mce_set_error_info(struct machine_check_event *mce,\n>   */\n>  void save_mce_event(struct pt_regs *regs, long handled,\n>  \t\t    struct mce_error_info *mce_err,\n> -\t\t    uint64_t nip, uint64_t addr)\n> +\t\t    uint64_t nip, uint64_t addr, uint64_t phys_addr)\n>  {\n>  \tint index = __this_cpu_inc_return(mce_nest_count) - 1;\n>  \tstruct machine_check_event *mce = this_cpu_ptr(&mce_event[index]);\n> @@ -140,6 +140,10 @@ void save_mce_event(struct pt_regs *regs, long handled,\n>  \t} else if (mce->error_type == MCE_ERROR_TYPE_UE) {\n>  \t\tmce->u.ue_error.effective_address_provided = true;\n>  \t\tmce->u.ue_error.effective_address = addr;\n> +\t\tif (phys_addr != ULONG_MAX) {\n> +\t\t\tmce->u.ue_error.physical_address_provided = true;\n> +\t\t\tmce->u.ue_error.physical_address = phys_addr;\n> +\t\t}\n>  \t}\n>  \treturn;\n>  }\n> diff --git a/arch/powerpc/kernel/mce_power.c b/arch/powerpc/kernel/mce_power.c\n> index b76ca19..b77a698 100644\n> --- a/arch/powerpc/kernel/mce_power.c\n> +++ b/arch/powerpc/kernel/mce_power.c\n> @@ -27,6 +27,25 @@\n>  #include <asm/mmu.h>\n>  #include <asm/mce.h>\n>  #include <asm/machdep.h>\n> +#include <asm/pgtable.h>\n> +#include <asm/pte-walk.h>\n> +#include <asm/sstep.h>\n> +\n> +static unsigned long addr_to_pfn(struct mm_struct *mm, unsigned long addr)\n> +{\n> +\tpte_t *ptep;\n> +\tunsigned long flags;\n> +\n> +\tlocal_irq_save(flags);\n> +\tif (mm == current->mm)\n> +\t\tptep = find_current_mm_pte(mm->pgd, addr, NULL, NULL);\n> +\telse\n> +\t\tptep = find_init_mm_pte(addr, NULL);\n> +\tlocal_irq_restore(flags);\n> +\tif (!ptep)\n> +\t\treturn ULONG_MAX;\n> +\treturn pte_pfn(*ptep);\n> +}\n> \n>  static void flush_tlb_206(unsigned int num_sets, unsigned int action)\n>  {\n> @@ -489,7 +508,8 @@ static int mce_handle_ierror(struct pt_regs *regs,\n> \n>  static int mce_handle_derror(struct pt_regs *regs,\n>  \t\tconst struct mce_derror_table table[],\n> -\t\tstruct mce_error_info *mce_err, uint64_t *addr)\n> +\t\tstruct mce_error_info *mce_err, uint64_t *addr,\n> +\t\tuint64_t *phys_addr)\n>  {\n>  \tuint64_t dsisr = regs->dsisr;\n>  \tint handled = 0;\n> @@ -555,7 +575,37 @@ static int mce_handle_derror(struct pt_regs *regs,\n>  \t\tmce_err->initiator = table[i].initiator;\n>  \t\tif (table[i].dar_valid)\n>  \t\t\t*addr = regs->dar;\n> -\n> +\t\telse if (mce_err->severity == MCE_SEV_ERROR_SYNC &&\n> +\t\t\t\ttable[i].error_type == MCE_ERROR_TYPE_UE) {\n> +\t\t\t/*\n> +\t\t\t * Carefully look at the NIP to determine\n> +\t\t\t * the instruction to analyse. Reading the NIP\n> +\t\t\t * in real-mode is tricky and can lead to recursive\n> +\t\t\t * faults\n> +\t\t\t */\n> +\t\t\tint instr;\n> +\t\t\tstruct mm_struct *mm;\n> +\t\t\tunsigned long nip = regs->nip;\n> +\t\t\tunsigned long pfn = 0, instr_addr;\n> +\t\t\tstruct instruction_op op;\n> +\t\t\tstruct pt_regs tmp = *regs;\n> +\n> +\t\t\tif (user_mode(regs))\n> +\t\t\t\tmm = current->mm;\n> +\t\t\telse\n> +\t\t\t\tmm = &init_mm;\n> +\n> +\t\t\tpfn = addr_to_pfn(mm, nip);\n> +\t\t\tif (pfn != ULONG_MAX) {\n> +\t\t\t\tinstr_addr = (pfn << PAGE_SHIFT) + (nip & ~PAGE_MASK);\n> +\t\t\t\tinstr = *(unsigned int *)(instr_addr);\n> +\t\t\t\tif (!analyse_instr(&op, &tmp, instr)) {\n> +\t\t\t\t\tpfn = addr_to_pfn(mm, op.ea);\n> +\t\t\t\t\t*addr = op.ea;\n> +\t\t\t\t\t*phys_addr = pfn;\n> +\t\t\t\t}\n> +\t\t\t}\n> +\t\t}\n>  \t\tfound = 1;\n>  \t}\n> \n> @@ -592,19 +642,19 @@ static long mce_handle_error(struct pt_regs *regs,\n>  \t\tconst struct mce_ierror_table itable[])\n>  {\n>  \tstruct mce_error_info mce_err = { 0 };\n> -\tuint64_t addr;\n> +\tuint64_t addr, phys_addr;\n\nYou may want to initialize phys_addr with ULONG_MAX.\n\n>  \tuint64_t srr1 = regs->msr;\n>  \tlong handled;\n> \n>  \tif (SRR1_MC_LOADSTORE(srr1))\n> -\t\thandled = mce_handle_derror(regs, dtable, &mce_err, &addr);\n> +\t\thandled = mce_handle_derror(regs, dtable, &mce_err, &addr, &phys_addr);\n>  \telse\n>  \t\thandled = mce_handle_ierror(regs, itable, &mce_err, &addr);\n> \n>  \tif (!handled && mce_err.error_type == MCE_ERROR_TYPE_UE)\n>  \t\thandled = mce_handle_ue_error(regs);\n> \n> -\tsave_mce_event(regs, handled, &mce_err, regs->nip, addr);\n> +\tsave_mce_event(regs, handled, &mce_err, regs->nip, addr, phys_addr);\n> \n>  \treturn handled;\n>  }\n> \n\nThanks,\n-Mahesh.","headers":{"Return-Path":"<linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org>","X-Original-To":["patchwork-incoming@ozlabs.org","linuxppc-dev@lists.ozlabs.org"],"Delivered-To":["patchwork-incoming@ozlabs.org","linuxppc-dev@lists.ozlabs.org","linuxppc-dev@ozlabs.org"],"Received":["from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3])\n\t(using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xpNTp0kr0z9sPk\n\tfor <patchwork-incoming@ozlabs.org>;\n\tFri,  8 Sep 2017 13:43:58 +1000 (AEST)","from lists.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3])\n\tby lists.ozlabs.org (Postfix) with ESMTP id 3xpNTp0103zDrZQ\n\tfor <patchwork-incoming@ozlabs.org>;\n\tFri,  8 Sep 2017 13:43:58 +1000 (AEST)","from ozlabs.org (ozlabs.org [IPv6:2401:3900:2:1::2])\n\t(using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby lists.ozlabs.org (Postfix) with ESMTPS id 3xpNR772dFzDrYp\n\tfor <linuxppc-dev@lists.ozlabs.org>;\n\tFri,  8 Sep 2017 13:41:39 +1000 (AEST)","from ozlabs.org (ozlabs.org [IPv6:2401:3900:2:1::2])\n\tby bilbo.ozlabs.org (Postfix) with ESMTP id 3xpNR72d3Kz8tNJ\n\tfor <linuxppc-dev@lists.ozlabs.org>;\n\tFri,  8 Sep 2017 13:41:39 +1000 (AEST)","by ozlabs.org (Postfix)\n\tid 3xpNR71H15z9sMN; Fri,  8 Sep 2017 13:41:39 +1000 (AEST)","from mx0a-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com\n\t[148.163.158.5])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256\n\tbits)) (No client certificate requested)\n\tby ozlabs.org (Postfix) with ESMTPS id 3xpNR42tjYz9t2Q\n\tfor <linuxppc-dev@ozlabs.org>; Fri,  8 Sep 2017 13:41:35 +1000 (AEST)","from pps.filterd (m0098416.ppops.net [127.0.0.1])\n\tby mx0b-001b2d01.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id\n\tv883dYL0126614\n\tfor <linuxppc-dev@ozlabs.org>; Thu, 7 Sep 2017 23:41:33 -0400","from e23smtp04.au.ibm.com (e23smtp04.au.ibm.com [202.81.31.146])\n\tby mx0b-001b2d01.pphosted.com with ESMTP id 2cuc9mum4q-1\n\t(version=TLSv1.2 cipher=AES256-SHA bits=256 verify=NOT)\n\tfor <linuxppc-dev@ozlabs.org>; Thu, 07 Sep 2017 23:41:33 -0400","from localhost\n\tby e23smtp04.au.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use\n\tOnly! Violators will be prosecuted\n\tfor <linuxppc-dev@ozlabs.org> from <mahesh@linux.vnet.ibm.com>;\n\tFri, 8 Sep 2017 13:41:30 +1000","from d23relay09.au.ibm.com (202.81.31.228)\n\tby e23smtp04.au.ibm.com (202.81.31.210) with IBM ESMTP SMTP Gateway:\n\tAuthorized Use Only! Violators will be prosecuted; \n\tFri, 8 Sep 2017 13:41:28 +1000","from d23av05.au.ibm.com (d23av05.au.ibm.com [9.190.234.119])\n\tby d23relay09.au.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id\n\tv883fSSI41943234\n\tfor <linuxppc-dev@ozlabs.org>; Fri, 8 Sep 2017 13:41:28 +1000","from d23av05.au.ibm.com (localhost [127.0.0.1])\n\tby d23av05.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVout) with ESMTP id\n\tv883fRHd023467\n\tfor <linuxppc-dev@ozlabs.org>; Fri, 8 Sep 2017 13:41:28 +1000","from [9.202.5.157] ([9.202.5.157])\n\tby d23av05.au.ibm.com (8.14.4/8.14.4/NCO v10.0 AVin) with ESMTP id\n\tv883fO6P023380; Fri, 8 Sep 2017 13:41:26 +1000"],"Authentication-Results":"ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=linux.vnet.ibm.com\n\t(client-ip=148.163.158.5; helo=mx0a-001b2d01.pphosted.com;\n\tenvelope-from=mahesh@linux.vnet.ibm.com; receiver=<UNKNOWN>)","Subject":"Re: [rfc 2/3] powerpc/mce: Extract physical_address for UE errors","To":"Balbir Singh <bsingharora@gmail.com>, npiggin@gmail.com,\n\talistair@popple.id.au","References":"<20170905041555.27696-1-bsingharora@gmail.com>\n\t<20170905041555.27696-3-bsingharora@gmail.com>","From":"Mahesh Jagannath Salgaonkar <mahesh@linux.vnet.ibm.com>","Date":"Fri, 8 Sep 2017 09:11:24 +0530","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101\n\tThunderbird/52.2.1","MIME-Version":"1.0","In-Reply-To":"<20170905041555.27696-3-bsingharora@gmail.com>","Content-Type":"text/plain; charset=utf-8","Content-Language":"en-MW","Content-Transfer-Encoding":"7bit","X-TM-AS-MML":"disable","x-cbid":"17090803-0012-0000-0000-0000025D0C61","X-IBM-AV-DETECTION":"SAVI=unused REMOTE=unused XFE=unused","x-cbparentid":"17090803-0013-0000-0000-0000077A0D07","Message-Id":"<910bf7a9-a7e1-9f26-2f63-88578bed72a6@linux.vnet.ibm.com>","X-Proofpoint-Virus-Version":"vendor=fsecure engine=2.50.10432:, ,\n\tdefinitions=2017-09-08_02:, , signatures=0","X-Proofpoint-Spam-Details":"rule=outbound_notspam policy=outbound score=0\n\tspamscore=0 suspectscore=0\n\tmalwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam\n\tadjust=0 reason=mlx scancount=1 engine=8.0.1-1707230000\n\tdefinitions=main-1709080056","X-BeenThere":"linuxppc-dev@lists.ozlabs.org","X-Mailman-Version":"2.1.23","Precedence":"list","List-Id":"Linux on PowerPC Developers Mail List\n\t<linuxppc-dev.lists.ozlabs.org>","List-Unsubscribe":"<https://lists.ozlabs.org/options/linuxppc-dev>,\n\t<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=unsubscribe>","List-Archive":"<http://lists.ozlabs.org/pipermail/linuxppc-dev/>","List-Post":"<mailto:linuxppc-dev@lists.ozlabs.org>","List-Help":"<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=help>","List-Subscribe":"<https://lists.ozlabs.org/listinfo/linuxppc-dev>,\n\t<mailto:linuxppc-dev-request@lists.ozlabs.org?subject=subscribe>","Cc":"linuxppc-dev@ozlabs.org","Errors-To":"linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org","Sender":"\"Linuxppc-dev\"\n\t<linuxppc-dev-bounces+patchwork-incoming=ozlabs.org@lists.ozlabs.org>"}}]