LinuxPPC-Dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* Re: [PATCH kernel v2 0/7] powerpc/powenv/ioda: Allow huge DMA window at 4GB
From: Alexey Kardashevskiy @ 2020-04-08  9:43 UTC (permalink / raw)
  To: linuxppc-dev; +Cc: Alistair Popple, Fabiano Rosas, kvm, kvm-ppc, David Gibson
In-Reply-To: <20200323075354.93825-1-aik@ozlabs.ru>



On 23/03/2020 18:53, Alexey Kardashevskiy wrote:
> Here is an attempt to support bigger DMA space for devices
> supporting DMA masks less than 59 bits (GPUs come into mind
> first). POWER9 PHBs have an option to map 2 windows at 0
> and select a windows based on DMA address being below or above
> 4GB.
> 
> This adds the "iommu=iommu_bypass" kernel parameter and
> supports VFIO+pseries machine - current this requires telling
> upstream+unmodified QEMU about this via
> -global spapr-pci-host-bridge.dma64_win_addr=0x100000000
> or per-phb property. 4/4 advertises the new option but
> there is no automation around it in QEMU (should it be?).
> 
> For now it is either 1<<59 or 4GB mode; dynamic switching is
> not supported (could be via sysfs).
> 
> This is a rebased version of
> https://lore.kernel.org/kvm/20191202015953.127902-1-aik@ozlabs.ru/
> 
> The main change since v1 is that now it is 7 patches with
> clearer separation of steps.
> 
> 
> This is based on 6c90b86a745a "Merge tag 'mmc-v5.6-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/ulfh/mmc"
> 
> Please comment. Thanks.

Ping?


> 
> 
> 
> Alexey Kardashevskiy (7):
>   powerpc/powernv/ioda: Move TCE bypass base to PE
>   powerpc/powernv/ioda: Rework for huge DMA window at 4GB
>   powerpc/powernv/ioda: Allow smaller TCE table levels
>   powerpc/powernv/phb4: Use IOMMU instead of bypassing
>   powerpc/iommu: Add a window number to
>     iommu_table_group_ops::get_table_size
>   powerpc/powernv/phb4: Add 4GB IOMMU bypass mode
>   vfio/spapr_tce: Advertise and allow a huge DMA windows at 4GB
> 
>  arch/powerpc/include/asm/iommu.h              |   3 +
>  arch/powerpc/include/asm/opal-api.h           |   9 +-
>  arch/powerpc/include/asm/opal.h               |   2 +
>  arch/powerpc/platforms/powernv/pci.h          |   4 +-
>  include/uapi/linux/vfio.h                     |   2 +
>  arch/powerpc/platforms/powernv/npu-dma.c      |   1 +
>  arch/powerpc/platforms/powernv/opal-call.c    |   2 +
>  arch/powerpc/platforms/powernv/pci-ioda-tce.c |   4 +-
>  arch/powerpc/platforms/powernv/pci-ioda.c     | 234 ++++++++++++++----
>  drivers/vfio/vfio_iommu_spapr_tce.c           |  17 +-
>  10 files changed, 213 insertions(+), 65 deletions(-)
> 

-- 
Alexey

^ permalink raw reply

* Re: [PATCH V2 0/3] mm/debug: Add more arch page table helper tests
From: Anshuman Khandual @ 2020-04-08  7:11 UTC (permalink / raw)
  To: Gerald Schaefer
  Cc: linux-doc, Heiko Carstens, linux-mm, Paul Mackerras,
	H. Peter Anvin, linux-riscv, Will Deacon, linux-arch, linux-s390,
	Jonathan Corbet, x86, Mike Rapoport, Christian Borntraeger,
	Ingo Molnar, Catalin Marinas, linux-snps-arc, Vasily Gorbik,
	Borislav Petkov, Paul Walmsley, Kirill A . Shutemov,
	Thomas Gleixner, linux-arm-kernel, Vineet Gupta, linux-kernel,
	Palmer Dabbelt, Andrew Morton, linuxppc-dev
In-Reply-To: <20200407175440.41cc00a5@thinkpad>


On 04/07/2020 09:24 PM, Gerald Schaefer wrote:
> On Sun, 5 Apr 2020 17:58:14 +0530
> Anshuman Khandual <anshuman.khandual@arm.com> wrote:
> 
> [...]
>>>
>>> Could be fixed like this (the first de-reference is a bit special,
>>> because at that point *ptep does not really point to a large (pmd) entry
>>> yet, it is initially an invalid pte entry, which breaks our huge_ptep_get()  
>>
>> There seems to be an inconsistency on s390 platform. Even though it defines
>> a huge_ptep_get() override, it does not subscribe __HAVE_ARCH_HUGE_PTEP_GET
>> which should have forced it fallback on generic huge_ptep_get() but it does
>> not :) Then I realized that __HAVE_ARCH_HUGE_PTEP_GET only makes sense when
>> an arch uses <asm-generic/hugetlb.h>. s390 does not use that and hence gets
>> away with it's own huge_ptep_get() without __HAVE_ARCH_HUGE_PTEP_GET. Sounds
>> confusing ? But I might not have the entire context here.
> 
> Yes, that sounds very confusing. Also a bit ironic, since huge_ptep_get()
> was initially introduced because of s390, and now we don't select
> __HAVE_ARCH_HUGE_PTEP_GET...
> 
> As you realized, I guess this is because we do not use generic hugetlb.h.
> And when __HAVE_ARCH_HUGE_PTEP_GET was introduced with commit 544db7597ad
> ("hugetlb: introduce generic version of huge_ptep_get"), that was probably
> the reason why we did not get our share of __HAVE_ARCH_HUGE_PTEP_GET.

Understood.

> 
> Nothing really wrong with that, but yes, very confusing. Maybe we could
> also select it for s390, even though it wouldn't have any functional
> impact (so far), just for less confusion. Maybe also thinking about
> using the generic hugetlb.h, not sure if the original reasons for not
> doing so would still apply. Now I only need to find the time...

Seems like something worth to explore if we could remove this confusion.

> 
>>
>>> conversion logic. I also added PMD_MASK alignment for RANDOM_ORVALUE,
>>> because we do have some special bits there in our large pmds. It seems
>>> to also work w/o that alignment, but it feels a bit wrong):  
>>
>> Sure, we can accommodate that.
>>
>>>
>>> @@ -731,26 +731,26 @@ static void __init hugetlb_advanced_test
>>>                                           unsigned long vaddr, pgprot_t prot)
>>>  {
>>>         struct page *page = pfn_to_page(pfn);
>>> -       pte_t pte = READ_ONCE(*ptep);
>>> +       pte_t pte;
>>>
>>> -       pte = __pte(pte_val(pte) | RANDOM_ORVALUE);
>>> +       pte = pte_mkhuge(mk_pte_phys(RANDOM_ORVALUE & PMD_MASK, prot));  
>>
>> So that keeps the existing value in 'ptep' pointer at bay and instead
>> construct a PTE from scratch. I would rather have READ_ONCE(*ptep) at
>> least provide the seed that can be ORed with RANDOM_ORVALUE before
>> being masked with PMD_MASK. Do you see any problem ?
> 
> Yes, unfortunately. The problem is that the resulting pte is not marked
> as present. The conversion pte -> (huge) pmd, which is done in
> set_huge_pte_at() for s390, will establish an empty pmd for non-present
> ptes, all the RANDOM_ORVALUE stuff is lost. And a subsequent
> huge_ptep_get() will not result in the same original pte value. If you

Ohh.

> want to preserve and check the RANDOM_ORVALUE, it has to be a present
> pte, hence the mk_pte(_phys).

Understood and mk_pte() is also available on all platforms.

> 
>>
>> Some thing like this instead.
>>
>> pte_t pte = READ_ONCE(*ptep);
>> pte = pte_mkhuge(__pte((pte_val(pte) | RANDOM_ORVALUE) & PMD_MASK));
>>
>> We cannot use mk_pte_phys() as it is defined only on some platforms
>> without any generic fallback for others.
> 
> Oh, didn't know that, sorry. What about using mk_pte() instead, at least
> it would result in a present pte:
> 
> pte = pte_mkhuge(mk_pte(phys_to_page(RANDOM_ORVALUE & PMD_MASK), prot));

Lets use mk_pte() here but can we do this instead

paddr = (__pfn_to_phys(pfn) | RANDOM_ORVALUE) & PMD_MASK;
pte = pte_mkhuge(mk_pte(phys_to_page(paddr), prot));

> 
> And if you also want to do some with the existing value, which seems
> to be an empty pte, then maybe just check if writing and reading that
> value with set_huge_pte_at() / huge_ptep_get() returns the same,
> i.e. initially w/o RANDOM_ORVALUE.
> 
> So, in combination, like this (BTW, why is the barrier() needed, it
> is not used for the other set_huge_pte_at() calls later?):

Ahh missed, will add them. Earlier we faced problem without it after
set_pte_at() for a test on powerpc (64) platform. Hence just added it
here to be extra careful.

> 
> @@ -733,24 +733,28 @@ static void __init hugetlb_advanced_test
>         struct page *page = pfn_to_page(pfn);
>         pte_t pte = READ_ONCE(*ptep);
>  
> -       pte = __pte(pte_val(pte) | RANDOM_ORVALUE);
> +       set_huge_pte_at(mm, vaddr, ptep, pte);
> +       WARN_ON(!pte_same(pte, huge_ptep_get(ptep)));
> +
> +       pte = pte_mkhuge(mk_pte(phys_to_page(RANDOM_ORVALUE & PMD_MASK), prot));
>         set_huge_pte_at(mm, vaddr, ptep, pte);
>         barrier();
>         WARN_ON(!pte_same(pte, huge_ptep_get(ptep)));
> 
> This would actually add a new test "write empty pte with
> set_huge_pte_at(), then verify with huge_ptep_get()", which happens
> to trigger a warning on s390 :-)

On arm64 as well which checks for pte_present() in set_huge_pte_at().
But PTE present check is not really present in each set_huge_pte_at()
implementation especially without __HAVE_ARCH_HUGE_SET_HUGE_PTE_AT.
Hence wondering if we should add this new test here which will keep
giving warnings on s390 and arm64 (at the least).

> 
> That (new) warning actually points to misbehavior on s390, we do not
> write a correct empty pmd in this case, but one that is empty and also
> marked as large. huge_ptep_get() will then not correctly recognize it
> as empty and do wrong conversion. It is also not consistent with
> huge_ptep_get_and_clear(), where we write the empty pmd w/o marking
> as large. Last but not least it would also break our pmd_protnone()
> logic (see below). Another nice finding on s390 :-)

:) 

> 
> I don't think this has any effect in practice (yet), but I will post a
> fix for that, just in case you will add / change this test.

Okay.

> 
>>
>>>         set_huge_pte_at(mm, vaddr, ptep, pte);
>>>         barrier();
>>>         WARN_ON(!pte_same(pte, huge_ptep_get(ptep)));
>>>         huge_pte_clear(mm, vaddr, ptep, PMD_SIZE);
>>> -       pte = READ_ONCE(*ptep);
>>> +       pte = huge_ptep_get(ptep);
>>>         WARN_ON(!huge_pte_none(pte));
>>>  
>>>         pte = mk_huge_pte(page, prot);
>>>         set_huge_pte_at(mm, vaddr, ptep, pte);
>>>         huge_ptep_set_wrprotect(mm, vaddr, ptep);
>>> -       pte = READ_ONCE(*ptep);
>>> +       pte = huge_ptep_get(ptep);
>>>         WARN_ON(huge_pte_write(pte));
>>>  
>>>         pte = mk_huge_pte(page, prot);
>>>         set_huge_pte_at(mm, vaddr, ptep, pte);
>>>         huge_ptep_get_and_clear(mm, vaddr, ptep);
>>> -       pte = READ_ONCE(*ptep);
>>> +       pte = huge_ptep_get(ptep);
>>>         WARN_ON(!huge_pte_none(pte));
>>>  
>>>         pte = mk_huge_pte(page, prot);
>>> @@ -759,7 +759,7 @@ static void __init hugetlb_advanced_test
>>>         pte = huge_pte_mkwrite(pte);
>>>         pte = huge_pte_mkdirty(pte);
>>>         huge_ptep_set_access_flags(vma, vaddr, ptep, pte, 1);
>>> -       pte = READ_ONCE(*ptep);
>>> +       pte = huge_ptep_get(ptep);
>>>         WARN_ON(!(huge_pte_write(pte) && huge_pte_dirty(pte)));
>>>  }
>>>  #else
>>>
>>> 3) The pmd_protnone_tests() has an issue, because it passes a pmd to
>>> pmd_protnone() which has not been marked as large. We check for large
>>> pmd in the s390 implementation of pmd_protnone(), and will fail if a
>>> pmd is not large. We had similar issues before, in other helpers, where
>>> I changed the logic on s390 to not require the pmd large check, but I'm
>>> not so sure in this case. Is there a valid use case for doing
>>> pmd_protnone() on "normal" pmds? Or could this be changed like this:  
>>
>> That is a valid question. IIUC, all existing callers for pmd_protnone()
>> ensure that it is indeed a huge PMD. But even assuming otherwise should
>> not the huge PMD requirement get checked in the caller itself rather than
>> in the arch helper which is just supposed to check the existence of the
>> dedicated PTE bit(s) for this purpose. Purely from a helper perspective
>> pmd_protnone() should not really care about being large even though it
>> might never get used without one.
>>
>> Also all platforms (except s390) derive the pmd_protnone() from their
>> respective pte_protnone(). I wonder why should s390 be any different
>> unless it is absolutely necessary.
> 
> This is again because of our different page table entry layouts for
> pte/pmd and (large) pmd. The bits we check for pmd_protnone() are
> not valid for normal pmd/pte, and we would return undefined result for
> normal entries.
> 
> Of course, we could rely on nobody calling pmd_protnone() on normal
> pmds, but in this case we also use pmd_large() check in pmd_protnone()
> for indication if the pmd is present. W/o that, we would return
> true for empty pmds, that doesn't sound right. Not sure if we also
> want to rely on nobody calling pmd_protnone() on empty pmds.

That might be problematic.

> 
> Anyway, if in practice it is not correct to use pmd_protnone()
> on normal pmds, then I would suggest that your tests should also
> not do / test it. And I strongly assume that it is not correct, at
> least I cannot think of a valid case, and of course s390 would
> already be broken if there was such a case.

Okay, will use huge PMD here as you had suggested earlier.

> 
> Regards,
> Gerald
> 
> 

^ permalink raw reply

* Re: [PATCH] cxl: Rework error message for incompatible slots
From: Frederic Barrat @ 2020-04-08  7:09 UTC (permalink / raw)
  To: Andrew Donnellan, linuxppc-dev, christophe_lombard; +Cc: stable
In-Reply-To: <9e4cab1e-aa93-981d-9576-d475c93bb2e7@linux.ibm.com>



Le 08/04/2020 à 04:13, Andrew Donnellan a écrit :
> On 7/4/20 9:56 pm, Frederic Barrat wrote:
>> Improve the error message shown if a capi adapter is plugged on a
>> capi-incompatible slot directly under the PHB (no intermediate switch).
>>
>> Fixes: 5632874311db ("cxl: Add support for POWER9 DD2")
>> Cc: stable@vger.kernel.org # 4.14+
>> Signed-off-by: Frederic Barrat <fbarrat@linux.ibm.com>
> 
> Seems fine to me, not sure if it needs to go to stable but I suppose 
> this could be causing actual confusion out in the field?


Yes it does. The reason for this patch is it was hit by a customer.

   Fred


> Reviewed-by: Andrew Donnellan <ajd@linux.ibm.com>


^ permalink raw reply

* Re: [PATCH 0/2] powerpc: Remove support for ppc405/440 Xilinx platforms
From: Christophe Leroy @ 2020-04-08  7:09 UTC (permalink / raw)
  To: Benjamin Herrenschmidt, Michael Ellerman, Andy Shevchenko,
	Arnd Bergmann
  Cc: Kate Stewart, Mark Rutland, Desnes A. Nunes do Rosario,
	Geert Uytterhoeven, open list:DOCUMENTATION,
	ALSA Development Mailing List, dri-devel, Jaroslav Kysela,
	Richard Fontana, Paul Mackerras, Miquel Raynal,
	Mauro Carvalho Chehab, Fabio Estevam, Sasha Levin,
	Stephen Rothwell, Jonathan Corbet, Masahiro Yamada, Takashi Iwai,
	YueHaibing, Michal Simek, Krzysztof Kozlowski, Linux ARM,
	Leonardo Bras, DTML, Andrew Donnellan, Bartlomiej Zolnierkiewicz,
	Marc Zyngier, Alistair Popple, linuxppc-dev, Nicholas Piggin,
	Alexios Zavras, Mark Brown, git, Linux Fbdev development list,
	Jonathan Cameron, Thomas Gleixner, Allison Randal, Michal Simek,
	Wei Hu, Christian Lamparter, Greg Kroah-Hartman, Nick Desaulniers,
	linux-kernel@vger.kernel.org, Armijn Hemel, Rob Herring,
	Enrico Weigelt, David S. Miller, Thiago Jung Bauermann
In-Reply-To: <5782f9a42ad8acd8b234fa9c15a09db93552dc6b.camel@kernel.crashing.org>



Le 08/04/2020 à 01:32, Benjamin Herrenschmidt a écrit :
> On Fri, 2020-04-03 at 15:59 +1100, Michael Ellerman wrote:
>> Benjamin Herrenschmidt <benh@kernel.crashing.org> writes:
>>> On Tue, 2020-03-31 at 16:30 +1100, Michael Ellerman wrote:
>>>> I have no attachment to 40x, and I'd certainly be happy to have
>>>> less
>>>> code in the tree, we struggle to keep even the modern platforms
>>>> well
>>>> maintained.
>>>>
>>>> At the same time I don't want to render anyone's hardware
>>>> obsolete
>>>> unnecessarily. But if there's really no one using 40x then we
>>>> should
>>>> remove it, it could well be broken already.
>>>>
>>>> So I guess post a series to do the removal and we'll see if
>>>> anyone
>>>> speaks up.
>>>
>>> We shouldn't remove 40x completely. Just remove the Xilinx 405
>>> stuff.
>>
>> Congratulations on becoming the 40x maintainer!
> 
> Didn't I give you my last 40x system ? :-) IBM still put 40x cores
> inside POWER chips no ?
> 

According to Wikipedia (https://en.wikipedia.org/wiki/PowerPC_400), 405 
cores are used in modern equipments (how modern ?), however 403 has 
never reached the market.

Can we start removing 403 stuff ? That's not a lot, but still.

Does anybody knows anything about this ERRATUM 77 stuff ? Is that still 
an issue with all 405 cores or has this been fixed long time ago and can 
be removed ?

Christophe

^ permalink raw reply

* Re: [PATCH 3/4] powerpc/eeh: Remove workaround from eeh_add_device_late()
From: Oliver O'Halloran @ 2020-04-08  6:53 UTC (permalink / raw)
  To: Sam Bobroff; +Cc: linuxppc-dev
In-Reply-To: <20200408062159.GB25852@osmium>

On Wed, Apr 8, 2020 at 4:22 PM Sam Bobroff <sbobroff@linux.ibm.com> wrote:
>
> On Fri, Apr 03, 2020 at 05:08:32PM +1100, Oliver O'Halloran wrote:
> > On Mon, 2020-03-30 at 15:56 +1100, Sam Bobroff wrote:
> > > When EEH device state was released asynchronously by the device
> > > release handler, it was possible for an outstanding reference to
> > > prevent it's release and it was necessary to work around that if a
> > > device was re-discovered at the same PCI location.
> >
> > I think this is a bit misleading. The main situation where you'll hit
> > this hack is when recovering a device with a driver that doesn't
> > implement the error handling callbacks. In that case the device is
> > removed, reset, then re-probed by the PCI core, but we assume it's the
> > same physical device so the eeh_device state remains active.
> >
> > If you actually changed the underlying device I suspect something bad
> > would happen.
>
> I'm not sure I understand. Isn't the case you're talking about caught by
> the earlier check (just above the patch)?
>
>         if (edev->pdev == dev) {
>                 eeh_edev_dbg(edev, "Device already referenced!\n");
>                 return;
>         }

No, in the case I'm talking about the pci_dev is torn down and
freed(). After the PE is reset we re-probe the device and create a new
pci_dev.  If the release of the old pci_dev is delayed we need the
hack this patch is removing.

The check above should probably be a WARN_ON() since we should never
be re-running the EEH probe on the same device. I think there is a
case where that can happen, but I don't remember the details.

Oliver

^ permalink raw reply

* Re: [PATCH 4/4] powerpc/eeh: Clean up edev cleanup for VFs
From: Sam Bobroff @ 2020-04-08  6:33 UTC (permalink / raw)
  To: Oliver O'Halloran; +Cc: linuxppc-dev
In-Reply-To: <8a83b90a0cf0889e1c58c33cd2946916a85c5752.camel@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 739 bytes --]

On Fri, Apr 03, 2020 at 04:45:47PM +1100, Oliver O'Halloran wrote:
> On Mon, 2020-03-30 at 15:56 +1100, Sam Bobroff wrote:
> > Because the bus notifier calls eeh_rmv_from_parent_pe() (via
> > eeh_remove_device()) when a VF is removed, the call in
> > remove_sriov_vf_pdns() is redundant.
> 
> eeh_rmv_from_parent_pe() won't actually remove the device if the
> recovering flag is set on the PE. Are you sure we're not introducing a
> race here?
> 

Ah, I assume you're referring to the difference between calling
eeh_remove_device() and directly calling eeh_rmv_from_parent_pe(), where
the behaviour for PE's with EEH_PE_KEEP set is subtly different.

I'll take a closer look at it and make sure to explain it better in v2.

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply

* Re: [PATCH 0/2] powerpc: Remove support for ppc405/440 Xilinx platforms
From: Geert Uytterhoeven @ 2020-04-08  6:28 UTC (permalink / raw)
  To: Benjamin Herrenschmidt
  Cc: Kate Stewart, Mark Rutland, Desnes A. Nunes do Rosario,
	Geert Uytterhoeven, open list:DOCUMENTATION,
	ALSA Development Mailing List, dri-devel, Jaroslav Kysela,
	Richard Fontana, Paul Mackerras, Miquel Raynal,
	Mauro Carvalho Chehab, Fabio Estevam, Sasha Levin,
	Stephen Rothwell, Jonathan Corbet, Masahiro Yamada, Takashi Iwai,
	YueHaibing, Michal Simek, Krzysztof Kozlowski, Linux ARM,
	Leonardo Bras, DTML, Andrew Donnellan, Arnd Bergmann,
	Bartlomiej Zolnierkiewicz, Marc Zyngier, Alistair Popple,
	linuxppc-dev, Nicholas Piggin, Alexios Zavras, Mark Brown, git,
	Linux Fbdev development list, Jonathan Cameron, Thomas Gleixner,
	Andy Shevchenko, Allison Randal, Michal Simek, Wei Hu,
	Christian Lamparter, Greg Kroah-Hartman, Nick Desaulniers,
	linux-kernel@vger.kernel.org, Armijn Hemel, Rob Herring,
	Enrico Weigelt, David S. Miller, Thiago Jung Bauermann
In-Reply-To: <5782f9a42ad8acd8b234fa9c15a09db93552dc6b.camel@kernel.crashing.org>

Hi Ben,

On Wed, Apr 8, 2020 at 1:34 AM Benjamin Herrenschmidt
<benh@kernel.crashing.org> wrote:
> On Fri, 2020-04-03 at 15:59 +1100, Michael Ellerman wrote:
> > Benjamin Herrenschmidt <benh@kernel.crashing.org> writes:
> > > On Tue, 2020-03-31 at 16:30 +1100, Michael Ellerman wrote:
> > > > I have no attachment to 40x, and I'd certainly be happy to have
> > > > less
> > > > code in the tree, we struggle to keep even the modern platforms
> > > > well
> > > > maintained.
> > > >
> > > > At the same time I don't want to render anyone's hardware
> > > > obsolete
> > > > unnecessarily. But if there's really no one using 40x then we
> > > > should
> > > > remove it, it could well be broken already.
> > > >
> > > > So I guess post a series to do the removal and we'll see if
> > > > anyone
> > > > speaks up.
> > >
> > > We shouldn't remove 40x completely. Just remove the Xilinx 405
> > > stuff.
> >
> > Congratulations on becoming the 40x maintainer!
>
> Didn't I give you my last 40x system ? :-) IBM still put 40x cores
> inside POWER chips no ?

Good to know!

Are they still big-endian, or have they been corrupted by the LE frenzy,
too? ;)

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

^ permalink raw reply

* Re: [PATCH 3/4] powerpc/eeh: Remove workaround from eeh_add_device_late()
From: Sam Bobroff @ 2020-04-08  6:21 UTC (permalink / raw)
  To: Oliver O'Halloran; +Cc: linuxppc-dev
In-Reply-To: <c7e81c27a6da9f7a4266cec9995b597bce4efc7b.camel@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 2717 bytes --]

On Fri, Apr 03, 2020 at 05:08:32PM +1100, Oliver O'Halloran wrote:
> On Mon, 2020-03-30 at 15:56 +1100, Sam Bobroff wrote:
> > When EEH device state was released asynchronously by the device
> > release handler, it was possible for an outstanding reference to
> > prevent it's release and it was necessary to work around that if a
> > device was re-discovered at the same PCI location.
> 
> I think this is a bit misleading. The main situation where you'll hit
> this hack is when recovering a device with a driver that doesn't
> implement the error handling callbacks. In that case the device is
> removed, reset, then re-probed by the PCI core, but we assume it's the
> same physical device so the eeh_device state remains active.
> 
> If you actually changed the underlying device I suspect something bad
> would happen.

I'm not sure I understand. Isn't the case you're talking about caught by
the earlier check (just above the patch)?

	if (edev->pdev == dev) {
		eeh_edev_dbg(edev, "Device already referenced!\n");
		return;
	}
> 
> > Now that the state is released synchronously that is no longer
> > possible and the workaround is no longer necessary.
> 
> You could probably fold this into the previous patch, but eh. You could
> probably fold this into the previous patch, but eh.

True.

> > Signed-off-by: Sam Bobroff <sbobroff@linux.ibm.com>
> > ---
> >  arch/powerpc/kernel/eeh.c | 23 +----------------------
> >  1 file changed, 1 insertion(+), 22 deletions(-)
> > 
> > diff --git a/arch/powerpc/kernel/eeh.c b/arch/powerpc/kernel/eeh.c
> > index c36c5a7db5ca..12c248a16527 100644
> > --- a/arch/powerpc/kernel/eeh.c
> > +++ b/arch/powerpc/kernel/eeh.c
> > @@ -1206,28 +1206,7 @@ void eeh_add_device_late(struct pci_dev *dev)
> >  		eeh_edev_dbg(edev, "Device already referenced!\n");
> >  		return;
> >  	}
> > -
> > -	/*
> > -	 * The EEH cache might not be removed correctly because of
> > -	 * unbalanced kref to the device during unplug time, which
> > -	 * relies on pcibios_release_device(). So we have to remove
> > -	 * that here explicitly.
> > -	 */
> > -	if (edev->pdev) {
> > -		eeh_rmv_from_parent_pe(edev);
> > -		eeh_addr_cache_rmv_dev(edev->pdev);
> > -		eeh_sysfs_remove_device(edev->pdev);
> > -
> > -		/*
> > -		 * We definitely should have the PCI device removed
> > -		 * though it wasn't correctly. So we needn't call
> > -		 * into error handler afterwards.
> > -		 */
> > -		edev->mode |= EEH_DEV_NO_HANDLER;
> > -
> > -		edev->pdev = NULL;
> > -		dev->dev.archdata.edev = NULL;
> > -	}
> > +	WARN_ON_ONCE(edev->pdev);
> >  
> >  	if (eeh_has_flag(EEH_PROBE_MODE_DEV))
> >  		eeh_ops->probe(pdn, NULL);
> 

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply

* Re: [PATCH 2/4] powerpc/eeh: Release EEH device state synchronously
From: Sam Bobroff @ 2020-04-08  6:15 UTC (permalink / raw)
  To: Oliver O'Halloran; +Cc: linuxppc-dev
In-Reply-To: <505121b7e9f40708aef50a2fae0932d3e535e616.camel@gmail.com>

[-- Attachment #1: Type: text/plain, Size: 2944 bytes --]

On Fri, Apr 03, 2020 at 03:51:18PM +1100, Oliver O'Halloran wrote:
> On Mon, 2020-03-30 at 15:56 +1100, Sam Bobroff wrote:
> > EEH device state is currently removed (by eeh_remove_device()) during
> > the device release handler, which is invoked as the device's reference
> > count drops to zero. This may take some time, or forever, as other
> > threads may hold references.
> > 
> > However, the PCI device state is released synchronously by
> > pci_stop_and_remove_bus_device(). This mismatch causes problems, for
> > example the device may be re-discovered as a new device before the
> > release handler has been called, leaving the PCI and EEH state
> > mismatched.
> > 
> > So instead, call eeh_remove_device() from the bus device removal
> > handlers, which are called synchronously in the removal path.
> > 
> > Signed-off-by: Sam Bobroff <sbobroff@linux.ibm.com>
> > ---
> >  arch/powerpc/kernel/eeh.c         | 26 ++++++++++++++++++++++++++
> >  arch/powerpc/kernel/pci-hotplug.c |  2 --
> >  2 files changed, 26 insertions(+), 2 deletions(-)
> > 
> > diff --git a/arch/powerpc/kernel/eeh.c b/arch/powerpc/kernel/eeh.c
> > index 17cb3e9b5697..c36c5a7db5ca 100644
> > --- a/arch/powerpc/kernel/eeh.c
> > +++ b/arch/powerpc/kernel/eeh.c
> > @@ -1106,6 +1106,32 @@ static int eeh_init(void)
> >  
> >  core_initcall_sync(eeh_init);
> >  
> > +static int eeh_device_notifier(struct notifier_block *nb,
> > +			       unsigned long action, void *data)
> > +{
> > +	struct device *dev = data;
> > +
> > +	switch (action) {
> > +	case BUS_NOTIFY_DEL_DEVICE:
> > +		eeh_remove_device(to_pci_dev(dev));
> > +		break;
> > +	default:
> > +		break;
> > +	}
> 
> A comment briefly explaining why we're not doing anything in the add
> case might be nice.

Good point, I'll add something for v2.
> 
> Reviewed-by: Oliver O'Halloran <oohall@gmail.com>
> 
> > +	return NOTIFY_DONE;
> > +}
> > +
> > +static struct notifier_block eeh_device_nb = {
> > +	.notifier_call = eeh_device_notifier,
> > +};
> > +
> > +static __init int eeh_set_bus_notifier(void)
> > +{
> > +	bus_register_notifier(&pci_bus_type, &eeh_device_nb);
> > +	return 0;
> > +}
> > +arch_initcall(eeh_set_bus_notifier);
> > +
> >  /**
> >   * eeh_add_device_early - Enable EEH for the indicated device node
> >   * @pdn: PCI device node for which to set up EEH
> > diff --git a/arch/powerpc/kernel/pci-hotplug.c b/arch/powerpc/kernel/pci-hotplug.c
> > index d6a67f814983..28e9aa274f64 100644
> > --- a/arch/powerpc/kernel/pci-hotplug.c
> > +++ b/arch/powerpc/kernel/pci-hotplug.c
> > @@ -57,8 +57,6 @@ void pcibios_release_device(struct pci_dev *dev)
> >  	struct pci_controller *phb = pci_bus_to_host(dev->bus);
> >  	struct pci_dn *pdn = pci_get_pdn(dev);
> >  
> > -	eeh_remove_device(dev);
> > -
> >  	if (phb->controller_ops.release_device)
> >  		phb->controller_ops.release_device(dev);
> >  
> 

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply

* Re: [Bug 206203] kmemleak reports various leaks in drivers/of/unittest.c
From: Michael Ellerman @ 2020-04-08  3:13 UTC (permalink / raw)
  To: Frank Rowand, Rob Herring; +Cc: devicetree, linuxppc-dev
In-Reply-To: <bug-206203-206035-Y3snhDMDgJ@https.bugzilla.kernel.org/>

bugzilla-daemon@bugzilla.kernel.org writes:
> https://bugzilla.kernel.org/show_bug.cgi?id=206203
>
> Erhard F. (erhard_f@mailbox.org) changed:
>
>            What    |Removed                     |Added
> ----------------------------------------------------------------------------
>  Attachment #286801|0                           |1
>         is obsolete|                            |
>
> --- Comment #10 from Erhard F. (erhard_f@mailbox.org) ---
> Created attachment 288189
>   --> https://bugzilla.kernel.org/attachment.cgi?id=288189&action=edit
> kmemleak output (kernel 5.6.2, Talos II)

These are all in or triggered by the of unittest code AFAICS.
Content of the log reproduced below.

Frank/Rob, are these memory leaks expected?

cheers


unreferenced object 0xc0000007eb89ca58 (size 192):
  comm "swapper/0", pid 1, jiffies 4294878935 (age 824.747s)
  hex dump (first 32 bytes):
    c0 00 00 00 00 d9 21 38 00 00 00 00 00 00 00 00  ......!8........
    c0 00 00 07 ec 97 80 08 00 00 00 00 00 00 00 00  ................
  backtrace:
    [<0000000007b50c76>] .__of_node_dup+0x38/0x1c0
    [<00000000e2115f4f>] .of_unittest_changeset+0x13c/0xa20
    [<00000000925a8013>] .of_unittest+0x1ba0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec978008 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878935 (age 824.747s)
  hex dump (first 8 bytes):
    6e 31 00 6b 6b 6b 6b a5                          n1.kkkk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000a074532f>] .__of_node_dup+0x50/0x1c0
    [<00000000e2115f4f>] .of_unittest_changeset+0x13c/0xa20
    [<00000000925a8013>] .of_unittest+0x1ba0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007eb89e318 (size 192):
  comm "swapper/0", pid 1, jiffies 4294878935 (age 824.747s)
  hex dump (first 32 bytes):
    c0 00 00 00 00 d9 21 38 00 00 00 00 00 00 00 00  ......!8........
    c0 00 00 07 ec 97 ab 08 00 00 00 00 00 00 00 00  ................
  backtrace:
    [<0000000007b50c76>] .__of_node_dup+0x38/0x1c0
    [<00000000881dc9c4>] .of_unittest_changeset+0x194/0xa20
    [<00000000925a8013>] .of_unittest+0x1ba0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec97ab08 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878935 (age 824.747s)
  hex dump (first 8 bytes):
    6e 32 00 6b 6b 6b 6b a5                          n2.kkkk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000a074532f>] .__of_node_dup+0x50/0x1c0
    [<00000000881dc9c4>] .of_unittest_changeset+0x194/0xa20
    [<00000000925a8013>] .of_unittest+0x1ba0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007eb89e528 (size 192):
  comm "swapper/0", pid 1, jiffies 4294878935 (age 824.747s)
  hex dump (first 32 bytes):
    c0 00 00 07 ec 97 bd d8 00 00 00 00 00 00 00 00  ................
    c0 00 00 07 ec 97 b3 18 00 00 00 00 00 00 00 00  ................
  backtrace:
    [<0000000007b50c76>] .__of_node_dup+0x38/0x1c0
    [<00000000af6923cb>] .of_unittest_changeset+0x1ec/0xa20
    [<00000000925a8013>] .of_unittest+0x1ba0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec97b318 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878935 (age 824.747s)
  hex dump (first 8 bytes):
    6e 32 31 00 6b 6b 6b a5                          n21.kkk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000a074532f>] .__of_node_dup+0x50/0x1c0
    [<00000000af6923cb>] .of_unittest_changeset+0x1ec/0xa20
    [<00000000925a8013>] .of_unittest+0x1ba0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007f1c1fb00 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878935 (age 824.757s)
  hex dump (first 32 bytes):
    c0 00 00 07 ec 97 90 28 00 00 00 03 00 00 00 00  .......(........
    c0 00 00 07 ec 97 8e d0 00 00 00 00 00 00 00 00  ................
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<000000003079b8f2>] .of_unittest_changeset+0x310/0xa20
    [<00000000925a8013>] .of_unittest+0x1ba0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec979028 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878935 (age 824.757s)
  hex dump (first 8 bytes):
    6e 61 6d 65 00 6b 6b a5                          name.kk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<000000003079b8f2>] .of_unittest_changeset+0x310/0xa20
    [<00000000925a8013>] .of_unittest+0x1ba0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec978ed0 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878935 (age 824.757s)
  hex dump (first 8 bytes):
    6e 31 00 6b 6b 6b 6b a5                          n1.kkkk.
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<000000003079b8f2>] .of_unittest_changeset+0x310/0xa20
    [<00000000925a8013>] .of_unittest+0x1ba0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007f1c1bc80 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878935 (age 824.757s)
  hex dump (first 32 bytes):
    c0 00 00 07 ec 97 b4 70 00 00 00 03 00 00 00 00  .......p........
    c0 00 00 07 ec 97 b1 c0 00 00 00 00 00 00 00 00  ................
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<000000000f97f174>] .of_unittest_changeset+0x368/0xa20
    [<00000000925a8013>] .of_unittest+0x1ba0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec97b470 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878935 (age 824.757s)
  hex dump (first 8 bytes):
    6e 61 6d 65 00 6b 6b a5                          name.kk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<000000000f97f174>] .of_unittest_changeset+0x368/0xa20
    [<00000000925a8013>] .of_unittest+0x1ba0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec97b1c0 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878935 (age 824.757s)
  hex dump (first 8 bytes):
    6e 32 00 6b 6b 6b 6b a5                          n2.kkkk.
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<000000000f97f174>] .of_unittest_changeset+0x368/0xa20
    [<00000000925a8013>] .of_unittest+0x1ba0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007f1c1d800 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878935 (age 824.764s)
  hex dump (first 32 bytes):
    c0 00 00 07 ec 97 88 18 00 00 00 03 00 00 00 00  ................
    c0 00 00 07 ec 97 bd d8 00 00 00 00 00 00 00 00  ................
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<00000000c71a088a>] .of_unittest_changeset+0x3c0/0xa20
    [<00000000925a8013>] .of_unittest+0x1ba0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec978818 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878935 (age 824.764s)
  hex dump (first 8 bytes):
    6e 61 6d 65 00 6b 6b a5                          name.kk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<00000000c71a088a>] .of_unittest_changeset+0x3c0/0xa20
    [<00000000925a8013>] .of_unittest+0x1ba0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec97bdd8 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878935 (age 824.764s)
  hex dump (first 8 bytes):
    6e 32 31 6b 6b 6b 6b a5                          n21kkkk.
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<00000000c71a088a>] .of_unittest_changeset+0x3c0/0xa20
    [<00000000925a8013>] .of_unittest+0x1ba0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec979d98 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878935 (age 824.764s)
  hex dump (first 8 bytes):
    6e 31 00 6b 6b 6b 6b a5                          n1.kkkk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<0000000001df4c62>] .kvasprintf_const+0xa8/0xf0
    [<00000000b7ba15a5>] .kobject_set_name_vargs+0x34/0xf0
    [<0000000076cbbcf2>] .kobject_add+0x50/0xe0
    [<000000002d7a6157>] .__of_attach_node_sysfs+0xa8/0x160
    [<000000004ed552f3>] .__of_changeset_entry_apply+0x32c/0x390
    [<0000000062a8a683>] .__of_changeset_apply_entries+0x48/0x110
    [<00000000530ec4ee>] .of_changeset_apply+0x54/0xc0
    [<0000000039fa95c3>] .of_unittest_changeset+0x8a4/0xa20
    [<00000000925a8013>] .of_unittest+0x1ba0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec9796e0 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878935 (age 824.764s)
  hex dump (first 8 bytes):
    6e 32 00 6b 6b 6b 6b a5                          n2.kkkk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<0000000001df4c62>] .kvasprintf_const+0xa8/0xf0
    [<00000000b7ba15a5>] .kobject_set_name_vargs+0x34/0xf0
    [<0000000076cbbcf2>] .kobject_add+0x50/0xe0
    [<000000002d7a6157>] .__of_attach_node_sysfs+0xa8/0x160
    [<000000004ed552f3>] .__of_changeset_entry_apply+0x32c/0x390
    [<0000000062a8a683>] .__of_changeset_apply_entries+0x48/0x110
    [<00000000530ec4ee>] .of_changeset_apply+0x54/0xc0
    [<0000000039fa95c3>] .of_unittest_changeset+0x8a4/0xa20
    [<00000000925a8013>] .of_unittest+0x1ba0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec979ef0 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878935 (age 824.764s)
  hex dump (first 8 bytes):
    6e 32 31 00 6b 6b 6b a5                          n21.kkk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<0000000001df4c62>] .kvasprintf_const+0xa8/0xf0
    [<00000000b7ba15a5>] .kobject_set_name_vargs+0x34/0xf0
    [<0000000076cbbcf2>] .kobject_add+0x50/0xe0
    [<000000002d7a6157>] .__of_attach_node_sysfs+0xa8/0x160
    [<000000004ed552f3>] .__of_changeset_entry_apply+0x32c/0x390
    [<0000000062a8a683>] .__of_changeset_apply_entries+0x48/0x110
    [<00000000530ec4ee>] .of_changeset_apply+0x54/0xc0
    [<0000000039fa95c3>] .of_unittest_changeset+0x8a4/0xa20
    [<00000000925a8013>] .of_unittest+0x1ba0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f2e98800 (size 2048):
  comm "swapper/0", pid 1, jiffies 4294878936 (age 824.760s)
  hex dump (first 32 bytes):
    c0 00 00 07 ec 92 dc 40 ff ff ff ff 00 00 00 00  .......@........
    c0 00 00 07 ec 92 dc 40 c0 00 20 07 f2 e9 88 18  .......@.. .....
  backtrace:
    [<00000000d07b7b2c>] .platform_device_alloc+0x34/0x100
    [<00000000d9abb21d>] .of_device_alloc+0x44/0x390
    [<0000000002d381f5>] .of_platform_device_create_pdata+0x78/0x1a0
    [<00000000c7a45eba>] .of_platform_bus_create+0x214/0x2f0
    [<00000000c6ba35e7>] .of_platform_bus_create+0x268/0x2f0
    [<0000000076525030>] .of_platform_populate+0x78/0x140
    [<00000000d3aeed04>] .of_unittest_platform_populate+0x328/0x50c
    [<000000003978eb44>] .of_unittest+0x24a8/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec92dc40 (size 64):
  comm "swapper/0", pid 1, jiffies 4294878936 (age 824.760s)
  hex dump (first 32 bytes):
    74 65 73 74 63 61 73 65 2d 64 61 74 61 3a 70 6c  testcase-data:pl
    61 74 66 6f 72 6d 2d 74 65 73 74 73 3a 74 65 73  atform-tests:tes
  backtrace:
    [<00000000154ad5cf>] .kvasprintf+0x60/0xd0
    [<00000000b7ba15a5>] .kobject_set_name_vargs+0x34/0xf0
    [<00000000cce6fd03>] .dev_set_name+0x2c/0x40
    [<000000007d4be46f>] .of_device_alloc+0x2b0/0x390
    [<0000000002d381f5>] .of_platform_device_create_pdata+0x78/0x1a0
    [<00000000c7a45eba>] .of_platform_bus_create+0x214/0x2f0
    [<00000000c6ba35e7>] .of_platform_bus_create+0x268/0x2f0
    [<0000000076525030>] .of_platform_populate+0x78/0x140
    [<00000000d3aeed04>] .of_unittest_platform_populate+0x328/0x50c
    [<000000003978eb44>] .of_unittest+0x24a8/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007eb8aa100 (size 256):
  comm "swapper/0", pid 1, jiffies 4294878936 (age 824.760s)
  hex dump (first 32 bytes):
    00 00 00 00 de ad 4e ad ff ff ff ff 00 00 00 00  ......N.........
    ff ff ff ff ff ff ff ff c0 00 00 00 02 30 31 a8  .............01.
  backtrace:
    [<000000008039b6cb>] .device_add+0x578/0x980
    [<0000000012aa326f>] .of_device_add+0x58/0x70
    [<00000000d6a8e21f>] .of_platform_device_create_pdata+0xc4/0x1a0
    [<00000000c7a45eba>] .of_platform_bus_create+0x214/0x2f0
    [<00000000c6ba35e7>] .of_platform_bus_create+0x268/0x2f0
    [<0000000076525030>] .of_platform_populate+0x78/0x140
    [<00000000d3aeed04>] .of_unittest_platform_populate+0x328/0x50c
    [<000000003978eb44>] .of_unittest+0x24a8/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f2e9a000 (size 2048):
  comm "swapper/0", pid 1, jiffies 4294878936 (age 824.764s)
  hex dump (first 32 bytes):
    c0 00 20 07 f2 e7 a2 40 ff ff ff ff 00 00 00 00  .. ....@........
    c0 00 20 07 f2 e7 a2 40 c0 00 20 07 f2 e9 a0 18  .. ....@.. .....
  backtrace:
    [<00000000d07b7b2c>] .platform_device_alloc+0x34/0x100
    [<00000000d9abb21d>] .of_device_alloc+0x44/0x390
    [<0000000002d381f5>] .of_platform_device_create_pdata+0x78/0x1a0
    [<00000000c7a45eba>] .of_platform_bus_create+0x214/0x2f0
    [<00000000c6ba35e7>] .of_platform_bus_create+0x268/0x2f0
    [<0000000076525030>] .of_platform_populate+0x78/0x140
    [<00000000d3aeed04>] .of_unittest_platform_populate+0x328/0x50c
    [<000000003978eb44>] .of_unittest+0x24a8/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f2e7a240 (size 64):
  comm "swapper/0", pid 1, jiffies 4294878936 (age 824.764s)
  hex dump (first 32 bytes):
    74 65 73 74 63 61 73 65 2d 64 61 74 61 3a 70 6c  testcase-data:pl
    61 74 66 6f 72 6d 2d 74 65 73 74 73 3a 74 65 73  atform-tests:tes
  backtrace:
    [<00000000154ad5cf>] .kvasprintf+0x60/0xd0
    [<00000000b7ba15a5>] .kobject_set_name_vargs+0x34/0xf0
    [<00000000cce6fd03>] .dev_set_name+0x2c/0x40
    [<000000007d4be46f>] .of_device_alloc+0x2b0/0x390
    [<0000000002d381f5>] .of_platform_device_create_pdata+0x78/0x1a0
    [<00000000c7a45eba>] .of_platform_bus_create+0x214/0x2f0
    [<00000000c6ba35e7>] .of_platform_bus_create+0x268/0x2f0
    [<0000000076525030>] .of_platform_populate+0x78/0x140
    [<00000000d3aeed04>] .of_unittest_platform_populate+0x328/0x50c
    [<000000003978eb44>] .of_unittest+0x24a8/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007eb8ac100 (size 256):
  comm "swapper/0", pid 1, jiffies 4294878936 (age 824.764s)
  hex dump (first 32 bytes):
    00 00 00 00 de ad 4e ad ff ff ff ff 00 00 00 00  ......N.........
    ff ff ff ff ff ff ff ff c0 00 00 00 02 30 31 a8  .............01.
  backtrace:
    [<000000008039b6cb>] .device_add+0x578/0x980
    [<0000000012aa326f>] .of_device_add+0x58/0x70
    [<00000000d6a8e21f>] .of_platform_device_create_pdata+0xc4/0x1a0
    [<00000000c7a45eba>] .of_platform_bus_create+0x214/0x2f0
    [<00000000c6ba35e7>] .of_platform_bus_create+0x268/0x2f0
    [<0000000076525030>] .of_platform_populate+0x78/0x140
    [<00000000d3aeed04>] .of_unittest_platform_populate+0x328/0x50c
    [<000000003978eb44>] .of_unittest+0x24a8/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007eb89f7b8 (size 192):
  comm "swapper/0", pid 1, jiffies 4294878937 (age 824.760s)
  hex dump (first 32 bytes):
    c0 00 00 07 f1 ea 17 b0 00 00 00 00 00 00 00 00  ................
    c0 00 20 07 f2 e8 47 40 00 00 00 00 00 00 00 00  .. ...G@........
  backtrace:
    [<0000000007b50c76>] .__of_node_dup+0x38/0x1c0
    [<000000006f73e286>] .build_changeset_next_level+0x280/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<00000000d856304a>] .of_unittest+0x2758/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f2e84740 (size 16):
  comm "swapper/0", pid 1, jiffies 4294878937 (age 824.764s)
  hex dump (first 16 bytes):
    74 65 73 74 2d 75 6e 69 74 74 65 73 74 34 00 a5  test-unittest4..
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000a074532f>] .__of_node_dup+0x50/0x1c0
    [<000000006f73e286>] .build_changeset_next_level+0x280/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<00000000d856304a>] .of_unittest+0x2758/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007f1c1c680 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878937 (age 824.764s)
  hex dump (first 32 bytes):
    c0 00 20 07 f2 e8 70 f0 00 00 00 09 00 00 00 00  .. ...p.........
    c0 00 20 07 f4 2e b6 b0 c0 00 00 07 f1 c1 df 80  .. .............
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<00000000d856304a>] .of_unittest+0x2758/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f2e870f0 (size 16):
  comm "swapper/0", pid 1, jiffies 4294878937 (age 824.764s)
  hex dump (first 16 bytes):
    63 6f 6d 70 61 74 69 62 6c 65 00 6b 6b 6b 6b a5  compatible.kkkk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<00000000d856304a>] .of_unittest+0x2758/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f42eb6b0 (size 16):
  comm "swapper/0", pid 1, jiffies 4294878937 (age 824.764s)
  hex dump (first 16 bytes):
    75 6e 69 74 74 65 73 74 00 6b 6b 6b 6b 6b 6b a5  unittest.kkkkkk.
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<00000000d856304a>] .of_unittest+0x2758/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007f1c1df80 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878937 (age 824.767s)
  hex dump (first 32 bytes):
    c0 00 00 07 ec 7f ec 60 00 00 00 05 00 00 00 00  .......`........
    c0 00 00 07 ec 7f f4 70 c0 00 00 07 f1 c1 e2 00  .......p........
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<00000000d856304a>] .of_unittest+0x2758/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec7fec60 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878937 (age 824.767s)
  hex dump (first 8 bytes):
    73 74 61 74 75 73 00 a5                          status..
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<00000000d856304a>] .of_unittest+0x2758/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec7ff470 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878937 (age 824.767s)
  hex dump (first 8 bytes):
    6f 6b 61 79 00 6b 6b a5                          okay.kk.
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<00000000d856304a>] .of_unittest+0x2758/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007f1c1e200 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878937 (age 824.767s)
  hex dump (first 32 bytes):
    c0 00 00 07 ec 7f dc 40 00 00 00 04 00 00 00 00  .......@........
    c0 00 00 07 ec 7f cc 20 c0 00 00 07 f1 c1 97 00  ....... ........
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<00000000d856304a>] .of_unittest+0x2758/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec7fdc40 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878937 (age 824.767s)
  hex dump (first 8 bytes):
    72 65 67 00 6b 6b 6b a5                          reg.kkk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<00000000d856304a>] .of_unittest+0x2758/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec7fcc20 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878937 (age 824.767s)
  hex dump (first 8 bytes):
    00 00 00 04 6b 6b 6b a5                          ....kkk.
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<00000000d856304a>] .of_unittest+0x2758/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007f1c19700 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878937 (age 824.770s)
  hex dump (first 32 bytes):
    c0 00 00 07 ec 7f c5 68 00 00 00 0f 00 00 00 00  .......h........
    c0 00 20 07 f4 2e bb 00 00 00 00 00 00 00 00 00  .. .............
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<00000000d856304a>] .of_unittest+0x2758/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec7fc568 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878937 (age 824.770s)
  hex dump (first 8 bytes):
    6e 61 6d 65 00 6b 6b a5                          name.kk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<00000000d856304a>] .of_unittest+0x2758/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f42ebb00 (size 16):
  comm "swapper/0", pid 1, jiffies 4294878937 (age 824.770s)
  hex dump (first 16 bytes):
    74 65 73 74 2d 75 6e 69 74 74 65 73 74 34 00 a5  test-unittest4..
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<00000000d856304a>] .of_unittest+0x2758/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f42e8fe0 (size 16):
  comm "swapper/0", pid 1, jiffies 4294878937 (age 824.770s)
  hex dump (first 16 bytes):
    74 65 73 74 2d 75 6e 69 74 74 65 73 74 34 00 a5  test-unittest4..
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<0000000001df4c62>] .kvasprintf_const+0xa8/0xf0
    [<00000000b7ba15a5>] .kobject_set_name_vargs+0x34/0xf0
    [<0000000076cbbcf2>] .kobject_add+0x50/0xe0
    [<000000002d7a6157>] .__of_attach_node_sysfs+0xa8/0x160
    [<000000004ed552f3>] .__of_changeset_entry_apply+0x32c/0x390
    [<0000000062a8a683>] .__of_changeset_apply_entries+0x48/0x110
    [<0000000067290146>] .of_overlay_fdt_apply+0xb00/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<00000000d856304a>] .of_unittest+0x2758/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007eb89e108 (size 192):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.767s)
  hex dump (first 32 bytes):
    c0 00 00 07 eb a1 c8 a0 00 00 00 00 00 00 00 00  ................
    c0 00 20 07 f4 2e 8b 90 00 00 00 00 00 00 00 00  .. .............
  backtrace:
    [<0000000007b50c76>] .__of_node_dup+0x38/0x1c0
    [<000000006f73e286>] .build_changeset_next_level+0x280/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f42e8b90 (size 16):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.767s)
  hex dump (first 16 bytes):
    74 65 73 74 2d 75 6e 69 74 74 65 73 74 31 30 00  test-unittest10.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000a074532f>] .__of_node_dup+0x50/0x1c0
    [<000000006f73e286>] .build_changeset_next_level+0x280/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007f1c18f80 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.767s)
  hex dump (first 32 bytes):
    c0 00 20 07 f4 2e 8a 20 00 00 00 09 00 00 00 00  .. .... ........
    c0 00 20 07 f4 2e a5 70 c0 00 00 07 f1 c1 8a 80  .. ....p........
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f42e8a20 (size 16):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.770s)
  hex dump (first 16 bytes):
    63 6f 6d 70 61 74 69 62 6c 65 00 6b 6b 6b 6b a5  compatible.kkkk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f42ea570 (size 16):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.770s)
  hex dump (first 16 bytes):
    75 6e 69 74 74 65 73 74 00 6b 6b 6b 6b 6b 6b a5  unittest.kkkkkk.
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007f1c18a80 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.770s)
  hex dump (first 32 bytes):
    c0 00 20 07 f5 57 61 a0 00 00 00 05 00 00 00 00  .. ..Wa.........
    c0 00 20 07 f5 57 4e d0 c0 00 00 07 f1 c1 94 80  .. ..WN.........
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f55761a0 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.774s)
  hex dump (first 8 bytes):
    73 74 61 74 75 73 00 a5                          status..
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f5574ed0 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.774s)
  hex dump (first 8 bytes):
    6f 6b 61 79 00 6b 6b a5                          okay.kk.
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007f1c19480 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.774s)
  hex dump (first 32 bytes):
    c0 00 20 07 f5 57 50 28 00 00 00 04 00 00 00 00  .. ..WP(........
    c0 00 20 07 f5 57 71 c0 c0 00 00 07 f1 c1 c1 80  .. ..Wq.........
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f5575028 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.774s)
  hex dump (first 8 bytes):
    72 65 67 00 6b 6b 6b a5                          reg.kkk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f55771c0 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.774s)
  hex dump (first 8 bytes):
    00 00 00 0a 6b 6b 6b a5                          ....kkk.
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007f1c1c180 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.774s)
  hex dump (first 32 bytes):
    c0 00 20 07 f4 2e 99 f0 00 00 00 04 00 00 00 00  .. .............
    c0 00 20 07 f5 57 74 70 c0 00 00 07 f1 c1 ab 00  .. ..Wtp........
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f5577470 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.777s)
  hex dump (first 8 bytes):
    00 00 00 01 6b 6b 6b a5                          ....kkk.
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007f1c1ab00 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.777s)
  hex dump (first 32 bytes):
    c0 00 20 07 f4 2e 88 b0 00 00 00 04 00 00 00 00  .. .............
    c0 00 20 07 f5 57 7d d8 c0 00 00 07 f1 c1 8d 00  .. ..W}.........
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f42e88b0 (size 16):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.777s)
  hex dump (first 16 bytes):
    23 73 69 7a 65 2d 63 65 6c 6c 73 00 6b 6b 6b a5  #size-cells.kkk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f5577dd8 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.780s)
  hex dump (first 8 bytes):
    00 00 00 00 6b 6b 6b a5                          ....kkk.
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007f1c18d00 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.780s)
  hex dump (first 32 bytes):
    c0 00 20 07 f5 57 48 18 00 00 00 10 00 00 00 00  .. ..WH.........
    c0 00 20 07 f4 2e ac a0 00 00 00 00 00 00 00 00  .. .............
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f5574818 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.780s)
  hex dump (first 8 bytes):
    6e 61 6d 65 00 6b 6b a5                          name.kk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f42eaca0 (size 16):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.780s)
  hex dump (first 16 bytes):
    74 65 73 74 2d 75 6e 69 74 74 65 73 74 31 30 00  test-unittest10.
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007eb89d8c8 (size 192):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.780s)
  hex dump (first 32 bytes):
    c0 00 00 07 eb a1 cb 50 00 00 00 00 00 00 00 00  .......P........
    c0 00 00 07 ea dd 8d 20 00 00 00 00 00 00 00 00  ....... ........
  backtrace:
    [<0000000007b50c76>] .__of_node_dup+0x38/0x1c0
    [<000000006f73e286>] .build_changeset_next_level+0x280/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007eadd8d20 (size 32):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.780s)
  hex dump (first 32 bytes):
    74 65 73 74 2d 75 6e 69 74 74 65 73 74 31 30 31  test-unittest101
    00 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b a5  .kkkkkkkkkkkkkk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000a074532f>] .__of_node_dup+0x50/0x1c0
    [<000000006f73e286>] .build_changeset_next_level+0x280/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007f1c1a880 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.784s)
  hex dump (first 32 bytes):
    c0 00 20 07 f4 2e af 80 00 00 00 09 00 00 00 00  .. .............
    c0 00 20 07 f4 2e 81 80 c0 00 00 07 f1 c1 92 00  .. .............
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f42eaf80 (size 16):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.784s)
  hex dump (first 16 bytes):
    63 6f 6d 70 61 74 69 62 6c 65 00 6b 6b 6b 6b a5  compatible.kkkk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f42e8180 (size 16):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.784s)
  hex dump (first 16 bytes):
    75 6e 69 74 74 65 73 74 00 6b 6b 6b 6b 6b 6b a5  unittest.kkkkkk.
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007f1c19200 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.784s)
  hex dump (first 32 bytes):
    c0 00 20 07 f5 57 75 c8 00 00 00 05 00 00 00 00  .. ..Wu.........
    c0 00 20 07 f5 57 7c 80 c0 00 00 07 f1 c1 d3 00  .. ..W|.........
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f55775c8 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.784s)
  hex dump (first 8 bytes):
    73 74 61 74 75 73 00 a5                          status..
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f5577c80 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.784s)
  hex dump (first 8 bytes):
    6f 6b 61 79 00 6b 6b a5                          okay.kk.
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007f1c1d300 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.787s)
  hex dump (first 32 bytes):
    c0 00 20 07 f5 57 77 20 00 00 00 04 00 00 00 00  .. ..Ww ........
    c0 00 20 07 f5 57 5d 98 c0 00 00 07 f2 25 0f 80  .. ..W]......%..
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f5577720 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.787s)
  hex dump (first 8 bytes):
    72 65 67 00 6b 6b 6b a5                          reg.kkk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f5575d98 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.787s)
  hex dump (first 8 bytes):
    00 00 00 01 6b 6b 6b a5                          ....kkk.
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007f2250f80 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.790s)
  hex dump (first 32 bytes):
    c0 00 20 07 f5 57 68 58 00 00 00 11 00 00 00 00  .. ..WhX........
    c0 00 00 07 ea dd a2 40 00 00 00 00 00 00 00 00  .......@........
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f5576858 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.790s)
  hex dump (first 8 bytes):
    6e 61 6d 65 00 6b 6b a5                          name.kk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007eadda240 (size 32):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.790s)
  hex dump (first 32 bytes):
    74 65 73 74 2d 75 6e 69 74 74 65 73 74 31 30 31  test-unittest101
    00 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b a5  .kkkkkkkkkkkkkk.
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007ece6bc70 (size 16):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.790s)
  hex dump (first 16 bytes):
    74 65 73 74 2d 75 6e 69 74 74 65 73 74 31 30 00  test-unittest10.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<0000000001df4c62>] .kvasprintf_const+0xa8/0xf0
    [<00000000b7ba15a5>] .kobject_set_name_vargs+0x34/0xf0
    [<0000000076cbbcf2>] .kobject_add+0x50/0xe0
    [<000000002d7a6157>] .__of_attach_node_sysfs+0xa8/0x160
    [<000000004ed552f3>] .__of_changeset_entry_apply+0x32c/0x390
    [<0000000062a8a683>] .__of_changeset_apply_entries+0x48/0x110
    [<0000000067290146>] .of_overlay_fdt_apply+0xb00/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007eadd9540 (size 32):
  comm "swapper/0", pid 1, jiffies 4294878938 (age 824.790s)
  hex dump (first 32 bytes):
    74 65 73 74 2d 75 6e 69 74 74 65 73 74 31 30 31  test-unittest101
    00 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b a5  .kkkkkkkkkkkkkk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<0000000001df4c62>] .kvasprintf_const+0xa8/0xf0
    [<00000000b7ba15a5>] .kobject_set_name_vargs+0x34/0xf0
    [<0000000076cbbcf2>] .kobject_add+0x50/0xe0
    [<000000002d7a6157>] .__of_attach_node_sysfs+0xa8/0x160
    [<000000004ed552f3>] .__of_changeset_entry_apply+0x32c/0x390
    [<0000000062a8a683>] .__of_changeset_apply_entries+0x48/0x110
    [<0000000067290146>] .of_overlay_fdt_apply+0xb00/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<00000000e3d25537>] .of_unittest_apply_overlay_check+0xfc/0x1e4
    [<000000009b1b95aa>] .of_unittest+0x2da4/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007eb89e738 (size 192):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.787s)
  hex dump (first 32 bytes):
    c0 00 00 07 eb a1 98 a0 00 00 00 00 00 00 00 00  ................
    c0 00 20 07 ec e6 8e 70 00 00 00 00 00 00 00 00  .. ....p........
  backtrace:
    [<0000000007b50c76>] .__of_node_dup+0x38/0x1c0
    [<000000006f73e286>] .build_changeset_next_level+0x280/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007ece68e70 (size 16):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.790s)
  hex dump (first 16 bytes):
    74 65 73 74 2d 75 6e 69 74 74 65 73 74 31 31 00  test-unittest11.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000a074532f>] .__of_node_dup+0x50/0x1c0
    [<000000006f73e286>] .build_changeset_next_level+0x280/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec886200 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.790s)
  hex dump (first 32 bytes):
    c0 00 20 07 ec e6 a4 00 00 00 00 09 00 00 00 00  .. .............
    c0 00 20 07 ec e6 99 f0 c0 00 00 07 ec 88 55 80  .. ...........U.
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007ece6a400 (size 16):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.790s)
  hex dump (first 16 bytes):
    63 6f 6d 70 61 74 69 62 6c 65 00 6b 6b 6b 6b a5  compatible.kkkk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007ece699f0 (size 16):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.794s)
  hex dump (first 16 bytes):
    75 6e 69 74 74 65 73 74 00 6b 6b 6b 6b 6b 6b a5  unittest.kkkkkk.
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec885580 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.794s)
  hex dump (first 32 bytes):
    c0 00 20 07 f8 5d a0 48 00 00 00 05 00 00 00 00  .. ..].H........
    c0 00 20 07 f8 5d ac 60 c0 00 00 07 ec 88 46 80  .. ..].`......F.
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f85da048 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.794s)
  hex dump (first 8 bytes):
    73 74 61 74 75 73 00 a5                          status..
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f85dac60 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.794s)
  hex dump (first 8 bytes):
    6f 6b 61 79 00 6b 6b a5                          okay.kk.
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec884680 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.794s)
  hex dump (first 32 bytes):
    c0 00 20 07 f8 5d ab 08 00 00 00 04 00 00 00 00  .. ..]..........
    c0 00 20 07 f8 5d 9a e8 c0 00 00 07 ec 88 6e 80  .. ..]........n.
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f85dab08 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.794s)
  hex dump (first 8 bytes):
    72 65 67 00 6b 6b 6b a5                          reg.kkk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f85d9ae8 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.797s)
  hex dump (first 8 bytes):
    00 00 00 0b 6b 6b 6b a5                          ....kkk.
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec886e80 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.797s)
  hex dump (first 32 bytes):
    c0 00 20 07 ec e6 a6 e0 00 00 00 04 00 00 00 00  .. .............
    c0 00 20 07 f8 5d b3 18 c0 00 00 07 ec 88 44 00  .. ..]........D.
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007ece6a6e0 (size 16):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.797s)
  hex dump (first 16 bytes):
    23 61 64 64 72 65 73 73 2d 63 65 6c 6c 73 00 a5  #address-cells..
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f85db318 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.797s)
  hex dump (first 8 bytes):
    00 00 00 01 6b 6b 6b a5                          ....kkk.
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec884400 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.797s)
  hex dump (first 32 bytes):
    c0 00 20 07 ec e6 81 80 00 00 00 04 00 00 00 00  .. .............
    c0 00 20 07 f8 5d 92 d8 c0 00 00 07 ec 88 3a 00  .. ..]........:.
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007ece68180 (size 16):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.797s)
  hex dump (first 16 bytes):
    23 73 69 7a 65 2d 63 65 6c 6c 73 00 6b 6b 6b a5  #size-cells.kkk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f85d92d8 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.800s)
  hex dump (first 8 bytes):
    00 00 00 00 6b 6b 6b a5                          ....kkk.
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec883a00 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.800s)
  hex dump (first 32 bytes):
    c0 00 20 07 f8 5d 80 08 00 00 00 10 00 00 00 00  .. ..]..........
    c0 00 20 07 ec e6 b3 d0 00 00 00 00 00 00 00 00  .. .............
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f85d8008 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.800s)
  hex dump (first 8 bytes):
    6e 61 6d 65 00 6b 6b a5                          name.kk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007ece6b3d0 (size 16):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.804s)
  hex dump (first 16 bytes):
    74 65 73 74 2d 75 6e 69 74 74 65 73 74 31 31 00  test-unittest11.
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007eb89fde8 (size 192):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.804s)
  hex dump (first 32 bytes):
    c0 00 00 07 eb a1 9b 50 00 00 00 00 00 00 00 00  .......P........
    c0 00 00 07 ea dd 85 00 00 00 00 00 00 00 00 00  ................
  backtrace:
    [<0000000007b50c76>] .__of_node_dup+0x38/0x1c0
    [<000000006f73e286>] .build_changeset_next_level+0x280/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007eadd8500 (size 32):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.804s)
  hex dump (first 32 bytes):
    74 65 73 74 2d 75 6e 69 74 74 65 73 74 31 31 31  test-unittest111
    00 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b a5  .kkkkkkkkkkkkkk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000a074532f>] .__of_node_dup+0x50/0x1c0
    [<000000006f73e286>] .build_changeset_next_level+0x280/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec886c00 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.804s)
  hex dump (first 32 bytes):
    c0 00 20 07 ec e6 8a 20 00 00 00 09 00 00 00 00  .. .... ........
    c0 00 20 07 ec e6 ab 30 c0 00 00 07 ec 88 0a 80  .. ....0........
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007ece68a20 (size 16):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.804s)
  hex dump (first 16 bytes):
    63 6f 6d 70 61 74 69 62 6c 65 00 6b 6b 6b 6b a5  compatible.kkkk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007ece6ab30 (size 16):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.804s)
  hex dump (first 16 bytes):
    75 6e 69 74 74 65 73 74 00 6b 6b 6b 6b 6b 6b a5  unittest.kkkkkk.
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec880a80 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.807s)
  hex dump (first 32 bytes):
    c0 00 20 07 f8 5d a5 a8 00 00 00 05 00 00 00 00  .. ..]..........
    c0 00 00 07 eb 18 c8 18 c0 00 00 07 ec 88 58 00  ..............X.
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f85da5a8 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.807s)
  hex dump (first 8 bytes):
    73 74 61 74 75 73 00 a5                          status..
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007eb18c818 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.807s)
  hex dump (first 8 bytes):
    6f 6b 61 79 00 6b 6b a5                          okay.kk.
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec885800 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.810s)
  hex dump (first 32 bytes):
    c0 00 00 07 eb 18 fc 80 00 00 00 04 00 00 00 00  ................
    c0 00 00 07 eb 18 f4 70 c0 00 00 07 ec 88 41 80  .......p......A.
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007eb18fc80 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.810s)
  hex dump (first 8 bytes):
    72 65 67 00 6b 6b 6b a5                          reg.kkk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007eb18f470 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.810s)
  hex dump (first 8 bytes):
    00 00 00 01 6b 6b 6b a5                          ....kkk.
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec884180 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.810s)
  hex dump (first 32 bytes):
    c0 00 00 07 eb 18 dd 98 00 00 00 11 00 00 00 00  ................
    c0 00 00 07 ea dd b4 20 00 00 00 00 00 00 00 00  ....... ........
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007eb18dd98 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.810s)
  hex dump (first 8 bytes):
    6e 61 6d 65 00 6b 6b a5                          name.kk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007eaddb420 (size 32):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.810s)
  hex dump (first 32 bytes):
    74 65 73 74 2d 75 6e 69 74 74 65 73 74 31 31 31  test-unittest111
    00 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b a5  .kkkkkkkkkkkkkk.
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<0000000038c6aced>] .add_changeset_property.isra.0+0x61c/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<0000000034ba1197>] .build_changeset_next_level+0x334/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007ece6a850 (size 16):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.814s)
  hex dump (first 16 bytes):
    74 65 73 74 2d 75 6e 69 74 74 65 73 74 31 31 00  test-unittest11.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<0000000001df4c62>] .kvasprintf_const+0xa8/0xf0
    [<00000000b7ba15a5>] .kobject_set_name_vargs+0x34/0xf0
    [<0000000076cbbcf2>] .kobject_add+0x50/0xe0
    [<000000002d7a6157>] .__of_attach_node_sysfs+0xa8/0x160
    [<000000004ed552f3>] .__of_changeset_entry_apply+0x32c/0x390
    [<0000000062a8a683>] .__of_changeset_apply_entries+0x48/0x110
    [<0000000067290146>] .of_overlay_fdt_apply+0xb00/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007eadda580 (size 32):
  comm "swapper/0", pid 1, jiffies 4294878939 (age 824.814s)
  hex dump (first 32 bytes):
    74 65 73 74 2d 75 6e 69 74 74 65 73 74 31 31 31  test-unittest111
    00 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b a5  .kkkkkkkkkkkkkk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<0000000001df4c62>] .kvasprintf_const+0xa8/0xf0
    [<00000000b7ba15a5>] .kobject_set_name_vargs+0x34/0xf0
    [<0000000076cbbcf2>] .kobject_add+0x50/0xe0
    [<000000002d7a6157>] .__of_attach_node_sysfs+0xa8/0x160
    [<000000004ed552f3>] .__of_changeset_entry_apply+0x32c/0x390
    [<0000000062a8a683>] .__of_changeset_apply_entries+0x48/0x110
    [<0000000067290146>] .of_overlay_fdt_apply+0xb00/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<000000003ad7372f>] .of_unittest_apply_overlay.constprop.0+0x54/0xb8
    [<000000008fda7969>] .of_unittest_apply_revert_overlay_check.constprop.0+0xc4/0x2b4
    [<00000000ea132166>] .of_unittest+0x2ee0/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec881200 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878943 (age 824.800s)
  hex dump (first 32 bytes):
    c0 00 00 07 ec 71 d0 28 00 00 00 0c 00 00 00 00  .....q.(........
    c0 00 20 07 f2 e8 c5 d0 00 00 00 00 00 00 00 00  .. .............
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<000000004e6be113>] .of_unittest+0x3458/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec71d028 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878943 (age 824.800s)
  hex dump (first 8 bytes):
    6e 61 6d 65 00 6b 6b a5                          name.kk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<000000004e6be113>] .of_unittest+0x3458/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007f2e8c5d0 (size 16):
  comm "swapper/0", pid 1, jiffies 4294878943 (age 824.804s)
  hex dump (first 16 bytes):
    5f 5f 73 79 6d 62 6f 6c 73 5f 5f 00 6b 6b 6b a5  __symbols__.kkk.
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<000000004e6be113>] .of_unittest+0x3458/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007eaddb280 (size 32):
  comm "swapper/0", pid 1, jiffies 4294878943 (age 824.804s)
  hex dump (first 32 bytes):
    2f 74 65 73 74 63 61 73 65 2d 64 61 74 61 2d 32  /testcase-data-2
    2f 73 75 62 73 74 61 74 69 6f 6e 40 31 30 30 00  /substation@100.
  backtrace:
    [<00000000154ad5cf>] .kvasprintf+0x60/0xd0
    [<00000000c2320ab8>] .kasprintf+0x2c/0x40
    [<000000005511b2ac>] .add_changeset_property.isra.0+0x170/0xaf0
    [<0000000060888297>] .of_overlay_fdt_apply+0x5e4/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<00000000daa7ed62>] .of_unittest+0x3404/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007eadd9880 (size 32):
  comm "swapper/0", pid 1, jiffies 4294878943 (age 824.804s)
  hex dump (first 32 bytes):
    2f 74 65 73 74 63 61 73 65 2d 64 61 74 61 2d 32  /testcase-data-2
    2f 66 61 69 72 77 61 79 2d 31 00 6b 6b 6b 6b a5  /fairway-1.kkkk.
  backtrace:
    [<00000000154ad5cf>] .kvasprintf+0x60/0xd0
    [<00000000c2320ab8>] .kasprintf+0x2c/0x40
    [<000000005511b2ac>] .add_changeset_property.isra.0+0x170/0xaf0
    [<0000000060888297>] .of_overlay_fdt_apply+0x5e4/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<00000000daa7ed62>] .of_unittest+0x3404/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007eaddbc40 (size 32):
  comm "swapper/0", pid 1, jiffies 4294878943 (age 824.804s)
  hex dump (first 32 bytes):
    2f 74 65 73 74 63 61 73 65 2d 64 61 74 61 2d 32  /testcase-data-2
    2f 66 61 69 72 77 61 79 2d 31 00 6b 6b 6b 6b a5  /fairway-1.kkkk.
  backtrace:
    [<00000000154ad5cf>] .kvasprintf+0x60/0xd0
    [<00000000c2320ab8>] .kasprintf+0x2c/0x40
    [<000000005511b2ac>] .add_changeset_property.isra.0+0x170/0xaf0
    [<0000000060888297>] .of_overlay_fdt_apply+0x5e4/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<00000000daa7ed62>] .of_unittest+0x3404/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007eaddbaa0 (size 32):
  comm "swapper/0", pid 1, jiffies 4294878943 (age 824.804s)
  hex dump (first 32 bytes):
    2f 74 65 73 74 63 61 73 65 2d 64 61 74 61 2d 32  /testcase-data-2
    2f 66 61 69 72 77 61 79 2d 31 00 6b 6b 6b 6b a5  /fairway-1.kkkk.
  backtrace:
    [<00000000154ad5cf>] .kvasprintf+0x60/0xd0
    [<00000000c2320ab8>] .kasprintf+0x2c/0x40
    [<000000005511b2ac>] .add_changeset_property.isra.0+0x170/0xaf0
    [<0000000060888297>] .of_overlay_fdt_apply+0x5e4/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<00000000daa7ed62>] .of_unittest+0x3404/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec37b000 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878945 (age 824.797s)
  hex dump (first 32 bytes):
    c0 00 00 07 eb 7a 42 f0 00 00 00 04 00 00 00 00  .....zB.........
    c0 00 20 07 ef af e1 a0 00 00 00 00 00 00 00 00  .. .............
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<00000000e6e185ca>] .add_changeset_property.isra.0+0x960/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000043c13a57>] .build_changeset_next_level+0x21c/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<00000000eaf6e6ea>] .of_unittest+0x35b8/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007eb7a42f0 (size 16):
  comm "swapper/0", pid 1, jiffies 4294878945 (age 824.797s)
  hex dump (first 16 bytes):
    72 70 6d 5f 61 76 61 69 6c 00 6b 6b 6b 6b 6b a5  rpm_avail.kkkkk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<00000000e6e185ca>] .add_changeset_property.isra.0+0x960/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000043c13a57>] .build_changeset_next_level+0x21c/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<00000000eaf6e6ea>] .of_unittest+0x35b8/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007efafe1a0 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878945 (age 824.797s)
  hex dump (first 8 bytes):
    00 00 00 64 6b 6b 6b a5                          ...dkkk.
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<00000000e6e185ca>] .add_changeset_property.isra.0+0x960/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<0000000043c13a57>] .build_changeset_next_level+0x21c/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<00000000eaf6e6ea>] .of_unittest+0x35b8/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007ec37bf00 (size 128):
  comm "swapper/0", pid 1, jiffies 4294878945 (age 824.797s)
  hex dump (first 32 bytes):
    c0 00 00 07 eb 7a 5b 60 00 00 00 08 00 00 00 00  .....z[`........
    c0 00 20 07 ef af f7 20 00 00 00 00 00 00 00 00  .. .... ........
  backtrace:
    [<00000000fd6c039b>] .__of_prop_dup+0x48/0x130
    [<00000000e6e185ca>] .add_changeset_property.isra.0+0x960/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<00000000eaf6e6ea>] .of_unittest+0x35b8/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0000007eb7a5b60 (size 16):
  comm "swapper/0", pid 1, jiffies 4294878945 (age 824.800s)
  hex dump (first 16 bytes):
    72 70 6d 5f 61 76 61 69 6c 00 6b 6b 6b 6b 6b a5  rpm_avail.kkkkk.
  backtrace:
    [<00000000c939be68>] .kstrdup+0x44/0xb0
    [<00000000f0610228>] .__of_prop_dup+0x60/0x130
    [<00000000e6e185ca>] .add_changeset_property.isra.0+0x960/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<00000000eaf6e6ea>] .of_unittest+0x35b8/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68
unreferenced object 0xc0002007efaff720 (size 8):
  comm "swapper/0", pid 1, jiffies 4294878945 (age 824.800s)
  hex dump (first 8 bytes):
    00 00 00 64 00 00 00 c8                          ...d....
  backtrace:
    [<00000000a2a61f11>] .kmemdup+0x30/0x70
    [<00000000fcebe2cd>] .__of_prop_dup+0x7c/0x130
    [<00000000e6e185ca>] .add_changeset_property.isra.0+0x960/0xaf0
    [<000000008b0977be>] .build_changeset_next_level+0x74/0x370
    [<000000009598e32c>] .of_overlay_fdt_apply+0x504/0xf90
    [<00000000a7d4460c>] .overlay_data_apply+0xa8/0x118
    [<00000000eaf6e6ea>] .of_unittest+0x35b8/0x3778
    [<00000000af117d89>] .do_one_initcall+0x7c/0x420
    [<00000000c99776b4>] .kernel_init_freeable+0x318/0x3d8
    [<0000000001b957ee>] .kernel_init+0x14/0x168
    [<000000001fe347b5>] .ret_from_kernel_thread+0x58/0x68

^ permalink raw reply

* Re: [PATCH v1 2/2] mm/memory_hotplug: remove is_mem_section_removable()
From: Baoquan He @ 2020-04-08  2:48 UTC (permalink / raw)
  To: David Hildenbrand
  Cc: Michal Hocko, linux-kernel, Wei Yang, linux-mm, Andrew Morton,
	linuxppc-dev, Oscar Salvador
In-Reply-To: <20200407135416.24093-3-david@redhat.com>

On 04/07/20 at 03:54pm, David Hildenbrand wrote:
> Fortunately, all users of is_mem_section_removable() are gone. Get rid of
> it, including some now unnecessary functions.
> 
> Cc: Michael Ellerman <mpe@ellerman.id.au>
> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> Cc: Michal Hocko <mhocko@suse.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: Oscar Salvador <osalvador@suse.de>
> Cc: Baoquan He <bhe@redhat.com>
> Cc: Wei Yang <richard.weiyang@gmail.com>
> Signed-off-by: David Hildenbrand <david@redhat.com>

Assuming no issue to patch 1, this one looks good.

Reviewed-by: Baoquan He <bhe@redhat.com>

> ---
>  include/linux/memory_hotplug.h |  7 ----
>  mm/memory_hotplug.c            | 75 ----------------------------------
>  2 files changed, 82 deletions(-)
> 
> diff --git a/include/linux/memory_hotplug.h b/include/linux/memory_hotplug.h
> index 93d9ada74ddd..7dca9cd6076b 100644
> --- a/include/linux/memory_hotplug.h
> +++ b/include/linux/memory_hotplug.h
> @@ -314,19 +314,12 @@ static inline void pgdat_resize_init(struct pglist_data *pgdat) {}
>  
>  #ifdef CONFIG_MEMORY_HOTREMOVE
>  
> -extern bool is_mem_section_removable(unsigned long pfn, unsigned long nr_pages);
>  extern void try_offline_node(int nid);
>  extern int offline_pages(unsigned long start_pfn, unsigned long nr_pages);
>  extern int remove_memory(int nid, u64 start, u64 size);
>  extern void __remove_memory(int nid, u64 start, u64 size);
>  
>  #else
> -static inline bool is_mem_section_removable(unsigned long pfn,
> -					unsigned long nr_pages)
> -{
> -	return false;
> -}
> -
>  static inline void try_offline_node(int nid) {}
>  
>  static inline int offline_pages(unsigned long start_pfn, unsigned long nr_pages)
> diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
> index 47cf6036eb31..4d338d546d52 100644
> --- a/mm/memory_hotplug.c
> +++ b/mm/memory_hotplug.c
> @@ -1112,81 +1112,6 @@ int add_memory(int nid, u64 start, u64 size)
>  EXPORT_SYMBOL_GPL(add_memory);
>  
>  #ifdef CONFIG_MEMORY_HOTREMOVE
> -/*
> - * A free page on the buddy free lists (not the per-cpu lists) has PageBuddy
> - * set and the size of the free page is given by page_order(). Using this,
> - * the function determines if the pageblock contains only free pages.
> - * Due to buddy contraints, a free page at least the size of a pageblock will
> - * be located at the start of the pageblock
> - */
> -static inline int pageblock_free(struct page *page)
> -{
> -	return PageBuddy(page) && page_order(page) >= pageblock_order;
> -}
> -
> -/* Return the pfn of the start of the next active pageblock after a given pfn */
> -static unsigned long next_active_pageblock(unsigned long pfn)
> -{
> -	struct page *page = pfn_to_page(pfn);
> -
> -	/* Ensure the starting page is pageblock-aligned */
> -	BUG_ON(pfn & (pageblock_nr_pages - 1));
> -
> -	/* If the entire pageblock is free, move to the end of free page */
> -	if (pageblock_free(page)) {
> -		int order;
> -		/* be careful. we don't have locks, page_order can be changed.*/
> -		order = page_order(page);
> -		if ((order < MAX_ORDER) && (order >= pageblock_order))
> -			return pfn + (1 << order);
> -	}
> -
> -	return pfn + pageblock_nr_pages;
> -}
> -
> -static bool is_pageblock_removable_nolock(unsigned long pfn)
> -{
> -	struct page *page = pfn_to_page(pfn);
> -	struct zone *zone;
> -
> -	/*
> -	 * We have to be careful here because we are iterating over memory
> -	 * sections which are not zone aware so we might end up outside of
> -	 * the zone but still within the section.
> -	 * We have to take care about the node as well. If the node is offline
> -	 * its NODE_DATA will be NULL - see page_zone.
> -	 */
> -	if (!node_online(page_to_nid(page)))
> -		return false;
> -
> -	zone = page_zone(page);
> -	pfn = page_to_pfn(page);
> -	if (!zone_spans_pfn(zone, pfn))
> -		return false;
> -
> -	return !has_unmovable_pages(zone, page, MIGRATE_MOVABLE,
> -				    MEMORY_OFFLINE);
> -}
> -
> -/* Checks if this range of memory is likely to be hot-removable. */
> -bool is_mem_section_removable(unsigned long start_pfn, unsigned long nr_pages)
> -{
> -	unsigned long end_pfn, pfn;
> -
> -	end_pfn = min(start_pfn + nr_pages,
> -			zone_end_pfn(page_zone(pfn_to_page(start_pfn))));
> -
> -	/* Check the starting page of each pageblock within the range */
> -	for (pfn = start_pfn; pfn < end_pfn; pfn = next_active_pageblock(pfn)) {
> -		if (!is_pageblock_removable_nolock(pfn))
> -			return false;
> -		cond_resched();
> -	}
> -
> -	/* All pageblocks in the memory block are likely to be hot-removable */
> -	return true;
> -}
> -
>  /*
>   * Confirm all pages in a range [start, end) belong to the same zone (skipping
>   * memory holes). When true, return the zone.
> -- 
> 2.25.1
> 


^ permalink raw reply

* Re: [PATCH v1 1/2] powerpc/pseries/hotplug-memory: stop checking is_mem_section_removable()
From: Baoquan He @ 2020-04-08  2:46 UTC (permalink / raw)
  To: David Hildenbrand, piliu
  Cc: Michal Hocko, linux-kernel, Wei Yang, linux-mm, Paul Mackerras,
	Nathan Fontenot, Andrew Morton, linuxppc-dev, Oscar Salvador
In-Reply-To: <20200407135416.24093-2-david@redhat.com>

Add Pingfan to CC since he usually handles ppc related bugs for RHEL.

On 04/07/20 at 03:54pm, David Hildenbrand wrote:
> In commit 53cdc1cb29e8 ("drivers/base/memory.c: indicate all memory
> blocks as removable"), the user space interface to compute whether a memory
> block can be offlined (exposed via
> /sys/devices/system/memory/memoryX/removable) has effectively been
> deprecated. We want to remove the leftovers of the kernel implementation.

Pingfan, can you have a look at this change on PPC?  Please feel free to
give comments if any concern, or offer ack if it's OK to you.

> 
> When offlining a memory block (mm/memory_hotplug.c:__offline_pages()),
> we'll start by:
> 1. Testing if it contains any holes, and reject if so
> 2. Testing if pages belong to different zones, and reject if so
> 3. Isolating the page range, checking if it contains any unmovable pages
> 
> Using is_mem_section_removable() before trying to offline is not only racy,
> it can easily result in false positives/negatives. Let's stop manually
> checking is_mem_section_removable(), and let device_offline() handle it
> completely instead. We can remove the racy is_mem_section_removable()
> implementation next.
> 
> We now take more locks (e.g., memory hotplug lock when offlining and the
> zone lock when isolating), but maybe we should optimize that
> implementation instead if this ever becomes a real problem (after all,
> memory unplug is already an expensive operation). We started using
> is_mem_section_removable() in commit 51925fb3c5c9 ("powerpc/pseries:
> Implement memory hotplug remove in the kernel"), with the initial
> hotremove support of lmbs.
> 
> Cc: Nathan Fontenot <nfont@linux.vnet.ibm.com>
> Cc: Michael Ellerman <mpe@ellerman.id.au>
> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> Cc: Paul Mackerras <paulus@samba.org>
> Cc: Michal Hocko <mhocko@suse.com>
> Cc: Andrew Morton <akpm@linux-foundation.org>
> Cc: Oscar Salvador <osalvador@suse.de>
> Cc: Baoquan He <bhe@redhat.com>
> Cc: Wei Yang <richard.weiyang@gmail.com>
> Signed-off-by: David Hildenbrand <david@redhat.com>
> ---
>  .../platforms/pseries/hotplug-memory.c        | 26 +++----------------
>  1 file changed, 3 insertions(+), 23 deletions(-)
> 
> diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c
> index b2cde1732301..5ace2f9a277e 100644
> --- a/arch/powerpc/platforms/pseries/hotplug-memory.c
> +++ b/arch/powerpc/platforms/pseries/hotplug-memory.c
> @@ -337,39 +337,19 @@ static int pseries_remove_mem_node(struct device_node *np)
>  
>  static bool lmb_is_removable(struct drmem_lmb *lmb)
>  {
> -	int i, scns_per_block;
> -	bool rc = true;
> -	unsigned long pfn, block_sz;
> -	u64 phys_addr;
> -
>  	if (!(lmb->flags & DRCONF_MEM_ASSIGNED))
>  		return false;
>  
> -	block_sz = memory_block_size_bytes();
> -	scns_per_block = block_sz / MIN_MEMORY_BLOCK_SIZE;
> -	phys_addr = lmb->base_addr;
> -
>  #ifdef CONFIG_FA_DUMP
>  	/*
>  	 * Don't hot-remove memory that falls in fadump boot memory area
>  	 * and memory that is reserved for capturing old kernel memory.
>  	 */
> -	if (is_fadump_memory_area(phys_addr, block_sz))
> +	if (is_fadump_memory_area(lmb->base_addr, memory_block_size_bytes()))
>  		return false;
>  #endif
> -
> -	for (i = 0; i < scns_per_block; i++) {
> -		pfn = PFN_DOWN(phys_addr);
> -		if (!pfn_in_present_section(pfn)) {
> -			phys_addr += MIN_MEMORY_BLOCK_SIZE;
> -			continue;
> -		}
> -
> -		rc = rc && is_mem_section_removable(pfn, PAGES_PER_SECTION);
> -		phys_addr += MIN_MEMORY_BLOCK_SIZE;
> -	}
> -
> -	return rc;
> +	/* device_offline() will determine if we can actually remove this lmb */
> +	return true;
>  }
>  
>  static int dlpar_add_lmb(struct drmem_lmb *);
> -- 
> 2.25.1
> 


^ permalink raw reply

* Re: [PATCH v3 1/1] ppc/crash: Reset spinlocks during crash
From: Leonardo Bras @ 2020-04-08  2:36 UTC (permalink / raw)
  To: Nicholas Piggin, Alexios Zavras, Benjamin Herrenschmidt,
	Christophe Leroy, Greg Kroah-Hartman, Enrico Weigelt,
	Michael Ellerman, Paul Mackerras, peterz, Thomas Gleixner
  Cc: linuxppc-dev, linux-kernel
In-Reply-To: <1585895551.7o9oa0ey62.astroid@bobo.none>

[-- Attachment #1: Type: text/plain, Size: 3648 bytes --]

Hello Nick, Michael,

On Fri, 2020-04-03 at 16:41 +1000, Nicholas Piggin wrote:
[...]
> > > PAPR says we are not allowed to have multiple CPUs calling RTAS at once,
> > > except for a very small list of RTAS calls. So if we bust the RTAS lock
> > > there's a risk we violate that part of PAPR and crash even harder.
> > 
> > Interesting, I was not aware.
> > 
> > > Also it's not specific to kdump, we can't even get through a normal
> > > reboot if we crash with the RTAS lock held.
> > > 
> > > Anyway here's a patch with some ideas. That allows me to get from a
> > > crash with the RTAS lock held through kdump into the 2nd kernel. But it
> > > only works if it's the crashing CPU that holds the RTAS lock.
> > > 
> > 
> > Nice idea. 
> > But my test environment is just triggering a crash from sysrq, so I
> > think it would not improve the result, given that this thread is
> > probably not holding the lock by the time.
> 
> Crash paths should not take that RTAS lock, it's a massive pain. I'm 
> fixing it for machine check, for other crashes I think it can be removed 
> too, it just needs to be unpicked. The good thing with crashing is that 
> you can reasonably *know* that you're single threaded, so you can 
> usually reason through situations like above.
> 
> > I noticed that when rtas is locked, irqs and preemption are also
> > disabled.
> > 
> > Should the IPI send by crash be able to interrupt a thread with
> > disabled irqs?
> 
> Yes. It's been a bit painful, but in the long term it means that a CPU 
> which hangs with interrupts off can be debugged, and it means we can 
> take it offline to crash without risking that it will be clobbering what 
> we're doing.
> 
> Arguably what I should have done is try a regular IPI first, wait a few 
> seconds, then NMI IPI.
> 
> A couple of problems with that. Firstly it probably avoids this issue 
> you hit almost all the time, so it won't get fixed. So when we really 
> need the NMI IPI in the field, it'll still be riddled with deadlocks.
> 
> Secondly, sending the IPI first in theory can be more intrusive to the 
> state that we want to debug. It uses the currently running stack, paca 
> save areas, ec. NMI IPI uses its own stack and save regions so it's a 
> little more isolated. Maybe this is only a small advantage but I'd like 
> to have it if we can.  
> 
> Thanks,
> Nick


I think the printk issue is solved (sent a patch on that), now what is
missing is the rtas call spinlock.

I noticed that rtas.lock is taken on machine_kexec_mask_interrupts(),
which happen after crashing the other threads and getting into
realmode. 

The following rtas are called each IRQ with valid interrupt descriptor:
ibm,int-off : Reset mask bit for that interrupt
ibm,set_xive : Set XIVE priority to 0xff

By what I could understand, these rtas calls happen to put the next
kexec kernel (kdump kernel) in a safer environment, so I think it's not
safe to just remove them.
 
(See commit d6c1a9081080c6c4658acf2a06d851feb2855933)

On the other hand, busting the rtas.lock could be dangerous, because
it's code we can't control.

According with LoPAR, for both of these rtas-calls, we have:

For the PowerPC External Interrupt option: The call must be reentrant
to the number of processors on the platform.
For the PowerPC External Interrupt option: The argument call buffer for
each simultaneous call must be physically unique.

Which I think means this rtas-calls can be done simultaneously.
Would it mean that busting the rtas.lock for these calls would be safe?

Best regards,
Leonardo Bras

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply

* Re: [RFC/PATCH  2/3] pseries/kvm: Clear PSSCR[ESL|EC] bits before guest entry
From: David Gibson @ 2020-04-08  2:29 UTC (permalink / raw)
  To: Gautham R Shenoy
  Cc: Michael Neuling, Nicholas Piggin, Bharata B Rao, linuxppc-dev,
	kvm-ppc, Vaidyanathan Srinivasan, linuxppc-dev
In-Reply-To: <20200407132526.GB950@in.ibm.com>

[-- Attachment #1: Type: text/plain, Size: 5241 bytes --]

On Tue, Apr 07, 2020 at 06:55:26PM +0530, Gautham R Shenoy wrote:
> Hello David,
> 
> On Mon, Apr 06, 2020 at 07:58:19PM +1000, David Gibson wrote:
> > On Fri, Apr 03, 2020 at 03:01:03PM +0530, Gautham R Shenoy wrote:
> > > On Fri, Apr 03, 2020 at 12:20:26PM +1000, Nicholas Piggin wrote:
> > > > Gautham R. Shenoy's on March 31, 2020 10:10 pm:
> > > > > From: "Gautham R. Shenoy" <ego@linux.vnet.ibm.com>
> > > > > 
> > > > > ISA v3.0 allows the guest to execute a stop instruction. For this, the
> > > > > PSSCR[ESL|EC] bits need to be cleared by the hypervisor before
> > > > > scheduling in the guest vCPU.
> > > > > 
> > > > > Currently we always schedule in a vCPU with PSSCR[ESL|EC] bits
> > > > > set. This patch changes the behaviour to enter the guest with
> > > > > PSSCR[ESL|EC] bits cleared. This is a RFC patch where we
> > > > > unconditionally clear these bits. Ideally this should be done
> > > > > conditionally on platforms where the guest stop instruction has no
> > > > > Bugs (starting POWER9 DD2.3).
> > > > 
> > > > How will guests know that they can use this facility safely after your
> > > > series? You need both DD2.3 and a patched KVM.
> > > 
> > > 
> > > Yes, this is something that isn't addressed in this series (mentioned
> > > in the cover letter), which is a POC demonstrating that the stop0lite
> > > state in guest works.
> > > 
> > > However, to answer your question, this is the scheme that I had in
> > > mind :
> > > 
> > > OPAL:
> > >    On Procs >= DD2.3 : we publish a dt-cpu-feature "idle-stop-guest"
> > > 
> > > Hypervisor Kernel:
> > >     1. If "idle-stop-guest" dt-cpu-feature is discovered, then
> > >        we set bool enable_guest_stop = true;
> > > 
> > >     2. During KVM guest entry, clear PSSCR[ESL|EC] iff
> > >        enable_guest_stop == true.
> > > 
> > >     3. In kvm_vm_ioctl_check_extension(), for a new capability
> > >        KVM_CAP_STOP, return true iff enable_guest_top == true.
> > > 
> > > QEMU:
> > >    Check with the hypervisor if KVM_CAP_STOP is present. If so,
> > >    indicate the presence to the guest via device tree.
> > 
> > Nack.  Presenting different capabilities to the guest depending on
> > host capabilities (rather than explicit options) is never ok.  It
> > means that depending on the system you start on you may or may not be
> > able to migrate to other systems that you're supposed to be able to,
> 
> I agree that blocking migration for the unavailability of this feature
> is not desirable. Could you point me to some other capabilities in KVM
> which have been implemented via explicit options?

TBH, most of the options for the 'pseries' machine type are in this
category: cap-vsx, cap-dfp, cap-htm, a bunch related to various
Spectre mitigations, cap-hpt-max-page-size (maximum page size for hash
guests), cap-nested-hv, cap-large-decr, cap-fwnmi, resize-hpt (HPT
resizing extension), ic-mode (which irq controllers are available to
the guest).

> The ISA 3.0 allows the guest to execute the "stop" instruction.

So, this was a bug in DD2.2's implementation of the architecture?

> If the
> Hypervisor hasn't cleared the PSSCR[ESL|EC] then, guest executing the
> "stop" instruction in the causes a Hypervisor Facility Unavailable
> Exception, thus giving the hypervisor a chance to emulate the
> instruction. However, in the current code, when the hypervisor
> receives this exception, it sends a PROGKILL to the guest which
> results in crashing the guest.
> 
> Patch 1 of this series emulates wakeup from the "stop"
> instruction. Would the following scheme be ok?
> 
> OPAL:
> 	On Procs >= DD2.3 : we publish a dt-cpu-feature "idle-stop-guest"
> 
> Hypervisor Kernel:
> 
> 	   If "idle-stop-guest" dt feature is available, then, before
> 	   entering the guest, the hypervisor clears the PSSCR[EC|ESL]
> 	   bits allowing the guest to safely execute stop instruction.
> 
> 	   If "idle-stop-guest" dt feature is not available, then, the
> 	   Hypervisor sets the PSSCR[ESL|EC] bits, thereby causing a
> 	   guest "stop" instruction execution to trap back into the
> 	   hypervisor. We then emulate a wakeup from the stop
> 	   instruction (Patch 1 of this series).
> 
> Guest Kernel:
>       If (cpu_has_feature(CPU_FTR_ARCH_300)) only then use the
>       stop0lite cpuidle state.
> 
> This allows us to migrate the KVM guest across any POWER9
> Hypervisor. The minimal addition that the Hypervisor would need is
> Patch 1 of this series.

That could be workable.  Some caveats, though:

 * How does the latency of the trap-and-emulate compare to the guest
   using H_CEDE in the first place?  i.e. how big a negative impact
   will this have for guests running on DD2.2 hosts?

 * We'll only be able to enable this in a new qemu machine type
   version (say, pseries-5.1.0).  Otherwise a guest could start
   thinking it can use stop states, then be migrated to an older qemu
   or host kernel without the support and crash.

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply

* Re: [PATCH v5 13/21] powerpc/xmon: Use a function for reading instructions
From: Jordan Niethe @ 2020-04-08  2:18 UTC (permalink / raw)
  To: Balamuruhan S
  Cc: Alistair Popple, linuxppc-dev, Nicholas Piggin, Daniel Axtens
In-Reply-To: <ff7df8a41dc80faaa020754b5eaafe81a6e745b9.camel@linux.ibm.com>

On Tue, Apr 7, 2020 at 9:31 PM Balamuruhan S <bala24@linux.ibm.com> wrote:
>
> On Mon, 2020-04-06 at 18:09 +1000, Jordan Niethe wrote:
> > Currently in xmon, mread() is used for reading instructions. In
> > preparation for prefixed instructions, create and use a new function,
> > mread_instr(), especially for reading instructions.
> >
> > Signed-off-by: Jordan Niethe <jniethe5@gmail.com>
> > ---
> > v5: New to series, seperated from "Add prefixed instructions to
> > instruction data type"
> > ---
> >  arch/powerpc/xmon/xmon.c | 24 ++++++++++++++++++++----
> >  1 file changed, 20 insertions(+), 4 deletions(-)
> >
> > diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
> > index 5e3949322a6c..6f4cf01a58c1 100644
> > --- a/arch/powerpc/xmon/xmon.c
> > +++ b/arch/powerpc/xmon/xmon.c
> > @@ -125,6 +125,7 @@ extern unsigned int bpt_table[NBPTS * BPT_WORDS];
> >  static int cmds(struct pt_regs *);
> >  static int mread(unsigned long, void *, int);
> >  static int mwrite(unsigned long, void *, int);
> > +static int mread_instr(unsigned long, struct ppc_inst *);
> >  static int handle_fault(struct pt_regs *);
> >  static void byterev(unsigned char *, int);
> >  static void memex(void);
> > @@ -899,7 +900,7 @@ static void insert_bpts(void)
> >       for (i = 0; i < NBPTS; ++i, ++bp) {
> >               if ((bp->enabled & (BP_TRAP|BP_CIABR)) == 0)
> >                       continue;
> > -             if (mread(bp->address, &instr, 4) != 4) {
> > +             if (!mread_instr(bp->address, &instr)) {
>
>
> Are these checks made based on whether `ppc_inst_len()` returns bool from
> mread_instr() ?
No, it was meant to be the length itself returned with a length of 0
indicating an error. I will need to fix that.
>
> -- Bala
>
>
> >                       printf("Couldn't read instruction at %lx, "
> >                              "disabling breakpoint there\n", bp->address);
> >                       bp->enabled = 0;
> > @@ -949,7 +950,7 @@ static void remove_bpts(void)
> >       for (i = 0; i < NBPTS; ++i, ++bp) {
> >               if ((bp->enabled & (BP_TRAP|BP_CIABR)) != BP_TRAP)
> >                       continue;
> > -             if (mread(bp->address, &instr, 4) == 4
> > +             if (mread_instr(bp->address, &instr)
> >                   && ppc_inst_equal(instr, ppc_inst(bpinstr))
> >                   && patch_instruction(
> >                       (struct ppc_inst *)bp->address, ppc_inst_read(bp-
> > >instr)) != 0)
> > @@ -1165,7 +1166,7 @@ static int do_step(struct pt_regs *regs)
> >       force_enable_xmon();
> >       /* check we are in 64-bit kernel mode, translation enabled */
> >       if ((regs->msr & (MSR_64BIT|MSR_PR|MSR_IR)) == (MSR_64BIT|MSR_IR)) {
> > -             if (mread(regs->nip, &instr, 4) == 4) {
> > +             if (mread_instr(regs->nip, &instr)) {
> >                       stepped = emulate_step(regs, instr);
> >                       if (stepped < 0) {
> >                               printf("Couldn't single-step %s instruction\n",
> > @@ -1332,7 +1333,7 @@ static long check_bp_loc(unsigned long addr)
> >               printf("Breakpoints may only be placed at kernel addresses\n");
> >               return 0;
> >       }
> > -     if (!mread(addr, &instr, sizeof(instr))) {
> > +     if (!mread_instr(addr, &instr)) {
> >               printf("Can't read instruction at address %lx\n", addr);
> >               return 0;
> >       }
> > @@ -2125,6 +2126,21 @@ mwrite(unsigned long adrs, void *buf, int size)
> >       return n;
> >  }
> >
> > +static int
> > +mread_instr(unsigned long adrs, struct ppc_inst *instr)
> > +{
> > +     if (setjmp(bus_error_jmp) == 0) {
> > +             catch_memory_errors = 1;
> > +             sync();
> > +             *instr = ppc_inst_read((struct ppc_inst *)adrs);
> > +             sync();
> > +             /* wait a little while to see if we get a machine check */
> > +             __delay(200);
> > +     }
> > +     catch_memory_errors = 0;
> > +     return ppc_inst_len(*instr);
> > +}
> > +
> >  static int fault_type;
> >  static int fault_except;
> >  static char *fault_chars[] = { "--", "**", "##" };
>

^ permalink raw reply

* Re: [PATCH v5 12/21] powerpc: Introduce a function for reporting instruction length
From: Jordan Niethe @ 2020-04-08  2:14 UTC (permalink / raw)
  To: Balamuruhan S
  Cc: Alistair Popple, linuxppc-dev, Nicholas Piggin, Daniel Axtens
In-Reply-To: <0408a002ecdb4fa453f2632c8d6125152bfd76ed.camel@linux.ibm.com>

On Tue, Apr 7, 2020 at 9:15 PM Balamuruhan S <bala24@linux.ibm.com> wrote:
>
> On Mon, 2020-04-06 at 18:09 +1000, Jordan Niethe wrote:
> > Currently all instructions have the same length, but in preparation for
> > prefixed instructions introduce a function for returning instruction
> > length.
> >
> > Signed-off-by: Jordan Niethe <jniethe5@gmail.com>
> > ---
> >  arch/powerpc/include/asm/inst.h | 5 +++++
> >  arch/powerpc/kernel/kprobes.c   | 6 ++++--
> >  arch/powerpc/kernel/uprobes.c   | 2 +-
> >  3 files changed, 10 insertions(+), 3 deletions(-)
> >
> > diff --git a/arch/powerpc/include/asm/inst.h
> > b/arch/powerpc/include/asm/inst.h
> > index 369b35ce964c..70b37a35a91a 100644
> > --- a/arch/powerpc/include/asm/inst.h
> > +++ b/arch/powerpc/include/asm/inst.h
> > @@ -17,6 +17,11 @@ static inline u32 ppc_inst_val(struct ppc_inst x)
> >       return x.val;
> >  }
> >
> > +static inline bool ppc_inst_len(struct ppc_inst x)
>
>
> return type shouldn't be a bool, `size_t` instead.
Thank you.
>
> -- Bala
>
> > +{
> > +     return sizeof(struct ppc_inst);
> > +}
> > +
> >  static inline int ppc_inst_opcode(struct ppc_inst x)
> >  {
> >       return x.val >> 26;
> > diff --git a/arch/powerpc/kernel/kprobes.c b/arch/powerpc/kernel/kprobes.c
> > index ff53e5ef7e40..8d17cfdcdc54 100644
> > --- a/arch/powerpc/kernel/kprobes.c
> > +++ b/arch/powerpc/kernel/kprobes.c
> > @@ -474,14 +474,16 @@ NOKPROBE_SYMBOL(trampoline_probe_handler);
> >   */
> >  int kprobe_post_handler(struct pt_regs *regs)
> >  {
> > +     int len;
> >       struct kprobe *cur = kprobe_running();
> >       struct kprobe_ctlblk *kcb = get_kprobe_ctlblk();
> >
> >       if (!cur || user_mode(regs))
> >               return 0;
> >
> > +     len = ppc_inst_len(ppc_inst_read((struct ppc_inst *)cur->ainsn.insn));
> >       /* make sure we got here for instruction we have a kprobe on */
> > -     if (((unsigned long)cur->ainsn.insn + 4) != regs->nip)
> > +     if (((unsigned long)cur->ainsn.insn + len) != regs->nip)
> >               return 0;
> >
> >       if ((kcb->kprobe_status != KPROBE_REENTER) && cur->post_handler) {
> > @@ -490,7 +492,7 @@ int kprobe_post_handler(struct pt_regs *regs)
> >       }
> >
> >       /* Adjust nip to after the single-stepped instruction */
> > -     regs->nip = (unsigned long)cur->addr + 4;
> > +     regs->nip = (unsigned long)cur->addr + len;
> >       regs->msr |= kcb->kprobe_saved_msr;
> >
> >       /*Restore back the original saved kprobes variables and continue. */
> > diff --git a/arch/powerpc/kernel/uprobes.c b/arch/powerpc/kernel/uprobes.c
> > index 31c870287f2b..8e63afa012ba 100644
> > --- a/arch/powerpc/kernel/uprobes.c
> > +++ b/arch/powerpc/kernel/uprobes.c
> > @@ -112,7 +112,7 @@ int arch_uprobe_post_xol(struct arch_uprobe *auprobe,
> > struct pt_regs *regs)
> >        * support doesn't exist and have to fix-up the next instruction
> >        * to be executed.
> >        */
> > -     regs->nip = utask->vaddr + MAX_UINSN_BYTES;
> > +     regs->nip = utask->vaddr + ppc_inst_len(auprobe->insn);
> >
> >       user_disable_single_step(current);
> >       return 0;
>

^ permalink raw reply

* Re: [PATCH v5 11/21] powerpc: Define and use __get_user_instr{, inatomic}()
From: Jordan Niethe @ 2020-04-08  2:13 UTC (permalink / raw)
  To: Balamuruhan S
  Cc: Alistair Popple, linuxppc-dev, Nicholas Piggin, Daniel Axtens
In-Reply-To: <fa3e7acbe5b691060dc4f9635031733ffc36f92b.camel@linux.ibm.com>

On Tue, Apr 7, 2020 at 8:48 PM Balamuruhan S <bala24@linux.ibm.com> wrote:
>
> On Mon, 2020-04-06 at 18:09 +1000, Jordan Niethe wrote:
> > Define specific __get_user_instr() and __get_user_instr_inatomic()
> > macros for reading instructions from user space.
> >
> > Signed-off-by: Jordan Niethe <jniethe5@gmail.com>
> > ---
> >  arch/powerpc/include/asm/uaccess.h  | 5 +++++
> >  arch/powerpc/kernel/align.c         | 2 +-
> >  arch/powerpc/kernel/hw_breakpoint.c | 2 +-
> >  arch/powerpc/kernel/vecemu.c        | 2 +-
> >  4 files changed, 8 insertions(+), 3 deletions(-)
> >
> > diff --git a/arch/powerpc/include/asm/uaccess.h
> > b/arch/powerpc/include/asm/uaccess.h
> > index 2f500debae21..c0a35e4586a5 100644
> > --- a/arch/powerpc/include/asm/uaccess.h
> > +++ b/arch/powerpc/include/asm/uaccess.h
> > @@ -105,6 +105,11 @@ static inline int __access_ok(unsigned long addr,
> > unsigned long size,
> >  #define __put_user_inatomic(x, ptr) \
> >       __put_user_nosleep((__typeof__(*(ptr)))(x), (ptr), sizeof(*(ptr)))
> >
> > +#define __get_user_instr(x, ptr) \
> > +     __get_user_nocheck((x).val, (u32 *)(ptr), sizeof(u32), true)
> > +
> > +#define __get_user_instr_inatomic(x, ptr) \
> > +     __get_user_nosleep((x).val, (u32 *)(ptr), sizeof(u32))
>
>
> should we use ppc_inst_val() ?
The __get_user() macros load a value into the given variable, so we
can not use ppc_inst_val().
>
> -- Bala
>
>
> >  extern long __put_user_bad(void);
> >
> >  /*
> > diff --git a/arch/powerpc/kernel/align.c b/arch/powerpc/kernel/align.c
> > index 66a6d1de7799..65cdfd41e3a1 100644
> > --- a/arch/powerpc/kernel/align.c
> > +++ b/arch/powerpc/kernel/align.c
> > @@ -304,7 +304,7 @@ int fix_alignment(struct pt_regs *regs)
> >        */
> >       CHECK_FULL_REGS(regs);
> >
> > -     if (unlikely(__get_user(instr.val, (unsigned int __user *)regs->nip)))
> > +     if (unlikely(__get_user_instr(instr, (void __user *)regs->nip)))
> >               return -EFAULT;
> >       if ((regs->msr & MSR_LE) != (MSR_KERNEL & MSR_LE)) {
> >               /* We don't handle PPC little-endian any more... */
> > diff --git a/arch/powerpc/kernel/hw_breakpoint.c
> > b/arch/powerpc/kernel/hw_breakpoint.c
> > index 542f65ccf68b..cebab14e2788 100644
> > --- a/arch/powerpc/kernel/hw_breakpoint.c
> > +++ b/arch/powerpc/kernel/hw_breakpoint.c
> > @@ -249,7 +249,7 @@ static bool stepping_handler(struct pt_regs *regs, struct
> > perf_event *bp,
> >       struct instruction_op op;
> >       unsigned long addr = info->address;
> >
> > -     if (__get_user_inatomic(instr.val, (unsigned int *)regs->nip))
> > +     if (__get_user_instr_inatomic(instr, (void __user *)regs->nip))
> >               goto fail;
> >
> >       ret = analyse_instr(&op, regs, instr);
> > diff --git a/arch/powerpc/kernel/vecemu.c b/arch/powerpc/kernel/vecemu.c
> > index bbf536e10902..c82ede46d71b 100644
> > --- a/arch/powerpc/kernel/vecemu.c
> > +++ b/arch/powerpc/kernel/vecemu.c
> > @@ -266,7 +266,7 @@ int emulate_altivec(struct pt_regs *regs)
> >       unsigned int va, vb, vc, vd;
> >       vector128 *vrs;
> >
> > -     if (get_user(instr.val, (unsigned int __user *) regs->nip))
> > +     if (__get_user_instr(instr, (void __user *) regs->nip))
> >               return -EFAULT;
> >
> >       word = ppc_inst_val(instr);
>

^ permalink raw reply

* Re: [PATCH] cxl: Rework error message for incompatible slots
From: Andrew Donnellan @ 2020-04-08  2:13 UTC (permalink / raw)
  To: Frederic Barrat, linuxppc-dev, christophe_lombard; +Cc: stable
In-Reply-To: <20200407115601.25453-1-fbarrat@linux.ibm.com>

On 7/4/20 9:56 pm, Frederic Barrat wrote:
> Improve the error message shown if a capi adapter is plugged on a
> capi-incompatible slot directly under the PHB (no intermediate switch).
> 
> Fixes: 5632874311db ("cxl: Add support for POWER9 DD2")
> Cc: stable@vger.kernel.org # 4.14+
> Signed-off-by: Frederic Barrat <fbarrat@linux.ibm.com>

Seems fine to me, not sure if it needs to go to stable but I suppose 
this could be causing actual confusion out in the field?

Reviewed-by: Andrew Donnellan <ajd@linux.ibm.com>


-- 
Andrew Donnellan              OzLabs, ADL Canberra
ajd@linux.ibm.com             IBM Australia Limited


^ permalink raw reply

* Re: [PATCH v5 09/21] powerpc: Use a datatype for instructions
From: Jordan Niethe @ 2020-04-08  2:11 UTC (permalink / raw)
  To: Balamuruhan S
  Cc: Alistair Popple, linuxppc-dev, Nicholas Piggin, Daniel Axtens
In-Reply-To: <5755f9dcbd875f8f2da79f7c08d3ed3c5e9ed37c.camel@linux.ibm.com>

On Tue, Apr 7, 2020 at 8:30 PM Balamuruhan S <bala24@linux.ibm.com> wrote:
>
> On Mon, 2020-04-06 at 18:09 +1000, Jordan Niethe wrote:
> > Currently unsigned ints are used to represent instructions on powerpc.
> > This has worked well as instructions have always been 4 byte words.
> > However, a future ISA version will introduce some changes to
> > instructions that mean this scheme will no longer work as well. This
> > change is Prefixed Instructions. A prefixed instruction is made up of a
> > word prefix followed by a word suffix to make an 8 byte double word
> > instruction. No matter the endianess of the system the prefix always
> > comes first. Prefixed instructions are only planned for powerpc64.
> >
> > Introduce a ppc_inst type to represent both prefixed and word
> > instructions on powerpc64 while keeping it possible to exclusively have
> > word instructions on powerpc32, A latter patch will expand the type to
> > include prefixed instructions but for now just typedef it to a u32.
> >
> > Later patches will introduce helper functions and macros for
> > manipulating the instructions so that powerpc64 and powerpc32 might
> > maintain separate type definitions.
> >
> > Signed-off-by: Jordan Niethe <jniethe5@gmail.com>
> > ---
> > v4: New to series
> > v5: Add to epapr_paravirt.c, kgdb.c
> > ---
> >  arch/powerpc/include/asm/code-patching.h | 32 ++++-----
> >  arch/powerpc/include/asm/inst.h          | 20 +++---
> >  arch/powerpc/include/asm/sstep.h         |  5 +-
> >  arch/powerpc/include/asm/uprobes.h       |  5 +-
> >  arch/powerpc/kernel/align.c              |  4 +-
> >  arch/powerpc/kernel/epapr_paravirt.c     |  4 +-
> >  arch/powerpc/kernel/hw_breakpoint.c      |  4 +-
> >  arch/powerpc/kernel/jump_label.c         |  2 +-
> >  arch/powerpc/kernel/kgdb.c               |  4 +-
> >  arch/powerpc/kernel/kprobes.c            |  8 +--
> >  arch/powerpc/kernel/mce_power.c          |  5 +-
> >  arch/powerpc/kernel/optprobes.c          | 40 ++++++------
> >  arch/powerpc/kernel/setup_32.c           |  2 +-
> >  arch/powerpc/kernel/trace/ftrace.c       | 83 ++++++++++++------------
> >  arch/powerpc/kernel/vecemu.c             |  5 +-
> >  arch/powerpc/lib/code-patching.c         | 69 ++++++++++----------
> >  arch/powerpc/lib/feature-fixups.c        | 48 +++++++-------
> >  arch/powerpc/lib/sstep.c                 |  4 +-
> >  arch/powerpc/lib/test_emulate_step.c     |  9 +--
> >  arch/powerpc/perf/core-book3s.c          |  4 +-
> >  arch/powerpc/xmon/xmon.c                 | 24 +++----
> >  21 files changed, 196 insertions(+), 185 deletions(-)
> >
> > diff --git a/arch/powerpc/include/asm/code-patching.h
> > b/arch/powerpc/include/asm/code-patching.h
> > index 48e021957ee5..eacc9102c251 100644
> > --- a/arch/powerpc/include/asm/code-patching.h
> > +++ b/arch/powerpc/include/asm/code-patching.h
> > @@ -23,33 +23,33 @@
> >  #define BRANCH_ABSOLUTE      0x2
> >
> >  bool is_offset_in_branch_range(long offset);
> > -int create_branch(unsigned int *instr, const unsigned int *addr,
> > +int create_branch(struct ppc_inst *instr, const struct ppc_inst *addr,
> >                 unsigned long target, int flags);
> > -int create_cond_branch(unsigned int *instr, const unsigned int *addr,
> > +int create_cond_branch(struct ppc_inst *instr, const struct ppc_inst *addr,
> >                      unsigned long target, int flags);
> > -int patch_branch(unsigned int *addr, unsigned long target, int flags);
> > -int patch_instruction(unsigned int *addr, unsigned int instr);
> > -int raw_patch_instruction(unsigned int *addr, unsigned int instr);
> > +int patch_branch(struct ppc_inst *addr, unsigned long target, int flags);
> > +int patch_instruction(struct ppc_inst *addr, struct ppc_inst instr);
> > +int raw_patch_instruction(struct ppc_inst *addr, struct ppc_inst instr);
> >
> >  static inline unsigned long patch_site_addr(s32 *site)
> >  {
> >       return (unsigned long)site + *site;
> >  }
> >
> > -static inline int patch_instruction_site(s32 *site, unsigned int instr)
> > +static inline int patch_instruction_site(s32 *site, struct ppc_inst instr)
> >  {
> > -     return patch_instruction((unsigned int *)patch_site_addr(site), instr);
> > +     return patch_instruction((struct ppc_inst *)patch_site_addr(site),
> > instr);
> >  }
> >
> >  static inline int patch_branch_site(s32 *site, unsigned long target, int
> > flags)
> >  {
> > -     return patch_branch((unsigned int *)patch_site_addr(site), target,
> > flags);
> > +     return patch_branch((struct ppc_inst *)patch_site_addr(site), target,
> > flags);
> >  }
> >
> >  static inline int modify_instruction(unsigned int *addr, unsigned int clr,
> >                                    unsigned int set)
> >  {
> > -     return patch_instruction(addr, ppc_inst((*addr & ~clr) | set));
> > +     return patch_instruction((struct ppc_inst *)addr, ppc_inst((*addr &
> > ~clr) | set));
> >  }
> >
> >  static inline int modify_instruction_site(s32 *site, unsigned int clr,
> > unsigned int set)
> > @@ -57,13 +57,13 @@ static inline int modify_instruction_site(s32 *site,
> > unsigned int clr, unsigned
> >       return modify_instruction((unsigned int *)patch_site_addr(site), clr,
> > set);
> >  }
> >
> > -int instr_is_relative_branch(unsigned int instr);
> > -int instr_is_relative_link_branch(unsigned int instr);
> > -int instr_is_branch_to_addr(const unsigned int *instr, unsigned long addr);
> > -unsigned long branch_target(const unsigned int *instr);
> > -int translate_branch(unsigned int *instr, const unsigned int *dest,
> > -                  const unsigned int *src);
> > -extern bool is_conditional_branch(unsigned int instr);
> > +int instr_is_relative_branch(struct ppc_inst instr);
> > +int instr_is_relative_link_branch(struct ppc_inst instr);
> > +int instr_is_branch_to_addr(const struct ppc_inst *instr, unsigned long
> > addr);
> > +unsigned long branch_target(const struct ppc_inst *instr);
> > +int translate_branch(struct ppc_inst *instr, const struct ppc_inst *dest,
> > +                  const struct ppc_inst *src);
> > +extern bool is_conditional_branch(struct ppc_inst instr);
> >  #ifdef CONFIG_PPC_BOOK3E_64
> >  void __patch_exception(int exc, unsigned long addr);
> >  #define patch_exception(exc, name) do { \
> > diff --git a/arch/powerpc/include/asm/inst.h
> > b/arch/powerpc/include/asm/inst.h
> > index 54ee46b0a7c9..a71decf5f871 100644
> > --- a/arch/powerpc/include/asm/inst.h
> > +++ b/arch/powerpc/include/asm/inst.h
> > @@ -6,26 +6,30 @@
> >   * Instruction data type for POWER
> >   */
> >
> > -#define ppc_inst(x) (x)
> > +struct ppc_inst {
> > +        u32 val;
> > +} __packed;
> >
> > -static inline u32 ppc_inst_val(u32 x)
> > +#define ppc_inst(x) ((struct ppc_inst){ .val = x })
> > +
> > +static inline u32 ppc_inst_val(struct ppc_inst x)
> >  {
> > -     return x;
> > +     return x.val;
> >  }
> >
> > -static inline int ppc_inst_opcode(u32 x)
> > +static inline int ppc_inst_opcode(struct ppc_inst x)
> >  {
> > -     return x >> 26;
> > +     return x.val >> 26;
> >  }
> >
> > -static inline u32 ppc_inst_swab(u32 x)
> > +static inline struct ppc_inst ppc_inst_swab(struct ppc_inst x)
> >  {
> >       return ppc_inst(swab32(ppc_inst_val(x)));
> >  }
> >
> > -static inline bool ppc_inst_equal(u32 x, u32 y)
> > +static inline bool ppc_inst_equal(struct ppc_inst x, struct ppc_inst y)
> >  {
> > -     return x == y;
> > +     return !memcmp(&x, &y, sizeof(struct ppc_inst));
> >  }
> >
> >  #endif /* _ASM_INST_H */
> > diff --git a/arch/powerpc/include/asm/sstep.h
> > b/arch/powerpc/include/asm/sstep.h
> > index 26d729562fe2..c3ce903ac488 100644
> > --- a/arch/powerpc/include/asm/sstep.h
> > +++ b/arch/powerpc/include/asm/sstep.h
> > @@ -2,6 +2,7 @@
> >  /*
> >   * Copyright (C) 2004 Paul Mackerras <paulus@au.ibm.com>, IBM
> >   */
> > +#include <asm/inst.h>
> >
> >  struct pt_regs;
> >
> > @@ -132,7 +133,7 @@ union vsx_reg {
> >   * otherwise.
> >   */
> >  extern int analyse_instr(struct instruction_op *op, const struct pt_regs
> > *regs,
> > -                      unsigned int instr);
> > +                      struct ppc_inst instr);
> >
> >  /*
> >   * Emulate an instruction that can be executed just by updating
> > @@ -149,7 +150,7 @@ void emulate_update_regs(struct pt_regs *reg, struct
> > instruction_op *op);
> >   * 0 if it could not be emulated, or -1 for an instruction that
> >   * should not be emulated (rfid, mtmsrd clearing MSR_RI, etc.).
> >   */
> > -extern int emulate_step(struct pt_regs *regs, unsigned int instr);
> > +extern int emulate_step(struct pt_regs *regs, struct ppc_inst instr);
> >
> >  /*
> >   * Emulate a load or store instruction by reading/writing the
> > diff --git a/arch/powerpc/include/asm/uprobes.h
> > b/arch/powerpc/include/asm/uprobes.h
> > index 2bbdf27d09b5..7e3b329ba2d3 100644
> > --- a/arch/powerpc/include/asm/uprobes.h
> > +++ b/arch/powerpc/include/asm/uprobes.h
> > @@ -11,6 +11,7 @@
> >
> >  #include <linux/notifier.h>
> >  #include <asm/probes.h>
> > +#include <asm/inst.h>
> >
> >  typedef ppc_opcode_t uprobe_opcode_t;
> >
> > @@ -23,8 +24,8 @@ typedef ppc_opcode_t uprobe_opcode_t;
> >
> >  struct arch_uprobe {
> >       union {
> > -             u32     insn;
> > -             u32     ixol;
> > +             struct ppc_inst insn;
> > +             struct ppc_inst ixol;
> >       };
> >  };
> >
> > diff --git a/arch/powerpc/kernel/align.c b/arch/powerpc/kernel/align.c
> > index 46870cf6a6dc..66a6d1de7799 100644
> > --- a/arch/powerpc/kernel/align.c
> > +++ b/arch/powerpc/kernel/align.c
> > @@ -294,7 +294,7 @@ static int emulate_spe(struct pt_regs *regs, unsigned int
> > reg,
> >
> >  int fix_alignment(struct pt_regs *regs)
> >  {
> > -     unsigned int instr;
> > +     struct ppc_inst instr;
> >       struct instruction_op op;
> >       int r, type;
> >
> > @@ -304,7 +304,7 @@ int fix_alignment(struct pt_regs *regs)
> >        */
> >       CHECK_FULL_REGS(regs);
> >
> > -     if (unlikely(__get_user(instr, (unsigned int __user *)regs->nip)))
> > +     if (unlikely(__get_user(instr.val, (unsigned int __user *)regs->nip)))
>
>
> don't we have to use the helper `ppc_inst_val()` here to retrieve instr.val ?
__get_user() is loading into instr.val, so using ppc_inst_val() would not work.
>
> I see couple of other places we directly retrieve as instr.val.
> if we need to change it, then all of them should go to patch 6,
Those other places also are for the __get_user() macros I think.
> [PATCH v5 06/21] powerpc: Use an accessor for instructions
>
>
> >               return -EFAULT;
> >       if ((regs->msr & MSR_LE) != (MSR_KERNEL & MSR_LE)) {
> >               /* We don't handle PPC little-endian any more... */
> > diff --git a/arch/powerpc/kernel/epapr_paravirt.c
> > b/arch/powerpc/kernel/epapr_paravirt.c
> > index c53e863fb484..c42aa3926632 100644
> > --- a/arch/powerpc/kernel/epapr_paravirt.c
> > +++ b/arch/powerpc/kernel/epapr_paravirt.c
> > @@ -38,9 +38,9 @@ static int __init early_init_dt_scan_epapr(unsigned long
> > node,
> >
> >       for (i = 0; i < (len / 4); i++) {
> >               u32 inst = be32_to_cpu(insts[i]);
> > -             patch_instruction(epapr_hypercall_start + i, ppc_inst(inst));
> > +             patch_instruction((struct ppc_inst *)(epapr_hypercall_start +
> > i), ppc_inst(inst));
> >  #if !defined(CONFIG_64BIT) || defined(CONFIG_PPC_BOOK3E_64)
> > -             patch_instruction(epapr_ev_idle_start + i, ppc_inst(inst));
> > +             patch_instruction((struct ppc_inst *)(epapr_ev_idle_start + i),
> > ppc_inst(inst));
> >  #endif
> >       }
> >
> > diff --git a/arch/powerpc/kernel/hw_breakpoint.c
> > b/arch/powerpc/kernel/hw_breakpoint.c
> > index 79f51f182a83..542f65ccf68b 100644
> > --- a/arch/powerpc/kernel/hw_breakpoint.c
> > +++ b/arch/powerpc/kernel/hw_breakpoint.c
> > @@ -244,12 +244,12 @@ dar_range_overlaps(unsigned long dar, int size, struct
> > arch_hw_breakpoint *info)
> >  static bool stepping_handler(struct pt_regs *regs, struct perf_event *bp,
> >                            struct arch_hw_breakpoint *info)
> >  {
> > -     unsigned int instr = ppc_inst(0);
> > +     struct ppc_inst instr = ppc_inst(0);
> >       int ret, type, size;
> >       struct instruction_op op;
> >       unsigned long addr = info->address;
> >
> > -     if (__get_user_inatomic(instr, (unsigned int *)regs->nip))
> > +     if (__get_user_inatomic(instr.val, (unsigned int *)regs->nip))
>
>
> [...] reference to above
>
>
> >               goto fail;
> >
> >       ret = analyse_instr(&op, regs, instr);
> > diff --git a/arch/powerpc/kernel/jump_label.c
> > b/arch/powerpc/kernel/jump_label.c
> > index daa4afce7ec8..144858027fa3 100644
> > --- a/arch/powerpc/kernel/jump_label.c
> > +++ b/arch/powerpc/kernel/jump_label.c
> > @@ -11,7 +11,7 @@
> >  void arch_jump_label_transform(struct jump_entry *entry,
> >                              enum jump_label_type type)
> >  {
> > -     u32 *addr = (u32 *)(unsigned long)entry->code;
> > +     struct ppc_inst *addr = (struct ppc_inst *)(unsigned long)entry->code;
> >
> >       if (type == JUMP_LABEL_JMP)
> >               patch_branch(addr, entry->target, 0);
> > diff --git a/arch/powerpc/kernel/kgdb.c b/arch/powerpc/kernel/kgdb.c
> > index a6b38a19133f..652b2852bea3 100644
> > --- a/arch/powerpc/kernel/kgdb.c
> > +++ b/arch/powerpc/kernel/kgdb.c
> > @@ -419,7 +419,7 @@ int kgdb_arch_set_breakpoint(struct kgdb_bkpt *bpt)
> >  {
> >       int err;
> >       unsigned int instr;
> > -     unsigned int *addr = (unsigned int *)bpt->bpt_addr;
> > +     struct ppc_inst *addr = (struct ppc_inst *)bpt->bpt_addr;
> >
> >       err = probe_kernel_address(addr, instr);
> >       if (err)
> > @@ -438,7 +438,7 @@ int kgdb_arch_remove_breakpoint(struct kgdb_bkpt *bpt)
> >  {
> >       int err;
> >       unsigned int instr = *(unsigned int *)bpt->saved_instr;
> > -     unsigned int *addr = (unsigned int *)bpt->bpt_addr;
> > +     struct ppc_inst *addr = (struct ppc_inst *)bpt->bpt_addr;
> >
> >       err = patch_instruction(addr, ppc_inst(instr));
> >       if (err)
> > diff --git a/arch/powerpc/kernel/kprobes.c b/arch/powerpc/kernel/kprobes.c
> > index 8420b1944164..9ed996cb0589 100644
> > --- a/arch/powerpc/kernel/kprobes.c
> > +++ b/arch/powerpc/kernel/kprobes.c
> > @@ -106,7 +106,7 @@ kprobe_opcode_t *kprobe_lookup_name(const char *name,
> > unsigned int offset)
> >  int arch_prepare_kprobe(struct kprobe *p)
> >  {
> >       int ret = 0;
> > -     kprobe_opcode_t insn = *p->addr;
> > +     struct ppc_inst insn = *(struct ppc_inst *)p->addr;
> >
> >       if ((unsigned long)p->addr & 0x03) {
> >               printk("Attempt to register kprobe at an unaligned address\n");
> > @@ -139,13 +139,13 @@ NOKPROBE_SYMBOL(arch_prepare_kprobe);
> >
> >  void arch_arm_kprobe(struct kprobe *p)
> >  {
> > -     patch_instruction(p->addr, ppc_inst(BREAKPOINT_INSTRUCTION));
> > +     patch_instruction((struct ppc_inst *)p->addr,
> > ppc_inst(BREAKPOINT_INSTRUCTION));
> >  }
> >  NOKPROBE_SYMBOL(arch_arm_kprobe);
> >
> >  void arch_disarm_kprobe(struct kprobe *p)
> >  {
> > -     patch_instruction(p->addr, ppc_inst(p->opcode));
> > +     patch_instruction((struct ppc_inst *)p->addr, ppc_inst(p->opcode));
> >  }
> >  NOKPROBE_SYMBOL(arch_disarm_kprobe);
> >
> > @@ -217,7 +217,7 @@ NOKPROBE_SYMBOL(arch_prepare_kretprobe);
> >  static int try_to_emulate(struct kprobe *p, struct pt_regs *regs)
> >  {
> >       int ret;
> > -     unsigned int insn = *p->ainsn.insn;
> > +     struct ppc_inst insn = *(struct ppc_inst *)p->ainsn.insn;
> >
> >       /* regs->nip is also adjusted if emulate_step returns 1 */
> >       ret = emulate_step(regs, insn);
> > diff --git a/arch/powerpc/kernel/mce_power.c
> > b/arch/powerpc/kernel/mce_power.c
> > index 1cbf7f1a4e3d..7118b46a6543 100644
> > --- a/arch/powerpc/kernel/mce_power.c
> > +++ b/arch/powerpc/kernel/mce_power.c
> > @@ -20,6 +20,7 @@
> >  #include <asm/sstep.h>
> >  #include <asm/exception-64s.h>
> >  #include <asm/extable.h>
> > +#include <asm/inst.h>
> >
> >  /*
> >   * Convert an address related to an mm to a PFN. NOTE: we are in real
> > @@ -365,7 +366,7 @@ static int mce_find_instr_ea_and_phys(struct pt_regs
> > *regs, uint64_t *addr,
> >        * in real-mode is tricky and can lead to recursive
> >        * faults
> >        */
> > -     int instr;
> > +     struct ppc_inst instr;
> >       unsigned long pfn, instr_addr;
> >       struct instruction_op op;
> >       struct pt_regs tmp = *regs;
> > @@ -373,7 +374,7 @@ static int mce_find_instr_ea_and_phys(struct pt_regs
> > *regs, uint64_t *addr,
> >       pfn = addr_to_pfn(regs, regs->nip);
> >       if (pfn != ULONG_MAX) {
> >               instr_addr = (pfn << PAGE_SHIFT) + (regs->nip & ~PAGE_MASK);
> > -             instr = *(unsigned int *)(instr_addr);
> > +             instr = *(struct ppc_inst *)(instr_addr);
> >               if (!analyse_instr(&op, &tmp, instr)) {
> >                       pfn = addr_to_pfn(regs, op.ea);
> >                       *addr = op.ea;
> > diff --git a/arch/powerpc/kernel/optprobes.c
> > b/arch/powerpc/kernel/optprobes.c
> > index 3b33ebf18859..b61bbcee84f4 100644
> > --- a/arch/powerpc/kernel/optprobes.c
> > +++ b/arch/powerpc/kernel/optprobes.c
> > @@ -100,8 +100,8 @@ static unsigned long can_optimize(struct kprobe *p)
> >        * Ensure that the instruction is not a conditional branch,
> >        * and that can be emulated.
> >        */
> > -     if (!is_conditional_branch(*p->ainsn.insn) &&
> > -                     analyse_instr(&op, &regs, *p->ainsn.insn) == 1) {
> > +     if (!is_conditional_branch(*(struct ppc_inst *)p->ainsn.insn) &&
> > +                     analyse_instr(&op, &regs, *(struct ppc_inst *)p-
> > >ainsn.insn) == 1) {
> >               emulate_update_regs(&regs, &op);
> >               nip = regs.nip;
> >       }
> > @@ -148,12 +148,12 @@ void arch_remove_optimized_kprobe(struct
> > optimized_kprobe *op)
> >  void patch_imm32_load_insns(unsigned int val, kprobe_opcode_t *addr)
> >  {
> >       /* addis r4,0,(insn)@h */
> > -     patch_instruction(addr, ppc_inst(PPC_INST_ADDIS | ___PPC_RT(4) |
> > +     patch_instruction((struct ppc_inst *)addr, ppc_inst(PPC_INST_ADDIS |
> > ___PPC_RT(4) |
> >                         ((val >> 16) & 0xffff)));
> >       addr++;
> >
> >       /* ori r4,r4,(insn)@l */
> > -     patch_instruction(addr, ppc_inst(PPC_INST_ORI | ___PPC_RA(4) |
> > +     patch_instruction((struct ppc_inst *)addr, ppc_inst(PPC_INST_ORI |
> > ___PPC_RA(4) |
> >                         ___PPC_RS(4) | (val & 0xffff)));
> >  }
> >
> > @@ -164,34 +164,34 @@ void patch_imm32_load_insns(unsigned int val,
> > kprobe_opcode_t *addr)
> >  void patch_imm64_load_insns(unsigned long val, kprobe_opcode_t *addr)
> >  {
> >       /* lis r3,(op)@highest */
> > -     patch_instruction(addr, ppc_inst(PPC_INST_ADDIS | ___PPC_RT(3) |
> > +     patch_instruction((struct ppc_inst *)addr, ppc_inst(PPC_INST_ADDIS |
> > ___PPC_RT(3) |
> >                         ((val >> 48) & 0xffff)));
> >       addr++;
> >
> >       /* ori r3,r3,(op)@higher */
> > -     patch_instruction(addr, ppc_inst(PPC_INST_ORI | ___PPC_RA(3) |
> > +     patch_instruction((struct ppc_inst *)addr, ppc_inst(PPC_INST_ORI |
> > ___PPC_RA(3) |
> >                         ___PPC_RS(3) | ((val >> 32) & 0xffff)));
> >       addr++;
> >
> >       /* rldicr r3,r3,32,31 */
> > -     patch_instruction(addr, ppc_inst(PPC_INST_RLDICR | ___PPC_RA(3) |
> > +     patch_instruction((struct ppc_inst *)addr, ppc_inst(PPC_INST_RLDICR |
> > ___PPC_RA(3) |
> >                         ___PPC_RS(3) | __PPC_SH64(32) | __PPC_ME64(31)));
> >       addr++;
> >
> >       /* oris r3,r3,(op)@h */
> > -     patch_instruction(addr, ppc_inst(PPC_INST_ORIS | ___PPC_RA(3) |
> > +     patch_instruction((struct ppc_inst *)addr, ppc_inst(PPC_INST_ORIS |
> > ___PPC_RA(3) |
> >                         ___PPC_RS(3) | ((val >> 16) & 0xffff)));
> >       addr++;
> >
> >       /* ori r3,r3,(op)@l */
> > -     patch_instruction(addr, ppc_inst(PPC_INST_ORI | ___PPC_RA(3) |
> > +     patch_instruction((struct ppc_inst *)addr, ppc_inst(PPC_INST_ORI |
> > ___PPC_RA(3) |
> >                         ___PPC_RS(3) | (val & 0xffff)));
> >  }
> >
> >  int arch_prepare_optimized_kprobe(struct optimized_kprobe *op, struct kprobe
> > *p)
> >  {
> > -     kprobe_opcode_t *buff, branch_op_callback, branch_emulate_step;
> > -     kprobe_opcode_t *op_callback_addr, *emulate_step_addr;
> > +     struct ppc_inst branch_op_callback, branch_emulate_step;
> > +     kprobe_opcode_t *op_callback_addr, *emulate_step_addr, *buff;
> >       long b_offset;
> >       unsigned long nip, size;
> >       int rc, i;
> > @@ -231,7 +231,7 @@ int arch_prepare_optimized_kprobe(struct optimized_kprobe
> > *op, struct kprobe *p)
> >       size = (TMPL_END_IDX * sizeof(kprobe_opcode_t)) / sizeof(int);
> >       pr_devel("Copying template to %p, size %lu\n", buff, size);
> >       for (i = 0; i < size; i++) {
> > -             rc = patch_instruction(buff + i,
> > ppc_inst(*(optprobe_template_entry + i)));
> > +             rc = patch_instruction((struct ppc_inst *)(buff + i),
> > ppc_inst(*(optprobe_template_entry + i)));
> >               if (rc < 0)
> >                       goto error;
> >       }
> > @@ -253,20 +253,20 @@ int arch_prepare_optimized_kprobe(struct
> > optimized_kprobe *op, struct kprobe *p)
> >       }
> >
> >       rc = create_branch(&branch_op_callback,
> > -                        (unsigned int *)buff + TMPL_CALL_HDLR_IDX,
> > +                        (struct ppc_inst *)(buff + TMPL_CALL_HDLR_IDX),
> >                          (unsigned long)op_callback_addr,
> >                          BRANCH_SET_LINK);
> >
> >       rc |= create_branch(&branch_emulate_step,
> > -                         (unsigned int *)buff + TMPL_EMULATE_IDX,
> > +                         (struct ppc_inst *)(buff + TMPL_EMULATE_IDX),
> >                           (unsigned long)emulate_step_addr,
> >                           BRANCH_SET_LINK);
> >
> >       if (rc)
> >               goto error;
> >
> > -     patch_instruction(buff + TMPL_CALL_HDLR_IDX, branch_op_callback);
> > -     patch_instruction(buff + TMPL_EMULATE_IDX, branch_emulate_step);
> > +     patch_instruction((struct ppc_inst *)(buff + TMPL_CALL_HDLR_IDX),
> > branch_op_callback);
> > +     patch_instruction((struct ppc_inst *)(buff + TMPL_EMULATE_IDX),
> > branch_emulate_step);
> >
> >       /*
> >        * 3. load instruction to be emulated into relevant register, and
> > @@ -276,7 +276,7 @@ int arch_prepare_optimized_kprobe(struct optimized_kprobe
> > *op, struct kprobe *p)
> >       /*
> >        * 4. branch back from trampoline
> >        */
> > -     patch_branch(buff + TMPL_RET_IDX, (unsigned long)nip, 0);
> > +     patch_branch((void *)(buff + TMPL_RET_IDX), (unsigned long)nip, 0);
>
>
> why do we cast it differently here ?
That is a mistake.
>
>
> >
> >       flush_icache_range((unsigned long)buff,
> >                          (unsigned long)(&buff[TMPL_END_IDX]));
> > @@ -308,7 +308,7 @@ int arch_check_optimized_kprobe(struct optimized_kprobe
> > *op)
> >
> >  void arch_optimize_kprobes(struct list_head *oplist)
> >  {
> > -     unsigned int instr;
> > +     struct ppc_inst instr;
> >       struct optimized_kprobe *op;
> >       struct optimized_kprobe *tmp;
> >
> > @@ -320,9 +320,9 @@ void arch_optimize_kprobes(struct list_head *oplist)
> >               memcpy(op->optinsn.copied_insn, op->kp.addr,
> >                                              RELATIVEJUMP_SIZE);
> >               create_branch(&instr,
> > -                           (unsigned int *)op->kp.addr,
> > +                           (struct ppc_inst *)op->kp.addr,
> >                             (unsigned long)op->optinsn.insn, 0);
> > -             patch_instruction(op->kp.addr, instr);
> > +             patch_instruction((struct ppc_inst *)op->kp.addr, instr);
> >               list_del_init(&op->list);
> >       }
> >  }
> > diff --git a/arch/powerpc/kernel/setup_32.c b/arch/powerpc/kernel/setup_32.c
> > index c1bdd462c5c0..989809e58234 100644
> > --- a/arch/powerpc/kernel/setup_32.c
> > +++ b/arch/powerpc/kernel/setup_32.c
> > @@ -76,7 +76,7 @@ EXPORT_SYMBOL(DMA_MODE_WRITE);
> >  notrace void __init machine_init(u64 dt_ptr)
> >  {
> >       unsigned int *addr = (unsigned int
> > *)patch_site_addr(&patch__memset_nocache);
> > -     unsigned long insn;
> > +     struct ppc_inst insn;
> >
> >       /* Configure static keys first, now that we're relocated. */
> >       setup_feature_keys();
> > diff --git a/arch/powerpc/kernel/trace/ftrace.c
> > b/arch/powerpc/kernel/trace/ftrace.c
> > index 784b5746cc55..442c62fb68ff 100644
> > --- a/arch/powerpc/kernel/trace/ftrace.c
> > +++ b/arch/powerpc/kernel/trace/ftrace.c
> > @@ -41,23 +41,23 @@
> >  #define      NUM_FTRACE_TRAMPS       8
> >  static unsigned long ftrace_tramps[NUM_FTRACE_TRAMPS];
> >
> > -static unsigned int
> > +static struct ppc_inst
> >  ftrace_call_replace(unsigned long ip, unsigned long addr, int link)
> >  {
> > -     unsigned int op;
> > +     struct ppc_inst op;
> >
> >       addr = ppc_function_entry((void *)addr);
> >
> >       /* if (link) set op to 'bl' else 'b' */
> > -     create_branch(&op, (unsigned int *)ip, addr, link ? 1 : 0);
> > +     create_branch(&op, (struct ppc_inst *)ip, addr, link ? 1 : 0);
> >
> >       return op;
> >  }
> >
> >  static int
> > -ftrace_modify_code(unsigned long ip, unsigned int old, unsigned int new)
> > +ftrace_modify_code(unsigned long ip, struct ppc_inst old, struct ppc_inst
> > new)
> >  {
> > -     unsigned int replaced;
> > +     struct ppc_inst replaced;
> >
> >       /*
> >        * Note:
> > @@ -79,7 +79,7 @@ ftrace_modify_code(unsigned long ip, unsigned int old,
> > unsigned int new)
> >       }
> >
> >       /* replace the text with the new text */
> > -     if (patch_instruction((unsigned int *)ip, new))
> > +     if (patch_instruction((struct ppc_inst *)ip, new))
> >               return -EPERM;
> >
> >       return 0;
> > @@ -90,24 +90,24 @@ ftrace_modify_code(unsigned long ip, unsigned int old,
> > unsigned int new)
> >   */
> >  static int test_24bit_addr(unsigned long ip, unsigned long addr)
> >  {
> > -     unsigned int op;
> > +     struct ppc_inst op;
> >       addr = ppc_function_entry((void *)addr);
> >
> >       /* use the create_branch to verify that this offset can be branched */
> > -     return create_branch(&op, (unsigned int *)ip, addr, 0) == 0;
> > +     return create_branch(&op, (struct ppc_inst *)ip, addr, 0) == 0;
> >  }
> >
> > -static int is_bl_op(unsigned int op)
> > +static int is_bl_op(struct ppc_inst op)
> >  {
> >       return (ppc_inst_val(op) & 0xfc000003) == 0x48000001;
> >  }
> >
> > -static int is_b_op(unsigned int op)
> > +static int is_b_op(struct ppc_inst op)
> >  {
> >       return (ppc_inst_val(op) & 0xfc000003) == 0x48000000;
> >  }
> >
> > -static unsigned long find_bl_target(unsigned long ip, unsigned int op)
> > +static unsigned long find_bl_target(unsigned long ip, struct ppc_inst op)
> >  {
> >       int offset;
> >
> > @@ -127,7 +127,7 @@ __ftrace_make_nop(struct module *mod,
> >  {
> >       unsigned long entry, ptr, tramp;
> >       unsigned long ip = rec->ip;
> > -     unsigned int op, pop;
> > +     struct ppc_inst op, pop;
> >
> >       /* read where this goes */
> >       if (probe_kernel_read(&op, (void *)ip, sizeof(int))) {
> > @@ -207,7 +207,7 @@ __ftrace_make_nop(struct module *mod,
> >       }
> >  #endif /* CONFIG_MPROFILE_KERNEL */
> >
> > -     if (patch_instruction((unsigned int *)ip, pop)) {
> > +     if (patch_instruction((struct ppc_inst *)ip, pop)) {
> >               pr_err("Patching NOP failed.\n");
> >               return -EPERM;
> >       }
> > @@ -220,7 +220,7 @@ static int
> >  __ftrace_make_nop(struct module *mod,
> >                 struct dyn_ftrace *rec, unsigned long addr)
> >  {
> > -     unsigned int op;
> > +     struct ppc_inst op;
> >       unsigned int jmp[4];
> >       unsigned long ip = rec->ip;
> >       unsigned long tramp;
> > @@ -279,7 +279,7 @@ __ftrace_make_nop(struct module *mod,
> >
> >       op = ppc_inst(PPC_INST_NOP);
> >
> > -     if (patch_instruction((unsigned int *)ip, op))
> > +     if (patch_instruction((struct ppc_inst *)ip, op))
> >               return -EPERM;
> >
> >       return 0;
> > @@ -290,7 +290,7 @@ __ftrace_make_nop(struct module *mod,
> >  static unsigned long find_ftrace_tramp(unsigned long ip)
> >  {
> >       int i;
> > -     unsigned int instr;
> > +     struct ppc_inst instr;
> >
> >       /*
> >        * We have the compiler generated long_branch tramps at the end
> > @@ -327,9 +327,10 @@ static int add_ftrace_tramp(unsigned long tramp)
> >   */
> >  static int setup_mcount_compiler_tramp(unsigned long tramp)
> >  {
> > -     int i, op;
> > +     int i;
> > +     struct ppc_inst op;
> >       unsigned long ptr;
> > -     unsigned int instr;
> > +     struct ppc_inst instr;
> >       static unsigned long ftrace_plt_tramps[NUM_FTRACE_TRAMPS];
> >
> >       /* Is this a known long jump tramp? */
> > @@ -378,7 +379,7 @@ static int setup_mcount_compiler_tramp(unsigned long
> > tramp)
> >               return -1;
> >       }
> >
> > -     if (patch_branch((unsigned int *)tramp, ptr, 0)) {
> > +     if (patch_branch((struct ppc_inst *)tramp, ptr, 0)) {
> >               pr_debug("REL24 out of range!\n");
> >               return -1;
> >       }
> > @@ -394,7 +395,7 @@ static int setup_mcount_compiler_tramp(unsigned long
> > tramp)
> >  static int __ftrace_make_nop_kernel(struct dyn_ftrace *rec, unsigned long
> > addr)
> >  {
> >       unsigned long tramp, ip = rec->ip;
> > -     unsigned int op;
> > +     struct ppc_inst op;
> >
> >       /* Read where this goes */
> >       if (probe_kernel_read(&op, (void *)ip, sizeof(int))) {
> > @@ -422,7 +423,7 @@ static int __ftrace_make_nop_kernel(struct dyn_ftrace
> > *rec, unsigned long addr)
> >               }
> >       }
> >
> > -     if (patch_instruction((unsigned int *)ip, ppc_inst(PPC_INST_NOP))) {
> > +     if (patch_instruction((struct ppc_inst *)ip, ppc_inst(PPC_INST_NOP))) {
> >               pr_err("Patching NOP failed.\n");
> >               return -EPERM;
> >       }
> > @@ -434,7 +435,7 @@ int ftrace_make_nop(struct module *mod,
> >                   struct dyn_ftrace *rec, unsigned long addr)
> >  {
> >       unsigned long ip = rec->ip;
> > -     unsigned int old, new;
> > +     struct ppc_inst old, new;
> >
> >       /*
> >        * If the calling address is more that 24 bits away,
> > @@ -487,7 +488,7 @@ int ftrace_make_nop(struct module *mod,
> >   */
> >  #ifndef CONFIG_MPROFILE_KERNEL
> >  static int
> > -expected_nop_sequence(void *ip, unsigned int op0, unsigned int op1)
> > +expected_nop_sequence(void *ip, struct ppc_inst op0, struct ppc_inst op1)
> >  {
> >       /*
> >        * We expect to see:
> > @@ -504,7 +505,7 @@ expected_nop_sequence(void *ip, unsigned int op0,
> > unsigned int op1)
> >  }
> >  #else
> >  static int
> > -expected_nop_sequence(void *ip, unsigned int op0, unsigned int op1)
> > +expected_nop_sequence(void *ip, struct ppc_inst op0, struct ppc_inst op1)
> >  {
> >       /* look for patched "NOP" on ppc64 with -mprofile-kernel */
> >       if (!ppc_inst_equal(op0, ppc_inst(PPC_INST_NOP)))
> > @@ -516,8 +517,8 @@ expected_nop_sequence(void *ip, unsigned int op0,
> > unsigned int op1)
> >  static int
> >  __ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr)
> >  {
> > -     unsigned int op[2];
> > -     unsigned int instr;
> > +     struct ppc_inst op[2];
> > +     struct ppc_inst instr;
> >       void *ip = (void *)rec->ip;
> >       unsigned long entry, ptr, tramp;
> >       struct module *mod = rec->arch.mod;
> > @@ -528,7 +529,7 @@ __ftrace_make_call(struct dyn_ftrace *rec, unsigned long
> > addr)
> >
> >       if (!expected_nop_sequence(ip, op[0], op[1])) {
> >               pr_err("Unexpected call sequence at %p: %x %x\n",
> > -             ip, op[0], op[1]);
> > +             ip, ppc_inst_val(op[0]), ppc_inst_val(op[1]));
>
>
> shouldn't this change be part of patch 6,
>
> [PATCH v5 06/21] powerpc: Use an accessor for instructions
Yes it should be.
>
>
> >               return -EINVAL;
> >       }
> >
> > @@ -582,7 +583,7 @@ static int
> >  __ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr)
> >  {
> >       int err;
> > -     unsigned int op;
> > +     struct ppc_inst op;
> >       unsigned long ip = rec->ip;
> >
> >       /* read where this goes */
> > @@ -602,7 +603,7 @@ __ftrace_make_call(struct dyn_ftrace *rec, unsigned long
> > addr)
> >       }
> >
> >       /* create the branch to the trampoline */
> > -     err = create_branch(&op, (unsigned int *)ip,
> > +     err = create_branch(&op, (struct ppc_inst *)ip,
> >                           rec->arch.mod->arch.tramp, BRANCH_SET_LINK);
> >       if (!err) {
> >               pr_err("REL24 out of range!\n");
> > @@ -621,7 +622,7 @@ __ftrace_make_call(struct dyn_ftrace *rec, unsigned long
> > addr)
> >
> >  static int __ftrace_make_call_kernel(struct dyn_ftrace *rec, unsigned long
> > addr)
> >  {
> > -     unsigned int op;
> > +     struct ppc_inst op;
> >       void *ip = (void *)rec->ip;
> >       unsigned long tramp, entry, ptr;
> >
> > @@ -669,7 +670,7 @@ static int __ftrace_make_call_kernel(struct dyn_ftrace
> > *rec, unsigned long addr)
> >  int ftrace_make_call(struct dyn_ftrace *rec, unsigned long addr)
> >  {
> >       unsigned long ip = rec->ip;
> > -     unsigned int old, new;
> > +     struct ppc_inst old, new;
> >
> >       /*
> >        * If the calling address is more that 24 bits away,
> > @@ -708,7 +709,7 @@ static int
> >  __ftrace_modify_call(struct dyn_ftrace *rec, unsigned long old_addr,
> >                                       unsigned long addr)
> >  {
> > -     unsigned int op;
> > +     struct ppc_inst op;
> >       unsigned long ip = rec->ip;
> >       unsigned long entry, ptr, tramp;
> >       struct module *mod = rec->arch.mod;
> > @@ -756,7 +757,7 @@ __ftrace_modify_call(struct dyn_ftrace *rec, unsigned
> > long old_addr,
> >       /* The new target may be within range */
> >       if (test_24bit_addr(ip, addr)) {
> >               /* within range */
> > -             if (patch_branch((unsigned int *)ip, addr, BRANCH_SET_LINK)) {
> > +             if (patch_branch((struct ppc_inst *)ip, addr, BRANCH_SET_LINK))
> > {
> >                       pr_err("REL24 out of range!\n");
> >                       return -EINVAL;
> >               }
> > @@ -784,12 +785,12 @@ __ftrace_modify_call(struct dyn_ftrace *rec, unsigned
> > long old_addr,
> >       }
> >
> >       /* Ensure branch is within 24 bits */
> > -     if (create_branch(&op, (unsigned int *)ip, tramp, BRANCH_SET_LINK)) {
> > +     if (create_branch(&op, (struct ppc_inst *)ip, tramp, BRANCH_SET_LINK))
> > {
> >               pr_err("Branch out of range\n");
> >               return -EINVAL;
> >       }
> >
> > -     if (patch_branch((unsigned int *)ip, tramp, BRANCH_SET_LINK)) {
> > +     if (patch_branch((struct ppc_inst *)ip, tramp, BRANCH_SET_LINK)) {
> >               pr_err("REL24 out of range!\n");
> >               return -EINVAL;
> >       }
> > @@ -802,7 +803,7 @@ int ftrace_modify_call(struct dyn_ftrace *rec, unsigned
> > long old_addr,
> >                       unsigned long addr)
> >  {
> >       unsigned long ip = rec->ip;
> > -     unsigned int old, new;
> > +     struct ppc_inst old, new;
> >
> >       /*
> >        * If the calling address is more that 24 bits away,
> > @@ -842,10 +843,10 @@ int ftrace_modify_call(struct dyn_ftrace *rec, unsigned
> > long old_addr,
> >  int ftrace_update_ftrace_func(ftrace_func_t func)
> >  {
> >       unsigned long ip = (unsigned long)(&ftrace_call);
> > -     unsigned int old, new;
> > +     struct ppc_inst old, new;
> >       int ret;
> >
> > -     old = *(unsigned int *)&ftrace_call;
> > +     old = *(struct ppc_inst *)&ftrace_call;
> >       new = ftrace_call_replace(ip, (unsigned long)func, 1);
> >       ret = ftrace_modify_code(ip, old, new);
> >
> > @@ -853,7 +854,7 @@ int ftrace_update_ftrace_func(ftrace_func_t func)
> >       /* Also update the regs callback function */
> >       if (!ret) {
> >               ip = (unsigned long)(&ftrace_regs_call);
> > -             old = *(unsigned int *)&ftrace_regs_call;
> > +             old = *(struct ppc_inst *)&ftrace_regs_call;
> >               new = ftrace_call_replace(ip, (unsigned long)func, 1);
> >               ret = ftrace_modify_code(ip, old, new);
> >       }
> > @@ -927,7 +928,7 @@ int ftrace_enable_ftrace_graph_caller(void)
> >       unsigned long ip = (unsigned long)(&ftrace_graph_call);
> >       unsigned long addr = (unsigned long)(&ftrace_graph_caller);
> >       unsigned long stub = (unsigned long)(&ftrace_graph_stub);
> > -     unsigned int old, new;
> > +     struct ppc_inst old, new;
> >
> >       old = ftrace_call_replace(ip, stub, 0);
> >       new = ftrace_call_replace(ip, addr, 0);
> > @@ -940,7 +941,7 @@ int ftrace_disable_ftrace_graph_caller(void)
> >       unsigned long ip = (unsigned long)(&ftrace_graph_call);
> >       unsigned long addr = (unsigned long)(&ftrace_graph_caller);
> >       unsigned long stub = (unsigned long)(&ftrace_graph_stub);
> > -     unsigned int old, new;
> > +     struct ppc_inst old, new;
> >
> >       old = ftrace_call_replace(ip, addr, 0);
> >       new = ftrace_call_replace(ip, stub, 0);
> > diff --git a/arch/powerpc/kernel/vecemu.c b/arch/powerpc/kernel/vecemu.c
> > index c8d21e812d8c..bbf536e10902 100644
> > --- a/arch/powerpc/kernel/vecemu.c
> > +++ b/arch/powerpc/kernel/vecemu.c
> > @@ -261,11 +261,12 @@ static unsigned int rfin(unsigned int x)
> >
> >  int emulate_altivec(struct pt_regs *regs)
> >  {
> > -     unsigned int instr, i, word;
> > +     struct ppc_inst instr;
> > +     unsigned int i, word;
> >       unsigned int va, vb, vc, vd;
> >       vector128 *vrs;
> >
> > -     if (get_user(instr, (unsigned int __user *) regs->nip))
> > +     if (get_user(instr.val, (unsigned int __user *) regs->nip))
>
>
> [...] reference to above for using helper.
>
>
> >               return -EFAULT;
> >
> >       word = ppc_inst_val(instr);
> > diff --git a/arch/powerpc/lib/code-patching.c b/arch/powerpc/lib/code-
> > patching.c
> > index 33654c6334a9..91be4a0b51cb 100644
> > --- a/arch/powerpc/lib/code-patching.c
> > +++ b/arch/powerpc/lib/code-patching.c
> > @@ -19,12 +19,12 @@
> >  #include <asm/setup.h>
> >  #include <asm/inst.h>
> >
> > -static int __patch_instruction(unsigned int *exec_addr, unsigned int instr,
> > -                            unsigned int *patch_addr)
> > +static int __patch_instruction(struct ppc_inst *exec_addr, struct ppc_inst
> > instr,
> > +                            struct ppc_inst *patch_addr)
> >  {
> >       int err = 0;
> >
> > -     __put_user_asm(instr, patch_addr, err, "stw");
> > +     __put_user_asm(ppc_inst_val(instr), patch_addr, err, "stw");
> >       if (err)
> >               return err;
> >
> > @@ -34,7 +34,7 @@ static int __patch_instruction(unsigned int *exec_addr,
> > unsigned int instr,
> >       return 0;
> >  }
> >
> > -int raw_patch_instruction(unsigned int *addr, unsigned int instr)
> > +int raw_patch_instruction(struct ppc_inst *addr, struct ppc_inst instr)
> >  {
> >       return __patch_instruction(addr, instr, addr);
> >  }
> > @@ -137,10 +137,10 @@ static inline int unmap_patch_area(unsigned long addr)
> >       return 0;
> >  }
> >
> > -static int do_patch_instruction(unsigned int *addr, unsigned int instr)
> > +static int do_patch_instruction(struct ppc_inst *addr, struct ppc_inst
> > instr)
> >  {
> >       int err;
> > -     unsigned int *patch_addr = NULL;
> > +     struct ppc_inst *patch_addr = NULL;
> >       unsigned long flags;
> >       unsigned long text_poke_addr;
> >       unsigned long kaddr = (unsigned long)addr;
> > @@ -177,14 +177,14 @@ static int do_patch_instruction(unsigned int *addr,
> > unsigned int instr)
> >  }
> >  #else /* !CONFIG_STRICT_KERNEL_RWX */
> >
> > -static int do_patch_instruction(unsigned int *addr, unsigned int instr)
> > +static int do_patch_instruction(struct ppc_inst *addr, struct ppc_inst
> > instr)
> >  {
> >       return raw_patch_instruction(addr, instr);
> >  }
> >
> >  #endif /* CONFIG_STRICT_KERNEL_RWX */
> >
> > -int patch_instruction(unsigned int *addr, unsigned int instr)
> > +int patch_instruction(struct ppc_inst *addr, struct ppc_inst instr)
> >  {
> >       /* Make sure we aren't patching a freed init section */
> >       if (init_mem_is_free && init_section_contains(addr, 4)) {
> > @@ -195,9 +195,9 @@ int patch_instruction(unsigned int *addr, unsigned int
> > instr)
> >  }
> >  NOKPROBE_SYMBOL(patch_instruction);
> >
> > -int patch_branch(unsigned int *addr, unsigned long target, int flags)
> > +int patch_branch(struct ppc_inst *addr, unsigned long target, int flags)
> >  {
> > -     unsigned int instr;
> > +     struct ppc_inst instr;
> >
> >       create_branch(&instr, addr, target, flags);
> >       return patch_instruction(addr, instr);
> > @@ -229,7 +229,7 @@ bool is_offset_in_branch_range(long offset)
> >   * Helper to check if a given instruction is a conditional branch
> >   * Derived from the conditional checks in analyse_instr()
> >   */
> > -bool is_conditional_branch(unsigned int instr)
> > +bool is_conditional_branch(struct ppc_inst instr)
> >  {
> >       unsigned int opcode = ppc_inst_opcode(instr);
> >
> > @@ -247,13 +247,13 @@ bool is_conditional_branch(unsigned int instr)
> >  }
> >  NOKPROBE_SYMBOL(is_conditional_branch);
> >
> > -int create_branch(unsigned int *instr,
> > -               const unsigned int *addr,
> > +int create_branch(struct ppc_inst *instr,
> > +               const struct ppc_inst *addr,
> >                 unsigned long target, int flags)
> >  {
> >       long offset;
> >
> > -     *instr = 0;
> > +     *instr = ppc_inst(0);
> >       offset = target;
> >       if (! (flags & BRANCH_ABSOLUTE))
> >               offset = offset - (unsigned long)addr;
> > @@ -263,12 +263,12 @@ int create_branch(unsigned int *instr,
> >               return 1;
> >
> >       /* Mask out the flags and target, so they don't step on each other. */
> > -     *instr = 0x48000000 | (flags & 0x3) | (offset & 0x03FFFFFC);
> > +     *instr = ppc_inst(0x48000000 | (flags & 0x3) | (offset & 0x03FFFFFC));
> >
> >       return 0;
> >  }
> >
> > -int create_cond_branch(unsigned int *instr, const unsigned int *addr,
> > +int create_cond_branch(struct ppc_inst *instr, const struct ppc_inst *addr,
> >                      unsigned long target, int flags)
> >  {
> >       long offset;
> > @@ -282,27 +282,27 @@ int create_cond_branch(unsigned int *instr, const
> > unsigned int *addr,
> >               return 1;
> >
> >       /* Mask out the flags and target, so they don't step on each other. */
> > -     *instr = 0x40000000 | (flags & 0x3FF0003) | (offset & 0xFFFC);
> > +     *instr = ppc_inst(0x40000000 | (flags & 0x3FF0003) | (offset &
> > 0xFFFC));
> >
> >       return 0;
> >  }
> >
> > -static unsigned int branch_opcode(unsigned int instr)
> > +static unsigned int branch_opcode(struct ppc_inst instr)
> >  {
> >       return ppc_inst_opcode(instr) & 0x3F;
> >  }
> >
> > -static int instr_is_branch_iform(unsigned int instr)
> > +static int instr_is_branch_iform(struct ppc_inst instr)
> >  {
> >       return branch_opcode(instr) == 18;
> >  }
> >
> > -static int instr_is_branch_bform(unsigned int instr)
> > +static int instr_is_branch_bform(struct ppc_inst instr)
> >  {
> >       return branch_opcode(instr) == 16;
> >  }
> >
> > -int instr_is_relative_branch(unsigned int instr)
> > +int instr_is_relative_branch(struct ppc_inst instr)
> >  {
> >       if (ppc_inst_val(instr) & BRANCH_ABSOLUTE)
> >               return 0;
> > @@ -310,12 +310,12 @@ int instr_is_relative_branch(unsigned int instr)
> >       return instr_is_branch_iform(instr) || instr_is_branch_bform(instr);
> >  }
> >
> > -int instr_is_relative_link_branch(unsigned int instr)
> > +int instr_is_relative_link_branch(struct ppc_inst instr)
> >  {
> >       return instr_is_relative_branch(instr) && (ppc_inst_val(instr) &
> > BRANCH_SET_LINK);
> >  }
> >
> > -static unsigned long branch_iform_target(const unsigned int *instr)
> > +static unsigned long branch_iform_target(const struct ppc_inst *instr)
> >  {
> >       signed long imm;
> >
> > @@ -331,7 +331,7 @@ static unsigned long branch_iform_target(const unsigned
> > int *instr)
> >       return (unsigned long)imm;
> >  }
> >
> > -static unsigned long branch_bform_target(const unsigned int *instr)
> > +static unsigned long branch_bform_target(const struct ppc_inst *instr)
> >  {
> >       signed long imm;
> >
> > @@ -347,7 +347,7 @@ static unsigned long branch_bform_target(const unsigned
> > int *instr)
> >       return (unsigned long)imm;
> >  }
> >
> > -unsigned long branch_target(const unsigned int *instr)
> > +unsigned long branch_target(const struct ppc_inst *instr)
> >  {
> >       if (instr_is_branch_iform(*instr))
> >               return branch_iform_target(instr);
> > @@ -357,7 +357,7 @@ unsigned long branch_target(const unsigned int *instr)
> >       return 0;
> >  }
> >
> > -int instr_is_branch_to_addr(const unsigned int *instr, unsigned long addr)
> > +int instr_is_branch_to_addr(const struct ppc_inst *instr, unsigned long
> > addr)
> >  {
> >       if (instr_is_branch_iform(*instr) || instr_is_branch_bform(*instr))
> >               return branch_target(instr) == addr;
> > @@ -365,7 +365,7 @@ int instr_is_branch_to_addr(const unsigned int *instr,
> > unsigned long addr)
> >       return 0;
> >  }
> >
> > -int translate_branch(unsigned int *instr, const unsigned int *dest, const
> > unsigned int *src)
> > +int translate_branch(struct ppc_inst *instr, const struct ppc_inst *dest,
> > const struct ppc_inst *src)
> >  {
> >       unsigned long target;
> >
> > @@ -408,7 +408,7 @@ static void __init test_trampoline(void)
> >  static void __init test_branch_iform(void)
> >  {
> >       int err;
> > -     unsigned int instr;
> > +     struct ppc_inst instr;
> >       unsigned long addr;
> >
> >       addr = (unsigned long)&instr;
> > @@ -483,12 +483,12 @@ static void __init test_branch_iform(void)
> >
> >  static void __init test_create_function_call(void)
> >  {
> > -     unsigned int *iptr;
> > +     struct ppc_inst *iptr;
> >       unsigned long dest;
> > -     unsigned int instr;
> > +     struct ppc_inst instr;
> >
> >       /* Check we can create a function call */
> > -     iptr = (unsigned int *)ppc_function_entry(test_trampoline);
> > +     iptr = (struct ppc_inst *)ppc_function_entry(test_trampoline);
> >       dest = ppc_function_entry(test_create_function_call);
> >       create_branch(&instr, iptr, dest, BRANCH_SET_LINK);
> >       patch_instruction(iptr, instr);
> > @@ -499,7 +499,8 @@ static void __init test_branch_bform(void)
> >  {
> >       int err;
> >       unsigned long addr;
> > -     unsigned int *iptr, instr, flags;
> > +     struct ppc_inst *iptr, instr;
> > +     unsigned int flags;
> >
> >       iptr = &instr;
> >       addr = (unsigned long)iptr;
> > @@ -569,8 +570,8 @@ static void __init test_branch_bform(void)
> >  static void __init test_translate_branch(void)
> >  {
> >       unsigned long addr;
> > -     unsigned int *p, *q;
> > -     unsigned int instr;
> > +     struct ppc_inst *p, *q;
> > +     struct ppc_inst instr;
> >       void *buf;
> >
> >       buf = vmalloc(PAGE_ALIGN(0x2000000 + 1));
> > diff --git a/arch/powerpc/lib/feature-fixups.c b/arch/powerpc/lib/feature-
> > fixups.c
> > index 6e7479b8887a..8c5d0db77013 100644
> > --- a/arch/powerpc/lib/feature-fixups.c
> > +++ b/arch/powerpc/lib/feature-fixups.c
> > @@ -32,26 +32,26 @@ struct fixup_entry {
> >       long            alt_end_off;
> >  };
> >
> > -static unsigned int *calc_addr(struct fixup_entry *fcur, long offset)
> > +static struct ppc_inst *calc_addr(struct fixup_entry *fcur, long offset)
> >  {
> >       /*
> >        * We store the offset to the code as a negative offset from
> >        * the start of the alt_entry, to support the VDSO. This
> >        * routine converts that back into an actual address.
> >        */
> > -     return (unsigned int *)((unsigned long)fcur + offset);
> > +     return (struct ppc_inst *)((unsigned long)fcur + offset);
> >  }
> >
> > -static int patch_alt_instruction(unsigned int *src, unsigned int *dest,
> > -                              unsigned int *alt_start, unsigned int
> > *alt_end)
> > +static int patch_alt_instruction(struct ppc_inst *src, struct ppc_inst
> > *dest,
> > +                              struct ppc_inst *alt_start, struct ppc_inst
> > *alt_end)
> >  {
> >       int err;
> > -     unsigned int instr;
> > +     struct ppc_inst instr;
> >
> >       instr = *src;
> >
> >       if (instr_is_relative_branch(*src)) {
> > -             unsigned int *target = (unsigned int *)branch_target(src);
> > +             struct ppc_inst *target = (struct ppc_inst
> > *)branch_target(src);
> >
> >               /* Branch within the section doesn't need translating */
> >               if (target < alt_start || target > alt_end) {
> > @@ -68,7 +68,7 @@ static int patch_alt_instruction(unsigned int *src,
> > unsigned int *dest,
> >
> >  static int patch_feature_section(unsigned long value, struct fixup_entry
> > *fcur)
> >  {
> > -     unsigned int *start, *end, *alt_start, *alt_end, *src, *dest;
> > +     struct ppc_inst *start, *end, *alt_start, *alt_end, *src, *dest;
> >
> >       start = calc_addr(fcur, fcur->start_off);
> >       end = calc_addr(fcur, fcur->end_off);
> > @@ -147,15 +147,15 @@ static void do_stf_entry_barrier_fixups(enum
> > stf_barrier_type types)
> >
> >               pr_devel("patching dest %lx\n", (unsigned long)dest);
> >
> > -             patch_instruction(dest, ppc_inst(instrs[0]));
> > +             patch_instruction((struct ppc_inst *)dest,
> > ppc_inst(instrs[0]));
>
>
> we had already declared them as struct ppc_inst *
True.
>
>
> >
> >               if (types & STF_BARRIER_FALLBACK)
> > -                     patch_branch(dest + 1, (unsigned
> > long)&stf_barrier_fallback,
> > +                     patch_branch((struct ppc_inst *)(dest + 1), (unsigned
> > long)&stf_barrier_fallback,
> >                                    BRANCH_SET_LINK);
> >               else
> > -                     patch_instruction(dest + 1, ppc_inst(instrs[1]));
> > +                     patch_instruction((struct ppc_inst *)(dest + 1),
> > ppc_inst(instrs[1]));
> >
> > -             patch_instruction(dest + 2, ppc_inst(instrs[2]));
> > +             patch_instruction((struct ppc_inst *)(dest + 2),
> > ppc_inst(instrs[2]));
> >       }
> >
> >       printk(KERN_DEBUG "stf-barrier: patched %d entry locations (%s
> > barrier)\n", i,
> > @@ -208,12 +208,12 @@ static void do_stf_exit_barrier_fixups(enum
> > stf_barrier_type types)
> >
> >               pr_devel("patching dest %lx\n", (unsigned long)dest);
> >
> > -             patch_instruction(dest, ppc_inst(instrs[0]));
> > -             patch_instruction(dest + 1, ppc_inst(instrs[1]));
> > -             patch_instruction(dest + 2, ppc_inst(instrs[2]));
> > -             patch_instruction(dest + 3, ppc_inst(instrs[3]));
> > -             patch_instruction(dest + 4, ppc_inst(instrs[4]));
> > -             patch_instruction(dest + 5, ppc_inst(instrs[5]));
> > +             patch_instruction((struct ppc_inst *)dest,
> > ppc_inst(instrs[0]));
> > +             patch_instruction((struct ppc_inst *)(dest + 1),
> > ppc_inst(instrs[1]));
> > +             patch_instruction((struct ppc_inst *)(dest + 2),
> > ppc_inst(instrs[2]));
> > +             patch_instruction((struct ppc_inst *)(dest + 3),
> > ppc_inst(instrs[3]));
> > +             patch_instruction((struct ppc_inst *)(dest + 4),
> > ppc_inst(instrs[4]));
> > +             patch_instruction((struct ppc_inst *)(dest + 5),
> > ppc_inst(instrs[5]));
> >       }
> >       printk(KERN_DEBUG "stf-barrier: patched %d exit locations (%s
> > barrier)\n", i,
> >               (types == STF_BARRIER_NONE)                  ? "no" :
> > @@ -261,9 +261,9 @@ void do_rfi_flush_fixups(enum l1d_flush_type types)
> >
> >               pr_devel("patching dest %lx\n", (unsigned long)dest);
> >
> > -             patch_instruction(dest, ppc_inst(instrs[0]));
> > -             patch_instruction(dest + 1, ppc_inst(instrs[1]));
> > -             patch_instruction(dest + 2, ppc_inst(instrs[2]));
> > +             patch_instruction((struct ppc_inst *)dest,
> > ppc_inst(instrs[0]));
> > +             patch_instruction((struct ppc_inst *)(dest + 1),
> > ppc_inst(instrs[1]));
> > +             patch_instruction((struct ppc_inst *)(dest + 2),
> > ppc_inst(instrs[2]));
> >       }
> >
> >       printk(KERN_DEBUG "rfi-flush: patched %d locations (%s flush)\n", i,
> > @@ -296,7 +296,7 @@ void do_barrier_nospec_fixups_range(bool enable, void
> > *fixup_start, void *fixup_
> >               dest = (void *)start + *start;
> >
> >               pr_devel("patching dest %lx\n", (unsigned long)dest);
> > -             patch_instruction(dest, ppc_inst(instr));
> > +             patch_instruction((struct ppc_inst *)dest, ppc_inst(instr));
> >       }
> >
> >       printk(KERN_DEBUG "barrier-nospec: patched %d locations\n", i);
> > @@ -339,8 +339,8 @@ void do_barrier_nospec_fixups_range(bool enable, void
> > *fixup_start, void *fixup_
> >               dest = (void *)start + *start;
> >
> >               pr_devel("patching dest %lx\n", (unsigned long)dest);
> > -             patch_instruction(dest, ppc_inst(instr[0]));
> > -             patch_instruction(dest + 1, ppc_inst(instr[1]));
> > +             patch_instruction((struct ppc_inst *)dest, ppc_inst(instr[0]));
> > +             patch_instruction((struct ppc_inst *)(dest + 1),
> > ppc_inst(instr[1]));
> >       }
> >
> >       printk(KERN_DEBUG "barrier-nospec: patched %d locations\n", i);
> > @@ -373,7 +373,7 @@ void do_btb_flush_fixups(void)
> >  void do_lwsync_fixups(unsigned long value, void *fixup_start, void
> > *fixup_end)
> >  {
> >       long *start, *end;
> > -     unsigned int *dest;
> > +     struct ppc_inst *dest;
> >
> >       if (!(value & CPU_FTR_LWSYNC))
> >               return ;
> > diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c
> > index 26e37176692e..52ddd3122dc8 100644
> > --- a/arch/powerpc/lib/sstep.c
> > +++ b/arch/powerpc/lib/sstep.c
> > @@ -1163,7 +1163,7 @@ static nokprobe_inline int trap_compare(long v1, long
> > v2)
> >   * otherwise.
> >   */
> >  int analyse_instr(struct instruction_op *op, const struct pt_regs *regs,
> > -               unsigned int instr)
> > +               struct ppc_inst instr)
>
>
> we need to take care of `instr` inside this function as well to adopt
> the helpers to work with it.
>
> -- Bala
>
>
> >  {
> >       unsigned int opcode, ra, rb, rc, rd, spr, u;
> >       unsigned long int imm;
> > @@ -3103,7 +3103,7 @@ NOKPROBE_SYMBOL(emulate_loadstore);
> >   * or -1 if the instruction is one that should not be stepped,
> >   * such as an rfid, or a mtmsrd that would clear MSR_RI.
> >   */
> > -int emulate_step(struct pt_regs *regs, unsigned int instr)
> > +int emulate_step(struct pt_regs *regs, struct ppc_inst instr)
> >  {
> >       struct instruction_op op;
> >       int r, err, type;
> > diff --git a/arch/powerpc/lib/test_emulate_step.c
> > b/arch/powerpc/lib/test_emulate_step.c
> > index 16387a9bfda0..60b159b60545 100644
> > --- a/arch/powerpc/lib/test_emulate_step.c
> > +++ b/arch/powerpc/lib/test_emulate_step.c
> > @@ -461,7 +461,7 @@ struct compute_test {
> >       struct {
> >               char *descr;
> >               unsigned long flags;
> > -             unsigned int instr;
> > +             struct ppc_inst instr;
> >               struct pt_regs regs;
> >       } subtests[MAX_SUBTESTS + 1];
> >  };
> > @@ -842,7 +842,7 @@ static struct compute_test compute_tests[] = {
> >  };
> >
> >  static int __init emulate_compute_instr(struct pt_regs *regs,
> > -                                     unsigned int instr)
> > +                                     struct ppc_inst instr)
> >  {
> >       struct instruction_op op;
> >
> > @@ -860,7 +860,7 @@ static int __init emulate_compute_instr(struct pt_regs
> > *regs,
> >  }
> >
> >  static int __init execute_compute_instr(struct pt_regs *regs,
> > -                                     unsigned int instr)
> > +                                     struct ppc_inst instr)
> >  {
> >       extern int exec_instr(struct pt_regs *regs);
> >       extern s32 patch__exec_instr;
> > @@ -891,7 +891,8 @@ static void __init run_tests_compute(void)
> >       unsigned long flags;
> >       struct compute_test *test;
> >       struct pt_regs *regs, exp, got;
> > -     unsigned int i, j, k, instr;
> > +     unsigned int i, j, k;
> > +     struct ppc_inst instr;
> >       bool ignore_gpr, ignore_xer, ignore_ccr, passed;
> >
> >       for (i = 0; i < ARRAY_SIZE(compute_tests); i++) {
> > diff --git a/arch/powerpc/perf/core-book3s.c b/arch/powerpc/perf/core-
> > book3s.c
> > index 3086055bf681..2d2580a4bfb5 100644
> > --- a/arch/powerpc/perf/core-book3s.c
> > +++ b/arch/powerpc/perf/core-book3s.c
> > @@ -421,14 +421,14 @@ static __u64 power_pmu_bhrb_to(u64 addr)
> >               if (probe_kernel_read(&instr, (void *)addr, sizeof(instr)))
> >                       return 0;
> >
> > -             return branch_target(&instr);
> > +             return branch_target((struct ppc_inst *)&instr);
> >       }
> >
> >       /* Userspace: need copy instruction here then translate it */
> >       if (probe_user_read(&instr, (unsigned int __user *)addr,
> > sizeof(instr)))
> >               return 0;
> >
> > -     target = branch_target(&instr);
> > +     target = branch_target((struct ppc_inst *)&instr);
> >       if ((!target) || (instr & BRANCH_ABSOLUTE))
> >               return target;
> >
> > diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
> > index f6c87d3d53ea..e3d8e1b8ce01 100644
> > --- a/arch/powerpc/xmon/xmon.c
> > +++ b/arch/powerpc/xmon/xmon.c
> > @@ -99,7 +99,7 @@ static long *xmon_fault_jmp[NR_CPUS];
> >  /* Breakpoint stuff */
> >  struct bpt {
> >       unsigned long   address;
> > -     unsigned int    *instr;
> > +     struct ppc_inst *instr;
> >       atomic_t        ref_count;
> >       int             enabled;
> >       unsigned long   pad;
> > @@ -117,7 +117,7 @@ static unsigned bpinstr = 0x7fe00008;     /* trap */
> >
> >  #define BP_NUM(bp)   ((bp) - bpts + 1)
> >
> > -#define BPT_SIZE     (sizeof(unsigned int) * 2)
> > +#define BPT_SIZE     (sizeof(struct ppc_inst) * 2)
> >  #define BPT_WORDS    (BPT_SIZE / sizeof(unsigned int))
> >  extern unsigned int bpt_table[NBPTS * BPT_WORDS];
> >
> > @@ -879,8 +879,8 @@ static struct bpt *new_breakpoint(unsigned long a)
> >       for (bp = bpts; bp < &bpts[NBPTS]; ++bp) {
> >               if (!bp->enabled && atomic_read(&bp->ref_count) == 0) {
> >                       bp->address = a;
> > -                     bp->instr = bpt_table + ((bp - bpts) * BPT_WORDS);
> > -                     patch_instruction(bp->instr + 1, bpinstr);
> > +                     bp->instr = (void *)(bpt_table + ((bp - bpts) *
> > BPT_WORDS));
> > +                     patch_instruction(bp->instr + 1, ppc_inst(bpinstr));
> >                       return bp;
> >               }
> >       }
> > @@ -892,7 +892,7 @@ static struct bpt *new_breakpoint(unsigned long a)
> >  static void insert_bpts(void)
> >  {
> >       int i;
> > -     unsigned int instr;
> > +     struct ppc_inst instr;
> >       struct bpt *bp;
> >
> >       bp = bpts;
> > @@ -914,8 +914,8 @@ static void insert_bpts(void)
> >               patch_instruction(bp->instr, instr);
> >               if (bp->enabled & BP_CIABR)
> >                       continue;
> > -             if (patch_instruction((unsigned int *)bp->address,
> > -                                                     bpinstr) != 0) {
> > +             if (patch_instruction((struct ppc_inst *)bp->address,
> > +                                                     ppc_inst(bpinstr)) !=
> > 0) {
> >                       printf("Couldn't write instruction at %lx, "
> >                              "disabling breakpoint there\n", bp->address);
> >                       bp->enabled &= ~BP_TRAP;
> > @@ -943,7 +943,7 @@ static void remove_bpts(void)
> >  {
> >       int i;
> >       struct bpt *bp;
> > -     unsigned instr;
> > +     struct ppc_inst instr;
> >
> >       bp = bpts;
> >       for (i = 0; i < NBPTS; ++i, ++bp) {
> > @@ -952,7 +952,7 @@ static void remove_bpts(void)
> >               if (mread(bp->address, &instr, 4) == 4
> >                   && ppc_inst_equal(instr, ppc_inst(bpinstr))
> >                   && patch_instruction(
> > -                     (unsigned int *)bp->address, bp->instr[0]) != 0)
> > +                     (struct ppc_inst *)bp->address, bp->instr[0]) != 0)
> >                       printf("Couldn't remove breakpoint at %lx\n",
> >                              bp->address);
> >       }
> > @@ -1159,7 +1159,7 @@ static int do_step(struct pt_regs *regs)
> >   */
> >  static int do_step(struct pt_regs *regs)
> >  {
> > -     unsigned int instr;
> > +     struct ppc_inst instr;
> >       int stepped;
> >
> >       force_enable_xmon();
> > @@ -1325,7 +1325,7 @@ csum(void)
> >   */
> >  static long check_bp_loc(unsigned long addr)
> >  {
> > -     unsigned int instr;
> > +     struct ppc_inst instr;
> >
> >       addr &= ~3;
> >       if (!is_kernel_addr(addr)) {
> > @@ -2846,7 +2846,7 @@ generic_inst_dump(unsigned long adr, long count, int
> > praddr,
> >  {
> >       int nr, dotted;
> >       unsigned long first_adr;
> > -     unsigned int inst, last_inst = ppc_inst(0);
> > +     struct ppc_inst inst, last_inst = ppc_inst(0);
> >       unsigned char val[4];
> >
> >       dotted = 0;
>

^ permalink raw reply

* Re: [CRON] Still Failing: ClangBuiltLinux/continuous-integration#1351 (master - 09d8e9d)
From: Nick Desaulniers @ 2020-04-07 18:36 UTC (permalink / raw)
  To: Nathan Chancellor, Michael Ellerman; +Cc: clang-built-linux, linuxppc-dev
In-Reply-To: <CAEVzpNnX2NGvEKZEKDbrX6PeZjrOM=A4qGVCuukJxbuSLM910g@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 3353 bytes --]

+ PPC folks, mailing list, in case this is a known issue.

On Tue, Apr 7, 2020 at 11:33 AM Nathan Chancellor <natechancellor@gmail.com>
wrote:

> On Tue, Apr 7, 2020 at 11:30 AM Nick Desaulniers <ndesaulniers@google.com>
> wrote:
>
>>
>>
>> On Tue, Apr 7, 2020 at 11:11 AM Nathan Chancellor <
>> natechancellor@gmail.com> wrote:
>>
>>> This PowerPC failure is super flaky. I can reproduce it locally but it
>>> does not always happen so trying to bisect seems potentially pointless but
>>> I'll try to do it today.
>>>
>>
>> If we can figure out the first day it reproduces that might help to
>> mention to the ppc folks.  You could also try qemu boot 30 times (`seq`) or
>> more to be confident.  It could be that the compiler has non-determinism
>> though, which would require build+boot multiple times in a loop.
>>
>
> Ack, I plan to try booting ten times and see what happens. Looks like
> next-20200402 was when it first started, which did have a bunch of PPC
> stuff merged in it.
>
>
>>
>>
>>>
>>> Cheers,
>>> Nathan
>>>
>>> On Tue, Apr 7, 2020 at 11:07 AM Travis CI <builds@travis-ci.com> wrote:
>>>
>>>> ClangBuiltLinux
>>>>
>>>> /
>>>>
>>>> continuous-integration
>>>>
>>>> <https://travis-ci.com/github/ClangBuiltLinux/continuous-integration?utm_medium=notification&utm_source=email>
>>>>
>>>> [image: branch icon]master
>>>> <https://github.com/ClangBuiltLinux/continuous-integration/tree/master>
>>>> [image: build has failed]
>>>> Build #1351 is still failing
>>>> <https://travis-ci.com/github/ClangBuiltLinux/continuous-integration/builds/158986482?utm_medium=notification&utm_source=email>
>>>> [image: arrow to build time]
>>>> [image: clock icon]6 hrs, 18 mins, and 45 secs
>>>>
>>>> [image: Nathan Chancellor avatar]Nathan Chancellor
>>>> 09d8e9d CHANGESET →
>>>> <https://github.com/ClangBuiltLinux/continuous-integration/compare/dc272934f2cdbcb5f4614349969f3ec9cfd45dad...09d8e9d8a85d0825fa9d8e48537f68c77cab2a8c>
>>>>
>>>> Merge pull request #259 from nathanchance/mips-lld
>>>>
>>>> Enable LLD for MIPS
>>>>
>>>> Want to know about upcoming build environment updates?
>>>>
>>>> Would you like to stay up-to-date with the upcoming Travis CI build
>>>> environment updates? We set up a mailing list for you!
>>>> SIGN UP HERE <http://eepurl.com/9OCsP>
>>>>
>>>> [image: book icon]
>>>>
>>>> Documentation <https://docs.travis-ci.com/> about Travis CI
>>>> Have any questions? We're here to help. <support@travis-ci.com>
>>>> Unsubscribe
>>>> <https://travis-ci.com/account/preferences/unsubscribe?repository=6718752&utm_medium=notification&utm_source=email>
>>>> from build emails from the ClangBuiltLinux/continuous-integration
>>>> repository.
>>>> To unsubscribe from *all* build emails, please update your settings
>>>> <https://travis-ci.com/account/preferences/unsubscribe?utm_medium=notification&utm_source=email>.
>>>>
>>>> [image: black and white travis ci logo] <https://travis-ci.com>
>>>>
>>>> Travis CI GmbH, Rigaer Str. 8, 10427 Berlin, Germany | GF/CEO: Randy
>>>> Jacops | Contact: contact@travis-ci.com | Amtsgericht Charlottenburg,
>>>> Berlin, HRB 140133 B | Umsatzsteuer-ID gemäß §27 a Umsatzsteuergesetz:
>>>> DE282002648
>>>>
>>>
>>
>> --
>> Thanks,
>> ~Nick Desaulniers
>>
>

-- 
Thanks,
~Nick Desaulniers

[-- Attachment #2: Type: text/html, Size: 17457 bytes --]

^ permalink raw reply

* Re: [PATCH 0/2] powerpc: Remove support for ppc405/440 Xilinx platforms
From: Benjamin Herrenschmidt @ 2020-04-07 23:32 UTC (permalink / raw)
  To: Michael Ellerman, Christophe Leroy, Andy Shevchenko,
	Arnd Bergmann
  Cc: Kate Stewart, Mark Rutland, Desnes A. Nunes do Rosario,
	Geert Uytterhoeven, open list:DOCUMENTATION,
	ALSA Development Mailing List, dri-devel, Jaroslav Kysela,
	Richard Fontana, Paul Mackerras, Miquel Raynal,
	Mauro Carvalho Chehab, Fabio Estevam, Sasha Levin,
	Stephen Rothwell, Jonathan Corbet, Masahiro Yamada, Takashi Iwai,
	YueHaibing, Michal Simek, Krzysztof Kozlowski, Linux ARM,
	Leonardo Bras, DTML, Andrew Donnellan, Bartlomiej Zolnierkiewicz,
	Marc Zyngier, Alistair Popple, linuxppc-dev, Nicholas Piggin,
	Alexios Zavras, Mark Brown, git, Linux Fbdev development list,
	Jonathan Cameron, Thomas Gleixner, Allison Randal, Michal Simek,
	Wei Hu, Christian Lamparter, Greg Kroah-Hartman, Nick Desaulniers,
	linux-kernel@vger.kernel.org, Armijn Hemel, Rob Herring,
	Enrico Weigelt, David S. Miller, Thiago Jung Bauermann
In-Reply-To: <87pncprwp9.fsf@mpe.ellerman.id.au>

On Fri, 2020-04-03 at 15:59 +1100, Michael Ellerman wrote:
> Benjamin Herrenschmidt <benh@kernel.crashing.org> writes:
> > On Tue, 2020-03-31 at 16:30 +1100, Michael Ellerman wrote:
> > > I have no attachment to 40x, and I'd certainly be happy to have
> > > less
> > > code in the tree, we struggle to keep even the modern platforms
> > > well
> > > maintained.
> > > 
> > > At the same time I don't want to render anyone's hardware
> > > obsolete
> > > unnecessarily. But if there's really no one using 40x then we
> > > should
> > > remove it, it could well be broken already.
> > > 
> > > So I guess post a series to do the removal and we'll see if
> > > anyone
> > > speaks up.
> > 
> > We shouldn't remove 40x completely. Just remove the Xilinx 405
> > stuff.
> 
> Congratulations on becoming the 40x maintainer!

Didn't I give you my last 40x system ? :-) IBM still put 40x cores
inside POWER chips no ?

Cheers,
Ben.



^ permalink raw reply

* Re: [PATCH v1 2/2] mm/memory_hotplug: remove is_mem_section_removable()
From: Wei Yang @ 2020-04-07 21:30 UTC (permalink / raw)
  To: David Hildenbrand
  Cc: Michal Hocko, Baoquan He, linux-kernel, Wei Yang, linux-mm,
	Andrew Morton, linuxppc-dev, Oscar Salvador
In-Reply-To: <20200407135416.24093-3-david@redhat.com>

On Tue, Apr 07, 2020 at 03:54:16PM +0200, David Hildenbrand wrote:
>Fortunately, all users of is_mem_section_removable() are gone. Get rid of
>it, including some now unnecessary functions.
>
>Cc: Michael Ellerman <mpe@ellerman.id.au>
>Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
>Cc: Michal Hocko <mhocko@suse.com>
>Cc: Andrew Morton <akpm@linux-foundation.org>
>Cc: Oscar Salvador <osalvador@suse.de>
>Cc: Baoquan He <bhe@redhat.com>
>Cc: Wei Yang <richard.weiyang@gmail.com>
>Signed-off-by: David Hildenbrand <david@redhat.com>

Nice.

Reviewed-by: Wei Yang <richard.weiyang@gmail.com>

-- 
Wei Yang
Help you, Help me

^ permalink raw reply

* Re: [PATCH v3 1/1] powerpc/kernel: Enables memory hot-remove after reboot on pseries guests
From: Leonardo Bras @ 2020-04-07 16:32 UTC (permalink / raw)
  To: Michael Ellerman
  Cc: Greg Kroah-Hartman, Claudio Carvalho, linux-kernel,
	Paul Mackerras, Hari Bathini, Nathan Fontenot, Thomas Gleixner,
	bharata, linuxppc-dev, Allison Randal
In-Reply-To: <20200407040046.GA12609@in.ibm.com>

[-- Attachment #1: Type: text/plain, Size: 817 bytes --]

Hello Michael,

Would it be ok to add this patch for 5.7 ? Or too late?

Regards,

On Tue, 2020-04-07 at 09:30 +0530, Bharata B Rao wrote:
> On Mon, Apr 06, 2020 at 12:41:01PM -0300, Leonardo Bras wrote:
> > Hello Bharata,
> > 
> > On Fri, 2020-04-03 at 20:08 +0530, Bharata B Rao wrote:
> > > The patch would be more complete with the following change that ensures
> > > that DRCONF_MEM_HOTREMOVABLE flag is set for non-boot-time hotplugged
> > > memory too. This will ensure that ibm,dynamic-memory-vN property
> > > reflects the right flags value for memory that gets hotplugged
> > > post boot.
> > > 
> > 
> > You just sent that on a separated patchset, so I think it's dealt with.
> > Do you have any other comments on the present patch?
> 
> None, thanks.
> 
> Regards,
> Bharata.
> 

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

^ permalink raw reply

* Re: [PATCH vdsotest] Use vdso wrapper for gettimeofday()
From: Christophe Leroy @ 2020-04-07 16:11 UTC (permalink / raw)
  To: Nathan Lynch; +Cc: Thomas Gleixner, linuxppc-dev, linux-kernel
In-Reply-To: <871rrzjq5j.fsf@linux.ibm.com>

Hi Nathan,

Le 16/01/2020 à 17:56, Nathan Lynch a écrit :
> Hi Christophe,
> 
> Christophe Leroy <christophe.leroy@c-s.fr> writes:
>> To properly handle errors returned by gettimeofday(), the
>> DO_VDSO_CALL() macro has to be used, otherwise vdsotest
>> misinterpret VDSO function return on error.
>>
>> This has gone unnoticed until now because the powerpc VDSO
>> gettimeofday() always succeed, but while porting powerpc to
>> generic C VDSO, the following has been encountered:
> 
> Thanks for this, I'll review it soon.
> 
> Can you point me to patches for the powerpc generic vdso work?
> 

I have not seen any update on the vdsotest repository, have you been 
able to have a look at the patch ?

Thanks
Christophe

^ permalink raw reply

* Re: [PATCH V2 0/3] mm/debug: Add more arch page table helper tests
From: Gerald Schaefer @ 2020-04-07 15:54 UTC (permalink / raw)
  To: Anshuman Khandual
  Cc: linux-doc, Heiko Carstens, linux-mm, Paul Mackerras,
	H. Peter Anvin, linux-riscv, Will Deacon, linux-arch, linux-s390,
	Jonathan Corbet, x86, Mike Rapoport, Christian Borntraeger,
	Ingo Molnar, Gerald Schaefer, Catalin Marinas, linux-snps-arc,
	Vasily Gorbik, Borislav Petkov, Paul Walmsley,
	Kirill A . Shutemov, Thomas Gleixner, linux-arm-kernel,
	Vineet Gupta, linux-kernel, Palmer Dabbelt, Andrew Morton,
	linuxppc-dev
In-Reply-To: <e3e35885-6852-16aa-3889-e22750a0cc87@arm.com>

On Sun, 5 Apr 2020 17:58:14 +0530
Anshuman Khandual <anshuman.khandual@arm.com> wrote:

[...]
> > 
> > Could be fixed like this (the first de-reference is a bit special,
> > because at that point *ptep does not really point to a large (pmd) entry
> > yet, it is initially an invalid pte entry, which breaks our huge_ptep_get()  
> 
> There seems to be an inconsistency on s390 platform. Even though it defines
> a huge_ptep_get() override, it does not subscribe __HAVE_ARCH_HUGE_PTEP_GET
> which should have forced it fallback on generic huge_ptep_get() but it does
> not :) Then I realized that __HAVE_ARCH_HUGE_PTEP_GET only makes sense when
> an arch uses <asm-generic/hugetlb.h>. s390 does not use that and hence gets
> away with it's own huge_ptep_get() without __HAVE_ARCH_HUGE_PTEP_GET. Sounds
> confusing ? But I might not have the entire context here.

Yes, that sounds very confusing. Also a bit ironic, since huge_ptep_get()
was initially introduced because of s390, and now we don't select
__HAVE_ARCH_HUGE_PTEP_GET...

As you realized, I guess this is because we do not use generic hugetlb.h.
And when __HAVE_ARCH_HUGE_PTEP_GET was introduced with commit 544db7597ad
("hugetlb: introduce generic version of huge_ptep_get"), that was probably
the reason why we did not get our share of __HAVE_ARCH_HUGE_PTEP_GET.

Nothing really wrong with that, but yes, very confusing. Maybe we could
also select it for s390, even though it wouldn't have any functional
impact (so far), just for less confusion. Maybe also thinking about
using the generic hugetlb.h, not sure if the original reasons for not
doing so would still apply. Now I only need to find the time...

> 
> > conversion logic. I also added PMD_MASK alignment for RANDOM_ORVALUE,
> > because we do have some special bits there in our large pmds. It seems
> > to also work w/o that alignment, but it feels a bit wrong):  
> 
> Sure, we can accommodate that.
> 
> > 
> > @@ -731,26 +731,26 @@ static void __init hugetlb_advanced_test
> >                                           unsigned long vaddr, pgprot_t prot)
> >  {
> >         struct page *page = pfn_to_page(pfn);
> > -       pte_t pte = READ_ONCE(*ptep);
> > +       pte_t pte;
> > 
> > -       pte = __pte(pte_val(pte) | RANDOM_ORVALUE);
> > +       pte = pte_mkhuge(mk_pte_phys(RANDOM_ORVALUE & PMD_MASK, prot));  
> 
> So that keeps the existing value in 'ptep' pointer at bay and instead
> construct a PTE from scratch. I would rather have READ_ONCE(*ptep) at
> least provide the seed that can be ORed with RANDOM_ORVALUE before
> being masked with PMD_MASK. Do you see any problem ?

Yes, unfortunately. The problem is that the resulting pte is not marked
as present. The conversion pte -> (huge) pmd, which is done in
set_huge_pte_at() for s390, will establish an empty pmd for non-present
ptes, all the RANDOM_ORVALUE stuff is lost. And a subsequent
huge_ptep_get() will not result in the same original pte value. If you
want to preserve and check the RANDOM_ORVALUE, it has to be a present
pte, hence the mk_pte(_phys).

> 
> Some thing like this instead.
> 
> pte_t pte = READ_ONCE(*ptep);
> pte = pte_mkhuge(__pte((pte_val(pte) | RANDOM_ORVALUE) & PMD_MASK));
> 
> We cannot use mk_pte_phys() as it is defined only on some platforms
> without any generic fallback for others.

Oh, didn't know that, sorry. What about using mk_pte() instead, at least
it would result in a present pte:

pte = pte_mkhuge(mk_pte(phys_to_page(RANDOM_ORVALUE & PMD_MASK), prot));

And if you also want to do some with the existing value, which seems
to be an empty pte, then maybe just check if writing and reading that
value with set_huge_pte_at() / huge_ptep_get() returns the same,
i.e. initially w/o RANDOM_ORVALUE.

So, in combination, like this (BTW, why is the barrier() needed, it
is not used for the other set_huge_pte_at() calls later?):

@@ -733,24 +733,28 @@ static void __init hugetlb_advanced_test
        struct page *page = pfn_to_page(pfn);
        pte_t pte = READ_ONCE(*ptep);
 
-       pte = __pte(pte_val(pte) | RANDOM_ORVALUE);
+       set_huge_pte_at(mm, vaddr, ptep, pte);
+       WARN_ON(!pte_same(pte, huge_ptep_get(ptep)));
+
+       pte = pte_mkhuge(mk_pte(phys_to_page(RANDOM_ORVALUE & PMD_MASK), prot));
        set_huge_pte_at(mm, vaddr, ptep, pte);
        barrier();
        WARN_ON(!pte_same(pte, huge_ptep_get(ptep)));

This would actually add a new test "write empty pte with
set_huge_pte_at(), then verify with huge_ptep_get()", which happens
to trigger a warning on s390 :-)

That (new) warning actually points to misbehavior on s390, we do not
write a correct empty pmd in this case, but one that is empty and also
marked as large. huge_ptep_get() will then not correctly recognize it
as empty and do wrong conversion. It is also not consistent with
huge_ptep_get_and_clear(), where we write the empty pmd w/o marking
as large. Last but not least it would also break our pmd_protnone()
logic (see below). Another nice finding on s390 :-)

I don't think this has any effect in practice (yet), but I will post a
fix for that, just in case you will add / change this test.

> 
> >         set_huge_pte_at(mm, vaddr, ptep, pte);
> >         barrier();
> >         WARN_ON(!pte_same(pte, huge_ptep_get(ptep)));
> >         huge_pte_clear(mm, vaddr, ptep, PMD_SIZE);
> > -       pte = READ_ONCE(*ptep);
> > +       pte = huge_ptep_get(ptep);
> >         WARN_ON(!huge_pte_none(pte));
> >  
> >         pte = mk_huge_pte(page, prot);
> >         set_huge_pte_at(mm, vaddr, ptep, pte);
> >         huge_ptep_set_wrprotect(mm, vaddr, ptep);
> > -       pte = READ_ONCE(*ptep);
> > +       pte = huge_ptep_get(ptep);
> >         WARN_ON(huge_pte_write(pte));
> >  
> >         pte = mk_huge_pte(page, prot);
> >         set_huge_pte_at(mm, vaddr, ptep, pte);
> >         huge_ptep_get_and_clear(mm, vaddr, ptep);
> > -       pte = READ_ONCE(*ptep);
> > +       pte = huge_ptep_get(ptep);
> >         WARN_ON(!huge_pte_none(pte));
> >  
> >         pte = mk_huge_pte(page, prot);
> > @@ -759,7 +759,7 @@ static void __init hugetlb_advanced_test
> >         pte = huge_pte_mkwrite(pte);
> >         pte = huge_pte_mkdirty(pte);
> >         huge_ptep_set_access_flags(vma, vaddr, ptep, pte, 1);
> > -       pte = READ_ONCE(*ptep);
> > +       pte = huge_ptep_get(ptep);
> >         WARN_ON(!(huge_pte_write(pte) && huge_pte_dirty(pte)));
> >  }
> >  #else
> > 
> > 3) The pmd_protnone_tests() has an issue, because it passes a pmd to
> > pmd_protnone() which has not been marked as large. We check for large
> > pmd in the s390 implementation of pmd_protnone(), and will fail if a
> > pmd is not large. We had similar issues before, in other helpers, where
> > I changed the logic on s390 to not require the pmd large check, but I'm
> > not so sure in this case. Is there a valid use case for doing
> > pmd_protnone() on "normal" pmds? Or could this be changed like this:  
> 
> That is a valid question. IIUC, all existing callers for pmd_protnone()
> ensure that it is indeed a huge PMD. But even assuming otherwise should
> not the huge PMD requirement get checked in the caller itself rather than
> in the arch helper which is just supposed to check the existence of the
> dedicated PTE bit(s) for this purpose. Purely from a helper perspective
> pmd_protnone() should not really care about being large even though it
> might never get used without one.
> 
> Also all platforms (except s390) derive the pmd_protnone() from their
> respective pte_protnone(). I wonder why should s390 be any different
> unless it is absolutely necessary.

This is again because of our different page table entry layouts for
pte/pmd and (large) pmd. The bits we check for pmd_protnone() are
not valid for normal pmd/pte, and we would return undefined result for
normal entries.

Of course, we could rely on nobody calling pmd_protnone() on normal
pmds, but in this case we also use pmd_large() check in pmd_protnone()
for indication if the pmd is present. W/o that, we would return
true for empty pmds, that doesn't sound right. Not sure if we also
want to rely on nobody calling pmd_protnone() on empty pmds.

Anyway, if in practice it is not correct to use pmd_protnone()
on normal pmds, then I would suggest that your tests should also
not do / test it. And I strongly assume that it is not correct, at
least I cannot think of a valid case, and of course s390 would
already be broken if there was such a case.

Regards,
Gerald


^ permalink raw reply


This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox