Skip to content
  1. Oct 22, 2021
  2. Oct 14, 2021
    • Christophe Leroy's avatar
      powerpc: Mark .opd section read-only · 3091f5fc
      Christophe Leroy authored
      
      
      .opd section contains function descriptors used to locate
      functions in the kernel. If someone is able to modify a
      function descriptor he will be able to run arbitrary
      kernel function instead of another.
      
      To avoid that, move .opd section inside read-only memory.
      
      Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/3cd40b682fb6f75bb40947b55ca0bac20cb3f995.1634136222.git.christophe.leroy@csgroup.eu
      3091f5fc
    • Athira Rajeev's avatar
      powerpc/perf: Fix cycles/instructions as PM_CYC/PM_INST_CMPL in power10 · 8f6aca0e
      Athira Rajeev authored
      On power9 and earlier platforms, the default event used for cyles and
      instructions is PM_CYC (0x0001e) and PM_INST_CMPL (0x00002)
      respectively. These events use two programmable PMCs and by default will
      count irrespective of the run latch state (idle state). But since they
      use programmable PMCs, these events can lead to multiplexing with other
      events, because there are only 4 programmable PMCs. Hence in power10,
      performance monitoring unit (PMU) driver uses performance monitor
      counter 5 (PMC5) and performance monitor counter6 (PMC6) for counting
      instructions and cycles.
      
      Currently on power10, the event used for cycles is PM_RUN_CYC (0x600F4)
      and instructions uses PM_RUN_INST_CMPL (0x500fa). But counting of these
      events in idle state is controlled by the CC56RUN bit setting in Monitor
      Mode Control Register0 (MMCR0). If the CC56RUN bit is zero, PMC5/6 will
      not count when CTRL[RUN] (run latch) is zero. This could lead to missing
      some counts if a thread is in idle state during system wide profiling.
      
      To fix it, set the CC56RUN bit in MMCR0 for power10, which makes PMC5
      and PMC6 count instructions and cycles regardless of the run latch
      state. Since this change make PMC5/6 count as PM_INST_CMPL/PM_CYC,
      rename the event code 0x600f4 as PM_CYC instead of PM_RUN_CYC and event
      code 0x500fa as PM_INST_CMPL instead of PM_RUN_INST_CMPL. The changes
      are only for PMC5/6 event codes and will not affect the behaviour of
      PM_RUN_CYC/PM_RUN_INST_CMPL if progammed in other PMC's.
      
      Fixes: a64e697c
      
       ("powerpc/perf: power10 Performance Monitoring support")
      Signed-off-by: default avatarAthira Rajeev <atrajeev@linux.vnet.ibm.cm>
      Reviewed-by: default avatarMadhavan Srinivasan <maddy@linux.ibm.com>
      [mpe: Tweak change log wording for style and consistency]
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20211007075121.28497-1-atrajeev@linux.vnet.ibm.com
      8f6aca0e
  3. Oct 13, 2021
    • Kai Song's avatar
      powerpc/eeh: Fix docstrings in eeh.c · b616230e
      Kai Song authored
      
      
      We fix the following warnings when building kernel with W=1:
      arch/powerpc/kernel/eeh.c:598: warning: Function parameter or member 'function' not described in 'eeh_pci_enable'
      arch/powerpc/kernel/eeh.c:774: warning: Function parameter or member 'edev' not described in 'eeh_set_dev_freset'
      arch/powerpc/kernel/eeh.c:774: warning: expecting prototype for eeh_set_pe_freset(). Prototype was for eeh_set_dev_freset() instead
      arch/powerpc/kernel/eeh.c:814: warning: Function parameter or member 'include_passed' not described in 'eeh_pe_reset_full'
      arch/powerpc/kernel/eeh.c:944: warning: Function parameter or member 'ops' not described in 'eeh_init'
      arch/powerpc/kernel/eeh.c:1451: warning: Function parameter or member 'include_passed' not described in 'eeh_pe_reset'
      arch/powerpc/kernel/eeh.c:1526: warning: Function parameter or member 'func' not described in 'eeh_pe_inject_err'
      arch/powerpc/kernel/eeh.c:1526: warning: Excess function parameter 'function' described in 'eeh_pe_inject_err'
      
      Signed-off-by: default avatarKai Song <songkai01@inspur.com>
      Reviewed-by: default avatarDaniel Axtens <dja@axtens.net>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20211009041630.4135-1-songkai01@inspur.com
      b616230e
    • Cédric Le Goater's avatar
      powerpc/boot: Use CONFIG_PPC_POWERNV to compile OPAL support · 6ffeb56e
      Cédric Le Goater authored
      
      
      CONFIG_PPC64_BOOT_WRAPPER is selected by CPU_LITTLE_ENDIAN which is
      used to compile support for other platforms such as Microwatt. There
      is no need for OPAL calls on these.
      
      Signed-off-by: default avatarCédric Le Goater <clg@kaod.org>
      Reviewed-by: default avatarJoel Stanley <joel@jms.id.au>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20211011070356.99952-1-clg@kaod.org
      6ffeb56e
    • Christophe Leroy's avatar
      powerpc: Set max_mapnr correctly · 602946ec
      Christophe Leroy authored
      
      
      max_mapnr is used by virt_addr_valid() to check if a linear
      address is valid.
      
      It must only include lowmem PFNs, like other architectures.
      
      Problem detected on a system with 1G mem (Only 768M are mapped), with
      CONFIG_DEBUG_VIRTUAL and CONFIG_TEST_DEBUG_VIRTUAL, it didn't report
      virt_to_phys(VMALLOC_START), VMALLOC_START being 0xf1000000.
      
      Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/77d99037782ac4b3c3b0124fc4ae80ce7b760b05.1634035228.git.christophe.leroy@csgroup.eu
      602946ec
  4. Oct 12, 2021
  5. Oct 08, 2021
    • Nathan Lynch's avatar
      powerpc/pseries/cpuhp: remove obsolete comment from pseries_cpu_die · f9473a65
      Nathan Lynch authored
      
      
      This comment likely refers to the obsolete DLPAR workflow where some
      resource state transitions were driven more directly from user space
      utilities, but it also seems to contradict itself: "Change isolate state to
      Isolate [...]" is at odds with the preceding sentences, and it does not
      relate at all to the code that follows.
      
      Remove it to prevent confusion.
      
      Signed-off-by: default avatarNathan Lynch <nathanl@linux.ibm.com>
      Reviewed-by: default avatarDaniel Henrique Barboza <danielhb413@gmail.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20210927201933.76786-5-nathanl@linux.ibm.com
      f9473a65
    • Nathan Lynch's avatar
      powerpc/pseries/cpuhp: delete add/remove_by_count code · fa2a5dfe
      Nathan Lynch authored
      The core DLPAR code supports two actions (add and remove) and three
      subtypes of action:
      
      * By DRC index: the action is attempted on a single specified resource.
        This is the usual case for processors.
      * By indexed count: the action is attempted on a range of resources
        beginning at the specified index. This is implemented only by the memory
        DLPAR code.
      * By count: the lower layer (CPU or memory) is responsible for locating the
        specified number of resources to which the action can be applied.
      
      I cannot find any evidence of the "by count" subtype being used by drmgr or
      qemu for processors. And when I try to exercise this code, the add case
      does not work:
      
        $ ppc64_cpu --smt ; nproc
        SMT=8
        24
        $ printf "cpu remove count 2" > /sys/kernel/dlpar
        $ nproc
        8
        $ printf "cpu add count 2" > /sys/kernel/dlpar
        -bash: printf: write error: Invalid argument
        $ dmesg | tail -2
        pseries-hotplug-cpu: Failed to find enough CPUs (1 of 2) to add
        dlpar: Could not handle DLPAR request "cpu add count 2"
        $ nproc
        8
        $ drmgr -c cpu -a -q 2         # this uses the by-index method
        Validating CPU DLPAR capability...yes.
        CPU 1
        CPU 17
        $ nproc
        24
      
      This is because find_drc_info_cpus_to_add() does not increment drc_index
      appropriately during its search.
      
      This is not hard to fix. But the _by_count() functions also have the
      property that they attempt to roll back all prior operations if the entire
      request cannot be satisfied, even though the rollback itself can encounter
      errors. It's not possible to provide transaction-like behavior at this
      level, and it's undesirable to have code that can only pretend to do that.
      Any users of these functions cannot know what the state of the system is in
      the error case. And the error paths are, to my knowledge, impossible to
      test without adding custom error injection code.
      
      Summary:
      
      * This code has not worked reliably since its introduction.
      * There is no evidence that it is used.
      * It contains questionable rollback behaviors in error paths which are
        difficult to test.
      
      So let's remove it.
      
      Fixes: ac713800 ("powerpc/pseries: Add CPU dlpar remove functionality")
      Fixes: 90edf184 ("powerpc/pseries: Add CPU dlpar add functionality")
      Fixes: b015f6bc
      
       ("powerpc/pseries: Add cpu DLPAR support for drc-info property")
      Signed-off-by: default avatarNathan Lynch <nathanl@linux.ibm.com>
      Tested-by: default avatarDaniel Henrique Barboza <danielhb413@gmail.com>
      Reviewed-by: default avatarDaniel Henrique Barboza <danielhb413@gmail.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20210927201933.76786-4-nathanl@linux.ibm.com
      fa2a5dfe
    • Nathan Lynch's avatar
      powerpc/cpuhp: BUG -> WARN conversion in offline path · 983f9101
      Nathan Lynch authored
      
      
      If, due to bugs elsewhere, we get into unregister_cpu_online() with a CPU
      that isn't marked hotpluggable, we can emit a warning and return an
      appropriate error instead of crashing.
      
      Signed-off-by: default avatarNathan Lynch <nathanl@linux.ibm.com>
      Reviewed-by: default avatarDaniel Henrique Barboza <danielhb413@gmail.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20210927201933.76786-3-nathanl@linux.ibm.com
      983f9101
    • Nathan Lynch's avatar
      powerpc/pseries/cpuhp: cache node corrections · 7edd5c9a
      Nathan Lynch authored
      On pseries, cache nodes in the device tree can be added and removed by the
      CPU DLPAR code as well as the partition migration (mobility) code. PowerVM
      partitions in dedicated processor mode typically have L2 and L3 cache
      nodes.
      
      The CPU DLPAR code has the following shortcomings:
      
      * Cache nodes returned as siblings of a new CPU node by
        ibm,configure-connector are silently discarded; only the CPU node is
        added to the device tree.
      
      * Cache nodes which become unreferenced in the processor removal path are
        not removed from the device tree. This can lead to duplicate nodes when
        the post-migration device tree update code replaces cache nodes.
      
      This is long-standing behavior. Presumably it has gone mostly unnoticed
      because the two bugs have the property of obscuring each other in common
      simple scenarios (e.g. remove a CPU and add it back). Likely you'd notice
      only if you cared to inspect the device tree or the sysfs cacheinfo
      information.
      
      Booted with two processors:
      
        $ pwd
        /sys/firmware/devicetree/base/cpus
        $ ls -1d */
        l2-cache@2010/
        l2-cache@2011/
        l3-cache@3110/
        l3-cache@3111/
        PowerPC,POWER9@0/
        PowerPC,POWER9@8/
        $ lsprop */l2-cache
        l2-cache@2010/l2-cache
                       00003110 (12560)
        l2-cache@2011/l2-cache
                       00003111 (12561)
        PowerPC,POWER9@0/l2-cache
                       00002010 (8208)
        PowerPC,POWER9@8/l2-cache
                       00002011 (8209)
        $ ls /sys/devices/system/cpu/cpu0/cache/
        index0  index1  index2  index3
      
      After DLPAR-adding PowerPC,POWER9@10, we see that its associated cache
      nodes are absent, its threads' L2+L3 cacheinfo is unpopulated, and it is
      missing a cache level in its sched domain hierarchy:
      
        $ ls -1d */
        l2-cache@2010/
        l2-cache@2011/
        l3-cache@3110/
        l3-cache@3111/
        PowerPC,POWER9@0/
        PowerPC,POWER9@10/
        PowerPC,POWER9@8/
        $ lsprop PowerPC\,POWER9@10/l2-cache
        PowerPC,POWER9@10/l2-cache
                       00002012 (8210)
        $ ls /sys/devices/system/cpu/cpu16/cache/
        index0  index1
        $ grep . /sys/kernel/debug/sched/domains/cpu{0,8,16}/domain*/name
        /sys/kernel/debug/sched/domains/cpu0/domain0/name:SMT
        /sys/kernel/debug/sched/domains/cpu0/domain1/name:CACHE
        /sys/kernel/debug/sched/domains/cpu0/domain2/name:DIE
        /sys/kernel/debug/sched/domains/cpu8/domain0/name:SMT
        /sys/kernel/debug/sched/domains/cpu8/domain1/name:CACHE
        /sys/kernel/debug/sched/domains/cpu8/domain2/name:DIE
        /sys/kernel/debug/sched/domains/cpu16/domain0/name:SMT
        /sys/kernel/debug/sched/domains/cpu16/domain1/name:DIE
      
      When removing PowerPC,POWER9@8, we see that its cache nodes are left
      behind:
      
        $ ls -1d */
        l2-cache@2010/
        l2-cache@2011/
        l3-cache@3110/
        l3-cache@3111/
        PowerPC,POWER9@0/
      
      When DLPAR is combined with VM migration, we can get duplicate nodes. E.g.
      removing one processor, then migrating, adding a processor, and then
      migrating again can result in warnings from the OF core during
      post-migration device tree updates:
      
        Duplicate name in cpus, renamed to "l2-cache@2011#1"
        Duplicate name in cpus, renamed to "l3-cache@3111#1"
      
      and nodes with duplicated phandles in the tree, making lookup behavior
      unpredictable:
      
        $ lsprop l[23]-cache@*/ibm,phandle
        l2-cache@2010/ibm,phandle
                         00002010 (8208)
        l2-cache@2011#1/ibm,phandle
                         00002011 (8209)
        l2-cache@2011/ibm,phandle
                         00002011 (8209)
        l3-cache@3110/ibm,phandle
                         00003110 (12560)
        l3-cache@3111#1/ibm,phandle
                         00003111 (12561)
        l3-cache@3111/ibm,phandle
                         00003111 (12561)
      
      Address these issues by:
      
      * Correctly processing siblings of the node returned from
        dlpar_configure_connector().
      * Removing cache nodes in the CPU remove path when it can be determined
        that they are not associated with other CPUs or caches.
      
      Use the of_changeset API in both cases, which allows us to keep the error
      handling in this code from becoming more complex while ensuring that the
      device tree cannot become inconsistent.
      
      Fixes: ac713800 ("powerpc/pseries: Add CPU dlpar remove functionality")
      Fixes: 90edf184
      
       ("powerpc/pseries: Add CPU dlpar add functionality")
      Signed-off-by: default avatarNathan Lynch <nathanl@linux.ibm.com>
      Tested-by: default avatarDaniel Henrique Barboza <danielhb413@gmail.com>
      Reviewed-by: default avatarDaniel Henrique Barboza <danielhb413@gmail.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20210927201933.76786-2-nathanl@linux.ibm.com
      7edd5c9a
    • Nathan Lynch's avatar
      powerpc/paravirt: correct preempt debug splat in vcpu_is_preempted() · fda0eb22
      Nathan Lynch authored
      vcpu_is_preempted() can be used outside of preempt-disabled critical
      sections, yielding warnings such as:
      
      BUG: using smp_processor_id() in preemptible [00000000] code: systemd-udevd/185
      caller is rwsem_spin_on_owner+0x1cc/0x2d0
      CPU: 1 PID: 185 Comm: systemd-udevd Not tainted 5.15.0-rc2+ #33
      Call Trace:
      [c000000012907ac0] [c000000000aa30a8] dump_stack_lvl+0xac/0x108 (unreliable)
      [c000000012907b00] [c000000001371f70] check_preemption_disabled+0x150/0x160
      [c000000012907b90] [c0000000001e0e8c] rwsem_spin_on_owner+0x1cc/0x2d0
      [c000000012907be0] [c0000000001e1408] rwsem_down_write_slowpath+0x478/0x9a0
      [c000000012907ca0] [c000000000576cf4] filename_create+0x94/0x1e0
      [c000000012907d10] [c00000000057ac08] do_symlinkat+0x68/0x1a0
      [c000000012907d70] [c00000000057ae18] sys_symlink+0x58/0x70
      [c000000012907da0] [c00000000002e448] system_call_exception+0x198/0x3c0
      [c000000012907e10] [c00000000000c54c] system_call_common+0xec/0x250
      
      The result of vcpu_is_preempted() is always used speculatively, and the
      function does not access per-cpu resources in a (Linux) preempt-unsafe way.
      Use raw_smp_processor_id() to avoid such warnings, adding explanatory
      comments.
      
      Fixes: ca3f969d
      
       ("powerpc/paravirt: Use is_kvm_guest() in vcpu_is_preempted()")
      Signed-off-by: default avatarNathan Lynch <nathanl@linux.ibm.com>
      Reviewed-by: default avatarSrikar Dronamraju <srikar@linux.vnet.ibm.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20210928214147.312412-3-nathanl@linux.ibm.com
      fda0eb22
    • Nathan Lynch's avatar
      powerpc/paravirt: vcpu_is_preempted() commentary · 799f9b51
      Nathan Lynch authored
      
      
      Add comments more clearly documenting that this function determines whether
      hypervisor-level preemption of the VM has occurred.
      
      Signed-off-by: default avatarNathan Lynch <nathanl@linux.ibm.com>
      Reviewed-by: default avatarSrikar Dronamraju <srikar@linux.vnet.ibm.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20210928214147.312412-2-nathanl@linux.ibm.com
      799f9b51
    • Nathan Lynch's avatar
      powerpc: fix unbalanced node refcount in check_kvm_guest() · 56537faf
      Nathan Lynch authored
      When check_kvm_guest() succeeds in looking up a /hypervisor OF node, it
      returns without performing a matching put for the lookup, leaving the
      node's reference count elevated.
      
      Add the necessary call to of_node_put(), rearranging the code slightly to
      avoid repetition or goto.
      
      Fixes: 107c5500
      
       ("powerpc/pseries: Add KVM guest doorbell restrictions")
      Signed-off-by: default avatarNathan Lynch <nathanl@linux.ibm.com>
      Reviewed-by: default avatarSrikar Dronamraju <srikar@linux.vnet.ibm.com>
      Reviewed-by: default avatarTyrel Datwyler <tyreld@linux.ibm.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20210928124550.132020-1-nathanl@linux.ibm.com
      56537faf
    • Christophe Leroy's avatar
      video: fbdev: chipsfb: use memset_io() instead of memset() · f2719b26
      Christophe Leroy authored
      While investigating a lockup at startup on Powerbook 3400C, it was
      identified that the fbdev driver generates alignment exception at
      startup:
      
        --- interrupt: 600 at memset+0x60/0xc0
        NIP:  c0021414 LR: c03fc49c CTR: 00007fff
        REGS: ca021c10 TRAP: 0600   Tainted: G        W          (5.14.2-pmac-00727-g12a41fa69492)
        MSR:  00009032 <EE,ME,IR,DR,RI>  CR: 44008442  XER: 20000100
        DAR: cab80020 DSISR: 00017c07
        GPR00: 00000007 ca021cd0 c14412e0 cab80000 00000000 00100000 cab8001c 00000004
        GPR08: 00100000 00007fff 00000000 00000000 84008442 00000000 c0006fb4 00000000
        GPR16: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00100000
        GPR24: 00000000 81800000 00000320 c15fa400 c14d1878 00000000 c14d1800 c094e19c
        NIP [c0021414] memset+0x60/0xc0
        LR [c03fc49c] chipsfb_pci_init+0x160/0x580
        --- interrupt: 600
        [ca021cd0] [c03fc46c] chipsfb_pci_init+0x130/0x580 (unreliable)
        [ca021d20] [c03a3a70] pci_device_probe+0xf8/0x1b8
        [ca021d50] [c043d584] really_probe.part.0+0xac/0x388
        [ca021d70] [c043d914] __driver_probe_device+0xb4/0x170
        [ca021d90] [c043da18] driver_probe_device+0x48/0x144
        [ca021dc0] [c043e318] __driver_attach+0x11c/0x1c4
        [ca021de0] [c043ad30] bus_for_each_dev+0x88/0xf0
        [ca021e10] [c043c724] bus_add_driver+0x190/0x22c
        [ca021e40] [c043ee94] driver_register+0x9c/0x170
        [ca021e60] [c0006c28] do_one_initcall+0x54/0x1ec
        [ca021ed0] [c08246e4] kernel_init_freeable+0x1c0/0x270
        [ca021f10] [c0006fdc] kernel_init+0x28/0x11c
        [ca021f30] [c0017148] ret_from_kernel_thread+0x14/0x1c
        Instruction dump:
        7d4601a4 39490777 7d4701a4 39490888 7d4801a4 39490999 7d4901a4 39290aaa
        7d2a01a4 4c00012c 4bfffe88 0fe00000 <4bfffe80> 9421fff0 38210010 48001970
      
      This is due to 'dcbz' instruction being used on non-cached memory.
      'dcbz' instruction is used by memset() to zeroize a complete
      cacheline at once, and memset() is not expected to be used on non
      cached memory.
      
      When performing a 'sparse' check on fbdev driver, it also appears
      that the use of memset() is unexpected:
      
        drivers/video/fbdev/chipsfb.c:334:17: warning: incorrect type in argument 1 (different address spaces)
        drivers/video/fbdev/chipsfb.c:334:17:    expected void *
        drivers/video/fbdev/chipsfb.c:334:17:    got char [noderef] __iomem *screen_base
        drivers/video/fbdev/chipsfb.c:334:15: warning: memset with byte count of 1048576
      
      Use fb_memset() instead of memset(). fb_memset() is defined as
      memset_io() for powerpc.
      
      Fixes: 8c870933
      
       ("[PATCH] ppc32: Remove CONFIG_PMAC_PBOOK")
      Reported-by: default avatarStan Johnson <userm57@yahoo.com>
      Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/884a54f1e5cb774c1d9b4db780209bee5d4f6718.1631712563.git.christophe.leroy@csgroup.eu
      f2719b26
    • Vasant Hegde's avatar
      powerpc/powernv/dump: Fix typo in comment · ee878437
      Vasant Hegde authored
      
      
      Signed-off-by: default avatarVasant Hegde <hegdevasant@linux.vnet.ibm.com>
      Reviewed-by: default avatarJoel Stanley <joel@jms.id.au>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20210914143802.54325-1-hegdevasant@linux.vnet.ibm.com
      ee878437
    • Nick Desaulniers's avatar
      powerpc/asm: Remove UPD_CONSTR after GCC 4.9 removal · 2a24d80f
      Nick Desaulniers authored
      UPD_CONSTR was previously a preprocessor define for an old GCC 4.9
      inline asm bug with m<> constraints.
      
      Fixes: 6563139d
      
       ("powerpc: remove GCC version check for UPD_CONSTR")
      Suggested-by: default avatarNathan Chancellor <nathan@kernel.org>
      Suggested-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
      Suggested-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Signed-off-by: default avatarNick Desaulniers <ndesaulniers@google.com>
      Reviewed-by: default avatarNathan Chancellor <nathan@kernel.org>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20210914161712.2463458-1-ndesaulniers@google.com
      2a24d80f
    • Christophe Leroy's avatar
      powerpc/mem: Fix arch/powerpc/mm/mem.c:53:12: error: no previous prototype for... · 7eff9bc0
      Christophe Leroy authored
      powerpc/mem: Fix arch/powerpc/mm/mem.c:53:12: error: no previous prototype for 'create_section_mapping'
      
      Commit 8e11d62e ("powerpc/mem: Add back missing header to fix 'no
      previous prototype' error") was supposed to fix the problem, but in
      the meantime commit a927bd6b ("mm: fix phys_to_target_node() and*
      memory_add_physaddr_to_nid() exports") moved create_section_mapping()
      prototype from asm/sparsemem.h to asm/mmzone.h
      
      Fixes: 8e11d62e
      
       ("powerpc/mem: Add back missing header to fix 'no previous prototype' error")
      Reported-by: default avatarkernel test robot <lkp@intel.com>
      Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/025754fde3d027904ae9d0191f395890bec93369.1631541649.git.christophe.leroy@csgroup.eu
      
      7eff9bc0
    • Niklas Schnelle's avatar
      powerpc: Drop superfluous pci_dev_is_added() calls · 452f145e
      Niklas Schnelle authored
      
      
      On powerpc, pci_dev_is_added() is called as part of SR-IOV fixups
      that are done under pcibios_add_device() which in turn is only called in
      pci_device_add() whih is called when a PCI device is scanned.
      
      pci_dev_assign_added() is called in pci_bus_add_device() which is only
      called after scanning the device. Thus pci_dev_is_added() is always
      false and can be dropped.
      
      Signed-off-by: default avatarNiklas Schnelle <schnelle@linux.ibm.com>
      Reviewed-by: default avatarBjorn Helgaas <bhelgaas@google.com>
      Reviewed-by: default avatarOliver O'Halloran <oohall@gmail.com>
      [mpe: Tweak change log slightly to reflect Oliver's comments]
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20210910141940.2598035-2-schnelle@linux.ibm.com
      452f145e
    • Christophe Leroy's avatar
      powerpc/powermac: Remove stale declaration of pmac_md · 9d7fb064
      Christophe Leroy authored
      pmac_md doesn't exist anymore, remove stall declaration.
      
      Fixes: e8222502
      
       ("[PATCH] powerpc: Kill _machine and hard-coded platform numbers")
      Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/b2e52934e5a500f149e6d94db3cfa0569bc35081.1630657402.git.christophe.leroy@csgroup.eu
      9d7fb064
    • Daniel Axtens's avatar
      powerpc: Remove unused prototype for of_show_percpuinfo · 93fa8e9d
      Daniel Axtens authored
      commit 6d7f58b0 ("[PATCH] powerpc: Some minor cleanups to setup_32.c")
      removed of_show_percpuinfo but didn't remove the prototype.
      
      Remove it.
      
      Fixes: 6d7f58b0
      
       ("[PATCH] powerpc: Some minor cleanups to setup_32.c")
      Signed-off-by: default avatarDaniel Axtens <dja@axtens.net>
      Reviewed-by: default avatarAndrew Donnellan <ajd@linux.ibm.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20210903063246.70691-1-dja@axtens.net
      93fa8e9d
    • Christophe Leroy's avatar
      powerpc/476: Fix sparse report · 494f238a
      Christophe Leroy authored
      Fix sparse errors:
        arch/powerpc/platforms/44x/ppc476.c:236:17: warning: cast removes address space '__iomem' of expression
        arch/powerpc/platforms/44x/ppc476.c:241:34: warning: incorrect type in argument 1 (different address spaces)
        arch/powerpc/platforms/44x/ppc476.c:241:34:    expected void const volatile [noderef] __iomem *addr
        arch/powerpc/platforms/44x/ppc476.c:241:34:    got unsigned char [usertype] *
        arch/powerpc/platforms/44x/ppc476.c:243:17: warning: incorrect type in argument 1 (different address spaces)
        arch/powerpc/platforms/44x/ppc476.c:243:17:    expected void volatile [noderef] __iomem *addr
        arch/powerpc/platforms/44x/ppc476.c:243:17:    got unsigned char [usertype] *[assigned] fpga
      
      Mark 'fpga' pointer as __iomem.
      
      Fixes: ab9a4183
      
       ("powerpc: Update currituck pci/usb fixup for new board revision")
      Reported-by: default avatarkernel test robot <lkp@intel.com>
      Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
      Reviewed-by: default avatarAlistair Popple <alistair@popple.id.au>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/aa6055769b92a5d8685b8d0adab99c48a0b0ef4b.1631956926.git.christophe.leroy@csgroup.eu
      494f238a
    • Xiaoming Ni's avatar
      powerpc/85xx: fix timebase sync issue when CONFIG_HOTPLUG_CPU=n · c45361ab
      Xiaoming Ni authored
      When CONFIG_SMP=y, timebase synchronization is required when the second
      kernel is started.
      
      arch/powerpc/kernel/smp.c:
        int __cpu_up(unsigned int cpu, struct task_struct *tidle)
        {
        	...
        	if (smp_ops->give_timebase)
        		smp_ops->give_timebase();
        	...
        }
      
        void start_secondary(void *unused)
        {
        	...
        	if (smp_ops->take_timebase)
        		smp_ops->take_timebase();
        	...
        }
      
      When CONFIG_HOTPLUG_CPU=n and CONFIG_KEXEC_CORE=n,
       smp_85xx_ops.give_timebase is NULL,
       smp_85xx_ops.take_timebase is NULL,
      As a result, the timebase is not synchronized.
      
      Timebase  synchronization does not depend on CONFIG_HOTPLUG_CPU.
      
      Fixes: 56f1ba28
      
       ("powerpc/mpc85xx: refactor the PM operations")
      Cc: stable@vger.kernel.org # v4.6+
      Signed-off-by: default avatarXiaoming Ni <nixiaoming@huawei.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20210929033646.39630-3-nixiaoming@huawei.com
      c45361ab
    • Xiaoming Ni's avatar
      powerpc/85xx: Fix oops when mpc85xx_smp_guts_ids node cannot be found · 3c2172c1
      Xiaoming Ni authored
      When the field described in mpc85xx_smp_guts_ids[] is not configured in
      dtb, the mpc85xx_setup_pmc() does not assign a value to the "guts"
      variable. As a result, the oops is triggered when
      mpc85xx_freeze_time_base() is executed.
      
      Fixes: 56f1ba28
      
       ("powerpc/mpc85xx: refactor the PM operations")
      Cc: stable@vger.kernel.org # v4.6+
      Signed-off-by: default avatarXiaoming Ni <nixiaoming@huawei.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20210929033646.39630-2-nixiaoming@huawei.com
      3c2172c1
    • Alexey Kardashevskiy's avatar
      powerps/pseries/dma: Add support for 2M IOMMU page size · 38727311
      Alexey Kardashevskiy authored
      
      
      The upcoming PAPR spec adds a 2M page size, bit 23 right after 16G page
      size in the "ibm,query-pe-dma-window" call.
      
      This adds support for the new page size. Since the new page size is out
      of sorted order, this changes the loop to not assume that shift[] is
      sorted.
      
      This has now been tested and is known to work on a pre-release version
      of phyp.
      
      Signed-off-by: default avatarAlexey Kardashevskiy <aik@ozlabs.ru>
      Reviewed-by: default avatarLeonardo Bras <leobras.c@gmail.com>
      Reviewed-by: default avatarFrederic Barrat <fbarrat@linux.ibm.com>
      Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
      Link: https://lore.kernel.org/r/20211006044735.1114669-1-aik@ozlabs.ru
      38727311
  6. Sep 20, 2021
    • Linus Torvalds's avatar
      Linux 5.15-rc2 · e4e737bb
      Linus Torvalds authored
      e4e737bb
    • Linus Torvalds's avatar
      pci_iounmap'2: Electric Boogaloo: try to make sense of it all · 316e8d79
      Linus Torvalds authored
      Nathan Chancellor reports that the recent change to pci_iounmap in
      commit 9caea000 ("parisc: Declare pci_iounmap() parisc version only
      when CONFIG_PCI enabled") causes build errors on arm64.
      
      It took me about two hours to convince myself that I think I know what
      the logic of that mess of #ifdef's in the <asm-generic/io.h> header file
      really aim to do, and rewrite it to be easier to follow.
      
      Famous last words.
      
      Anyway, the code has now been lifted from that grotty header file into
      lib/pci_iomap.c, and has fairly extensive comments about what the logic
      is.  It also avoids indirecting through another confusing (and badly
      named) helper function that has other preprocessor config conditionals.
      
      Let's see what odd architecture did something else strange in this area
      to break things.  But my arm64 cross build is clean.
      
      Fixes: 9caea000
      
       ("parisc: Declare pci_iounmap() parisc version only when CONFIG_PCI enabled")
      Reported-by: default avatarNathan Chancellor <nathan@kernel.org>
      Cc: Helge Deller <deller@gmx.de>
      Cc: Arnd Bergmann <arnd@arndb.de>
      Cc: Guenter Roeck <linux@roeck-us.net>
      Cc: Ulrich Teichert <krypton@ulrich-teichert.org>
      Cc: James Bottomley <James.Bottomley@hansenpartnership.com>
      Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
      316e8d79
    • Linus Torvalds's avatar
      Merge tag 'x86_urgent_for_v5.15_rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · 20621d2f
      Linus Torvalds authored
      Pull x86 fixes from Borislav Petkov:
      
       - Prevent a infinite loop in the MCE recovery on return to user space,
         which was caused by a second MCE queueing work for the same page and
         thereby creating a circular work list.
      
       - Make kern_addr_valid() handle existing PMD entries, which are marked
         not present in the higher level page table, correctly instead of
         blindly dereferencing them.
      
       - Pass a valid address to sanitize_phys(). This was caused by the
         mixture of inclusive and exclusive ranges. memtype_reserve() expect
         'end' being exclusive, but sanitize_phys() wants it inclusive. This
         worked so far, but with end being the end of the physical address
         space the fail is exposed.
      
       - Increase the maximum supported GPIO numbers for 64bit. Newer SoCs
         exceed the previous maximum.
      
      * tag 'x86_urgent_for_v5.15_rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        x86/mce: Avoid infinite loop for copy from user recovery
        x86/mm: Fix kern_addr_valid() to cope with existing but not present entries
        x86/platform: Increase maximum GPIO number for X86_64
        x86/pat: Pass valid address to sanitize_phys()
      20621d2f
    • Linus Torvalds's avatar
      Merge tag 'perf-urgent-2021-09-19' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip · fec30362
      Linus Torvalds authored
      Pull perf event fix from Thomas Gleixner:
       "A single fix for the perf core where a value read with READ_ONCE() was
        checked and then reread which makes all the checks invalid. Reuse the
        already read value instead"
      
      * tag 'perf-urgent-2021-09-19' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
        events: Reuse value read using READ_ONCE instead of re-reading it
      fec30362