1. 31 7月, 2019 40 次提交
    • L
      perf annotate: Fix dereferencing freed memory found by the smatch tool · 915945f3
      Leo Yan 提交于
      [ Upstream commit 600c787dbf6521d8d07ee717ab7606d5070103ea ]
      
      Based on the following report from Smatch, fix the potential
      dereferencing freed memory check.
      
        tools/perf/util/annotate.c:1125
        disasm_line__parse() error: dereferencing freed memory 'namep'
      
        tools/perf/util/annotate.c
        1100 static int disasm_line__parse(char *line, const char **namep, char **rawp)
        1101 {
        1102         char tmp, *name = ltrim(line);
      
        [...]
      
        1114         *namep = strdup(name);
        1115
        1116         if (*namep == NULL)
        1117                 goto out_free_name;
      
        [...]
      
        1124 out_free_name:
        1125         free((void *)namep);
                                  ^^^^^
        1126         *namep = NULL;
                     ^^^^^^
        1127         return -1;
        1128 }
      
      If strdup() fails to allocate memory space for *namep, we don't need to
      free memory with pointer 'namep', which is resident in data structure
      disasm_line::ins::name; and *namep is NULL pointer for this failure, so
      it's pointless to assign NULL to *namep again.
      
      Committer note:
      
      Freeing namep, which is the address of the first entry of the 'struct
      ins' that is the first member of struct disasm_line would in fact free
      that disasm_line instance, if it was allocated via malloc/calloc, which,
      later, would a dereference of freed memory.
      Signed-off-by: NLeo Yan <leo.yan@linaro.org>
      Acked-by: NJiri Olsa <jolsa@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Alexey Budankov <alexey.budankov@linux.intel.com>
      Cc: Alexios Zavras <alexios.zavras@intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Changbin Du <changbin.du@intel.com>
      Cc: David S. Miller <davem@davemloft.net>
      Cc: Davidlohr Bueso <dave@stgolabs.net>
      Cc: Eric Saint-Etienne <eric.saint.etienne@oracle.com>
      Cc: Jin Yao <yao.jin@linux.intel.com>
      Cc: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
      Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
      Cc: Song Liu <songliubraving@fb.com>
      Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Thomas Richter <tmricht@linux.ibm.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Link: http://lkml.kernel.org/r/20190702103420.27540-5-leo.yan@linaro.orgSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      915945f3
    • L
      perf session: Fix potential NULL pointer dereference found by the smatch tool · b305dcff
      Leo Yan 提交于
      [ Upstream commit f3c8d90757724982e5f07cd77d315eb64ca145ac ]
      
      Based on the following report from Smatch, fix the potential
      NULL pointer dereference check.
      
        tools/perf/util/session.c:1252
        dump_read() error: we previously assumed 'evsel' could be null
        (see line 1249)
      
        tools/perf/util/session.c
        1240 static void dump_read(struct perf_evsel *evsel, union perf_event *event)
        1241 {
        1242         struct read_event *read_event = &event->read;
        1243         u64 read_format;
        1244
        1245         if (!dump_trace)
        1246                 return;
        1247
        1248         printf(": %d %d %s %" PRIu64 "\n", event->read.pid, event->read.tid,
        1249                evsel ? perf_evsel__name(evsel) : "FAIL",
        1250                event->read.value);
        1251
        1252         read_format = evsel->attr.read_format;
                                   ^^^^^^^
      
      'evsel' could be NULL pointer, for this case this patch directly bails
      out without dumping read_event.
      Signed-off-by: NLeo Yan <leo.yan@linaro.org>
      Acked-by: NJiri Olsa <jolsa@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Alexey Budankov <alexey.budankov@linux.intel.com>
      Cc: Alexios Zavras <alexios.zavras@intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Changbin Du <changbin.du@intel.com>
      Cc: David S. Miller <davem@davemloft.net>
      Cc: Davidlohr Bueso <dave@stgolabs.net>
      Cc: Eric Saint-Etienne <eric.saint.etienne@oracle.com>
      Cc: Jin Yao <yao.jin@linux.intel.com>
      Cc: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
      Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
      Cc: Song Liu <songliubraving@fb.com>
      Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Thomas Richter <tmricht@linux.ibm.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Link: http://lkml.kernel.org/r/20190702103420.27540-9-leo.yan@linaro.orgSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      b305dcff
    • L
      perf top: Fix potential NULL pointer dereference detected by the smatch tool · 19cf571c
      Leo Yan 提交于
      [ Upstream commit 111442cfc8abdeaa7ec1407f07ef7b3e5f76654e ]
      
      Based on the following report from Smatch, fix the potential NULL
      pointer dereference check.
      
        tools/perf/builtin-top.c:109
        perf_top__parse_source() warn: variable dereferenced before check 'he'
        (see line 103)
      
        tools/perf/builtin-top.c:233
        perf_top__show_details() warn: variable dereferenced before check 'he'
        (see line 228)
      
        tools/perf/builtin-top.c
        101 static int perf_top__parse_source(struct perf_top *top, struct hist_entry *he)
        102 {
        103         struct perf_evsel *evsel = hists_to_evsel(he->hists);
                                                              ^^^^
        104         struct symbol *sym;
        105         struct annotation *notes;
        106         struct map *map;
        107         int err = -1;
        108
        109         if (!he || !he->ms.sym)
        110                 return -1;
      
      This patch moves the values assignment after validating pointer 'he'.
      Signed-off-by: NLeo Yan <leo.yan@linaro.org>
      Acked-by: NJiri Olsa <jolsa@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Alexey Budankov <alexey.budankov@linux.intel.com>
      Cc: Alexios Zavras <alexios.zavras@intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Changbin Du <changbin.du@intel.com>
      Cc: David S. Miller <davem@davemloft.net>
      Cc: Davidlohr Bueso <dave@stgolabs.net>
      Cc: Eric Saint-Etienne <eric.saint.etienne@oracle.com>
      Cc: Jin Yao <yao.jin@linux.intel.com>
      Cc: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
      Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
      Cc: Song Liu <songliubraving@fb.com>
      Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Thomas Richter <tmricht@linux.ibm.com>
      Cc: linux-arm-kernel@lists.infradead.org
      Link: http://lkml.kernel.org/r/20190702103420.27540-4-leo.yan@linaro.orgSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      19cf571c
    • L
      perf stat: Fix use-after-freed pointer detected by the smatch tool · 995527db
      Leo Yan 提交于
      [ Upstream commit c74b05030edb3b52f4208d8415b8c933bc509a29 ]
      
      Based on the following report from Smatch, fix the use-after-freed
      pointer.
      
        tools/perf/builtin-stat.c:1353
        add_default_attributes() warn: passing freed memory 'str'.
      
      The pointer 'str' has been freed but later it is still passed into the
      function parse_events_print_error().  This patch fixes this
      use-after-freed issue.
      Signed-off-by: NLeo Yan <leo.yan@linaro.org>
      Acked-by: NJiri Olsa <jolsa@kernel.org>
      Cc: Adrian Hunter <adrian.hunter@intel.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Alexey Budankov <alexey.budankov@linux.intel.com>
      Cc: Alexios Zavras <alexios.zavras@intel.com>
      Cc: Andi Kleen <ak@linux.intel.com>
      Cc: Changbin Du <changbin.du@intel.com>
      Cc: Davidlohr Bueso <dave@stgolabs.net>
      Cc: David S. Miller <davem@davemloft.net>
      Cc: Eric Saint-Etienne <eric.saint.etienne@oracle.com>
      Cc: Jin Yao <yao.jin@linux.intel.com>
      Cc: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
      Cc: linux-arm-kernel@lists.infradead.org
      Cc: Mathieu Poirier <mathieu.poirier@linaro.org>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Rasmus Villemoes <linux@rasmusvillemoes.dk>
      Cc: Song Liu <songliubraving@fb.com>
      Cc: Suzuki Poulouse <suzuki.poulose@arm.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: Thomas Richter <tmricht@linux.ibm.com>
      Link: http://lkml.kernel.org/r/20190702103420.27540-3-leo.yan@linaro.orgSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      995527db
    • N
      perf test mmap-thread-lookup: Initialize variable to suppress memory sanitizer warning · 3b8c4eae
      Numfor Mbiziwo-Tiapo 提交于
      [ Upstream commit 4e4cf62b37da5ff45c904a3acf242ab29ed5881d ]
      
      Running the 'perf test' command after building perf with a memory
      sanitizer causes a warning that says:
      
        WARNING: MemorySanitizer: use-of-uninitialized-value... in mmap-thread-lookup.c
      
      Initializing the go variable to 0 silences this harmless warning.
      
      Committer warning:
      
      This was harmless, just a simple test writing whatever was at that
      sizeof(int) memory area just to signal another thread blocked reading
      that file created with pipe(). Initialize it tho so that we don't get
      this warning.
      Signed-off-by: NNumfor Mbiziwo-Tiapo <nums@google.com>
      Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
      Cc: Ian Rogers <irogers@google.com>
      Cc: Jiri Olsa <jolsa@redhat.com>
      Cc: Mark Drayton <mbd@fb.com>
      Cc: Namhyung Kim <namhyung@kernel.org>
      Cc: Peter Zijlstra <peterz@infradead.org>
      Cc: Song Liu <songliubraving@fb.com>
      Cc: Stephane Eranian <eranian@google.com>
      Link: http://lkml.kernel.org/r/20190702173716.181223-1-nums@google.comSigned-off-by: NArnaldo Carvalho de Melo <acme@redhat.com>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      3b8c4eae
    • H
      PCI: mobiveil: Use the 1st inbound window for MEM inbound transactions · dd0a0c72
      Hou Zhiqiang 提交于
      [ Upstream commit f7fee1b42fe4f8171a4b1cad05c61907c33c53f6 ]
      
      The inbound and outbound windows have completely separate control
      registers sets in the host controller MMIO space. Windows control
      register are accessed through an MMIO base address and an offset
      that depends on the window index.
      
      Since inbound and outbound windows control registers are completely
      separate there is no real need to use different window indexes in the
      inbound/outbound windows initialization routines to prevent clashing.
      
      To fix this inconsistency, change the MEM inbound window index to 0,
      mirroring the outbound window set-up.
      Signed-off-by: NHou Zhiqiang <Zhiqiang.Hou@nxp.com>
      [lorenzo.pieralisi@arm.com: update commit log]
      Signed-off-by: NLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
      Reviewed-by: NMinghuan Lian <Minghuan.Lian@nxp.com>
      Reviewed-by: NSubrahmanya Lingappa <l.subrahmanya@mobiveil.co.in>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      dd0a0c72
    • H
      PCI: mobiveil: Initialize Primary/Secondary/Subordinate bus numbers · 270972df
      Hou Zhiqiang 提交于
      [ Upstream commit 6f3ab451aa5c2cbff33197d82fe8489cbd55ad91 ]
      
      The reset value of Primary, Secondary and Subordinate bus numbers is
      zero which is a broken setup.
      
      Program a sensible default value for Primary/Secondary/Subordinate
      bus numbers.
      Signed-off-by: NHou Zhiqiang <Zhiqiang.Hou@nxp.com>
      Signed-off-by: NLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
      Reviewed-by: NMinghuan Lian <Minghuan.Lian@nxp.com>
      Reviewed-by: NSubrahmanya Lingappa <l.subrahmanya@mobiveil.co.in>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      270972df
    • V
      kallsyms: exclude kasan local symbols on s390 · 9eb4f288
      Vasily Gorbik 提交于
      [ Upstream commit 33177f01ca3fe550146bb9001bec2fd806b2f40c ]
      
      gcc asan instrumentation emits the following sequence to store frame pc
      when the kernel is built with CONFIG_RELOCATABLE:
      debug/vsprintf.s:
              .section        .data.rel.ro.local,"aw"
              .align  8
      .LC3:
              .quad   .LASANPC4826@GOTOFF
      .text
              .align  8
              .type   number, @function
      number:
      .LASANPC4826:
      
      and in case reloc is issued for LASANPC label it also gets into .symtab
      with the same address as actual function symbol:
      $ nm -n vmlinux | grep 0000000001397150
      0000000001397150 t .LASANPC4826
      0000000001397150 t number
      
      In the end kernel backtraces are almost unreadable:
      [  143.748476] Call Trace:
      [  143.748484] ([<000000002da3e62c>] .LASANPC2671+0x114/0x190)
      [  143.748492]  [<000000002eca1a58>] .LASANPC2612+0x110/0x160
      [  143.748502]  [<000000002de9d830>] print_address_description+0x80/0x3b0
      [  143.748511]  [<000000002de9dd64>] __kasan_report+0x15c/0x1c8
      [  143.748521]  [<000000002ecb56d4>] strrchr+0x34/0x60
      [  143.748534]  [<000003ff800a9a40>] kasan_strings+0xb0/0x148 [test_kasan]
      [  143.748547]  [<000003ff800a9bba>] kmalloc_tests_init+0xe2/0x528 [test_kasan]
      [  143.748555]  [<000000002da2117c>] .LASANPC4069+0x354/0x748
      [  143.748563]  [<000000002dbfbb16>] do_init_module+0x136/0x3b0
      [  143.748571]  [<000000002dbff3f4>] .LASANPC3191+0x2164/0x25d0
      [  143.748580]  [<000000002dbffc4c>] .LASANPC3196+0x184/0x1b8
      [  143.748587]  [<000000002ecdf2ec>] system_call+0xd8/0x2d8
      
      Since LASANPC labels are not even unique and get into .symtab only due
      to relocs filter them out in kallsyms.
      Signed-off-by: NVasily Gorbik <gor@linux.ibm.com>
      Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      9eb4f288
    • H
      PCI: mobiveil: Fix the Class Code field · 4613f46e
      Hou Zhiqiang 提交于
      [ Upstream commit 0122af0a08243f344a438f924e5c2486486555b3 ]
      
      Fix up the Class Code field in PCI configuration space and set it to
      PCI_CLASS_BRIDGE_PCI.
      
      Move the Class Code fixup to function mobiveil_host_init() where
      it belongs.
      
      Fixes: 9af6bcb1 ("PCI: mobiveil: Add Mobiveil PCIe Host Bridge IP driver")
      Signed-off-by: NHou Zhiqiang <Zhiqiang.Hou@nxp.com>
      Signed-off-by: NLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
      Reviewed-by: NMinghuan Lian <Minghuan.Lian@nxp.com>
      Reviewed-by: NSubrahmanya Lingappa <l.subrahmanya@mobiveil.co.in>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      4613f46e
    • H
      PCI: mobiveil: Fix PCI base address in MEM/IO outbound windows · 51308ec5
      Hou Zhiqiang 提交于
      [ Upstream commit f99536e9d2f55996038158a6559d4254a7cc1693 ]
      
      The outbound memory windows PCI base addresses should be taken
      from the 'ranges' property of DT node to setup MEM/IO outbound
      windows decoding correctly instead of being hardcoded to zero.
      
      Update the code to retrieve the PCI base address for each range
      and use it to program the outbound windows address decoders
      
      Fixes: 9af6bcb1 ("PCI: mobiveil: Add Mobiveil PCIe Host Bridge IP driver")
      Signed-off-by: NHou Zhiqiang <Zhiqiang.Hou@nxp.com>
      Signed-off-by: NLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
      Reviewed-by: NMinghuan Lian <Minghuan.Lian@nxp.com>
      Reviewed-by: NSubrahmanya Lingappa <l.subrahmanya@mobiveil.co.in>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      51308ec5
    • J
      arm64: assembler: Switch ESB-instruction with a vanilla nop if !ARM64_HAS_RAS · 05959ed8
      James Morse 提交于
      [ Upstream commit 2b68a2a963a157f024c67c0697b16f5f792c8a35 ]
      
      The ESB-instruction is a nop on CPUs that don't implement the RAS
      extensions. This lets us use it in places like the vectors without
      having to use alternatives.
      
      If someone disables CONFIG_ARM64_RAS_EXTN, this instruction still has
      its RAS extensions behaviour, but we no longer read DISR_EL1 as this
      register does depend on alternatives.
      
      This could go wrong if we want to synchronize an SError from a KVM
      guest. On a CPU that has the RAS extensions, but the KConfig option
      was disabled, we consume the pending SError with no chance of ever
      reading it.
      
      Hide the ESB-instruction behind the CONFIG_ARM64_RAS_EXTN option,
      outputting a regular nop if the feature has been disabled.
      Reported-by: NJulien Thierry <julien.thierry@arm.com>
      Signed-off-by: NJames Morse <james.morse@arm.com>
      Signed-off-by: NMarc Zyngier <marc.zyngier@arm.com>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      05959ed8
    • V
      IB/ipoib: Add child to parent list only if device initialized · 007b01a2
      Valentine Fatiev 提交于
      [ Upstream commit 91b01061fef9c57d2f5b712a6322ef51061f4efd ]
      
      Despite failure in ipoib_dev_init() we continue with initialization flow
      and creation of child device. It causes to the situation where this child
      device is added too early to parent device list.
      
      Change the logic, so in case of failure we properly return error from
      ipoib_dev_init() and add child only in success path.
      
      Fixes: eaeb3984 ("IB/ipoib: Move init code to ndo_init")
      Signed-off-by: NValentine Fatiev <valentinef@mellanox.com>
      Reviewed-by: NFeras Daoud <ferasda@mellanox.com>
      Signed-off-by: NLeon Romanovsky <leonro@mellanox.com>
      Reviewed-by: NJason Gunthorpe <jgg@mellanox.com>
      Signed-off-by: NJason Gunthorpe <jgg@mellanox.com>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      007b01a2
    • A
      powerpc/mm: Handle page table allocation failures · d48720ba
      Aneesh Kumar K.V 提交于
      [ Upstream commit 2230ebf6e6dd0b7751e2921b40f6cfe34f09bb16 ]
      
      This fixes kernel crash that arises due to not handling page table allocation
      failures while allocating hugetlb page table.
      
      Fixes: e2b3d202 ("powerpc: Switch 16GB and 16MB explicit hugepages to a different page table format")
      Signed-off-by: NAneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      d48720ba
    • P
      IB/mlx5: Fixed reporting counters on 2nd port for Dual port RoCE · f14537bb
      Parav Pandit 提交于
      [ Upstream commit 2f40cf30c8644360d37287861d5288f00eab35e5 ]
      
      Currently during dual port IB device registration in below code flow,
      
      ib_register_device()
        ib_device_register_sysfs()
          ib_setup_port_attrs()
            add_port()
              get_counter_table()
                get_perf_mad()
                  process_mad()
                    mlx5_ib_process_mad()
      
      mlx5_ib_process_mad() fails on 2nd port when both the ports are not fully
      setup at the device level (because 2nd port is unaffiliated).
      
      As a result, get_perf_mad() registers different PMA counter group for 1st
      and 2nd port, namely pma_counter_ext and pma_counter. However both ports
      have the same capability and counter offsets.
      
      Due to this when counters are read by the user via sysfs in below code
      flow, counters are queried from wrong location from the device mainly from
      PPCNT instead of VPORT counters.
      
      show_pma_counter()
        get_perf_mad()
          process_mad()
            mlx5_ib_process_mad()
              process_pma_cmd()
      
      This shows all zero counters for 2nd port.
      
      To overcome this, process_pma_cmd() is invoked, and when unaffiliated port
      is not yet setup during device registration phase, make the query on the
      first port.  while at it, only process_pma_cmd() needs to work on the
      native port number and underlying mdev, so shift the get, put calls to
      where its needed inside process_pma_cmd().
      
      Fixes: 212f2a87 ("IB/mlx5: Route MADs for dual port RoCE")
      Signed-off-by: NParav Pandit <parav@mellanox.com>
      Reviewed-by: NDaniel Jurgens <danielj@mellanox.com>
      Signed-off-by: NLeon Romanovsky <leonro@mellanox.com>
      Signed-off-by: NJason Gunthorpe <jgg@mellanox.com>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      f14537bb
    • G
      serial: sh-sci: Fix TX DMA buffer flushing and workqueue races · d03aeb8d
      Geert Uytterhoeven 提交于
      [ Upstream commit 8493eab02608b0e82f67b892aa72882e510c31d0 ]
      
      When uart_flush_buffer() is called, the .flush_buffer() callback zeroes
      the tx_dma_len field.  This may race with the work queue function
      handling transmit DMA requests:
      
        1. If the buffer is flushed before the first DMA API call,
           dmaengine_prep_slave_single() may be called with a zero length,
           causing the DMA request to never complete, leading to messages
           like:
      
              rcar-dmac e7300000.dma-controller: Channel Address Error happen
      
           and, with debug enabled:
      
      	sh-sci e6e88000.serial: sci_dma_tx_work_fn: ffff800639b55000: 0...0, cookie 126
      
           and DMA timeouts.
      
        2. If the buffer is flushed after the first DMA API call, but before
           the second, dma_sync_single_for_device() may be called with a zero
           length, causing the transmit data not to be flushed to RAM, and
           leading to stale data being output.
      
      Fix this by:
        1. Letting sci_dma_tx_work_fn() return immediately if the transmit
           buffer is empty,
        2. Extending the critical section to cover all DMA preparational work,
           so tx_dma_len stays consistent for all of it,
        3. Using local copies of circ_buf.head and circ_buf.tail, to make sure
           they match the actual operation above.
      Reported-by: NEugeniu Rosca <erosca@de.adit-jv.com>
      Suggested-by: NYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
      Signed-off-by: NGeert Uytterhoeven <geert+renesas@glider.be>
      Reviewed-by: NEugeniu Rosca <erosca@de.adit-jv.com>
      Tested-by: NEugeniu Rosca <erosca@de.adit-jv.com>
      Link: https://lore.kernel.org/r/20190624123540.20629-2-geert+renesas@glider.beSigned-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      d03aeb8d
    • G
      serial: sh-sci: Terminate TX DMA during buffer flushing · 48c73b8e
      Geert Uytterhoeven 提交于
      [ Upstream commit 775b7ffd7d6d5db320d99b0a485c51e04dfcf9f1 ]
      
      While the .flush_buffer() callback clears sci_port.tx_dma_len since
      commit 1cf4a7ef ("serial: sh-sci: Fix race condition causing
      garbage during shutdown"), it does not terminate a transmit DMA
      operation that may be in progress.
      
      Fix this by terminating any pending DMA operations, and resetting the
      corresponding cookie.
      Signed-off-by: NGeert Uytterhoeven <geert+renesas@glider.be>
      Reviewed-by: NEugeniu Rosca <erosca@de.adit-jv.com>
      Tested-by: NEugeniu Rosca <erosca@de.adit-jv.com>
      
      Link: https://lore.kernel.org/r/20190624123540.20629-3-geert+renesas@glider.beSigned-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      48c73b8e
    • L
      RDMA/i40iw: Set queue pair state when being queried · ca730bf0
      Liu, Changcheng 提交于
      [ Upstream commit 2e67e775845373905d2c2aecb9062c2c4352a535 ]
      
      The API for ib_query_qp requires the driver to set qp_state and
      cur_qp_state on return, add the missing sets.
      
      Fixes: d3749841 ("i40iw: add files for iwarp interface")
      Signed-off-by: NChangcheng Liu <changcheng.liu@aliyun.com>
      Acked-by: NShiraz Saleem <shiraz.saleem@intel.com>
      Reviewed-by: NJason Gunthorpe <jgg@mellanox.com>
      Signed-off-by: NJason Gunthorpe <jgg@mellanox.com>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      ca730bf0
    • C
      powerpc/4xx/uic: clear pending interrupt after irq type/pol change · 52373ab6
      Christian Lamparter 提交于
      [ Upstream commit 3ab3a0689e74e6aa5b41360bc18861040ddef5b1 ]
      
      When testing out gpio-keys with a button, a spurious
      interrupt (and therefore a key press or release event)
      gets triggered as soon as the driver enables the irq
      line for the first time.
      
      This patch clears any potential bogus generated interrupt
      that was caused by the switching of the associated irq's
      type and polarity.
      Signed-off-by: NChristian Lamparter <chunkeey@gmail.com>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      52373ab6
    • J
      um: Silence lockdep complaint about mmap_sem · 74520144
      Johannes Berg 提交于
      [ Upstream commit 80bf6ceaf9310b3f61934c69b382d4912deee049 ]
      
      When we get into activate_mm(), lockdep complains that we're doing
      something strange:
      
          WARNING: possible circular locking dependency detected
          5.1.0-10252-gb00152307319-dirty #121 Not tainted
          ------------------------------------------------------
          inside.sh/366 is trying to acquire lock:
          (____ptrval____) (&(&p->alloc_lock)->rlock){+.+.}, at: flush_old_exec+0x703/0x8d7
      
          but task is already holding lock:
          (____ptrval____) (&mm->mmap_sem){++++}, at: flush_old_exec+0x6c5/0x8d7
      
          which lock already depends on the new lock.
      
          the existing dependency chain (in reverse order) is:
      
          -> #1 (&mm->mmap_sem){++++}:
                 [...]
                 __lock_acquire+0x12ab/0x139f
                 lock_acquire+0x155/0x18e
                 down_write+0x3f/0x98
                 flush_old_exec+0x748/0x8d7
                 load_elf_binary+0x2ca/0xddb
                 [...]
      
          -> #0 (&(&p->alloc_lock)->rlock){+.+.}:
                 [...]
                 __lock_acquire+0x12ab/0x139f
                 lock_acquire+0x155/0x18e
                 _raw_spin_lock+0x30/0x83
                 flush_old_exec+0x703/0x8d7
                 load_elf_binary+0x2ca/0xddb
                 [...]
      
          other info that might help us debug this:
      
           Possible unsafe locking scenario:
      
                 CPU0                    CPU1
                 ----                    ----
            lock(&mm->mmap_sem);
                                         lock(&(&p->alloc_lock)->rlock);
                                         lock(&mm->mmap_sem);
            lock(&(&p->alloc_lock)->rlock);
      
           *** DEADLOCK ***
      
          2 locks held by inside.sh/366:
           #0: (____ptrval____) (&sig->cred_guard_mutex){+.+.}, at: __do_execve_file+0x12d/0x869
           #1: (____ptrval____) (&mm->mmap_sem){++++}, at: flush_old_exec+0x6c5/0x8d7
      
          stack backtrace:
          CPU: 0 PID: 366 Comm: inside.sh Not tainted 5.1.0-10252-gb00152307319-dirty #121
          Stack:
           [...]
          Call Trace:
           [<600420de>] show_stack+0x13b/0x155
           [<6048906b>] dump_stack+0x2a/0x2c
           [<6009ae64>] print_circular_bug+0x332/0x343
           [<6009c5c6>] check_prev_add+0x669/0xdad
           [<600a06b4>] __lock_acquire+0x12ab/0x139f
           [<6009f3d0>] lock_acquire+0x155/0x18e
           [<604a07e0>] _raw_spin_lock+0x30/0x83
           [<60151e6a>] flush_old_exec+0x703/0x8d7
           [<601a8eb8>] load_elf_binary+0x2ca/0xddb
           [...]
      
      I think it's because in exec_mmap() we have
      
      	down_read(&old_mm->mmap_sem);
      ...
              task_lock(tsk);
      ...
      	activate_mm(active_mm, mm);
      	(which does down_write(&mm->mmap_sem))
      
      I'm not really sure why lockdep throws in the whole knowledge
      about the task lock, but it seems that old_mm and mm shouldn't
      ever be the same (and it doesn't deadlock) so tell lockdep that
      they're different.
      Signed-off-by: NJohannes Berg <johannes.berg@intel.com>
      Signed-off-by: NRichard Weinberger <richard@nod.at>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      74520144
    • I
      mm/swap: fix release_pages() when releasing devmap pages · 30edc7c1
      Ira Weiny 提交于
      [ Upstream commit c5d6c45e90c49150670346967971e14576afd7f1 ]
      
      release_pages() is an optimized version of a loop around put_page().
      Unfortunately for devmap pages the logic is not entirely correct in
      release_pages().  This is because device pages can be more than type
      MEMORY_DEVICE_PUBLIC.  There are in fact 4 types, private, public, FS DAX,
      and PCI P2PDMA.  Some of these have specific needs to "put" the page while
      others do not.
      
      This logic to handle any special needs is contained in
      put_devmap_managed_page().  Therefore all devmap pages should be processed
      by this function where we can contain the correct logic for a page put.
      
      Handle all device type pages within release_pages() by calling
      put_devmap_managed_page() on all devmap pages.  If
      put_devmap_managed_page() returns true the page has been put and we
      continue with the next page.  A false return of put_devmap_managed_page()
      means the page did not require special processing and should fall to
      "normal" processing.
      
      This was found via code inspection while determining if release_pages()
      and the new put_user_pages() could be interchangeable.[1]
      
      [1] https://lkml.kernel.org/r/20190523172852.GA27175@iweiny-DESK2.sc.intel.com
      
      Link: https://lkml.kernel.org/r/20190605214922.17684-1-ira.weiny@intel.com
      Cc: Jérôme Glisse <jglisse@redhat.com>
      Cc: Michal Hocko <mhocko@suse.com>
      Reviewed-by: NDan Williams <dan.j.williams@intel.com>
      Reviewed-by: NJohn Hubbard <jhubbard@nvidia.com>
      Signed-off-by: NIra Weiny <ira.weiny@intel.com>
      Signed-off-by: NJason Gunthorpe <jgg@mellanox.com>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      30edc7c1
    • A
      mfd: hi655x-pmic: Fix missing return value check for devm_regmap_init_mmio_clk · b4e77006
      Axel Lin 提交于
      [ Upstream commit 7efd105c27fd2323789b41b64763a0e33ed79c08 ]
      
      Since devm_regmap_init_mmio_clk can fail, add return value checking.
      Signed-off-by: NAxel Lin <axel.lin@ingics.com>
      Acked-by: NChen Feng <puck.chen@hisilicon.com>
      Signed-off-by: NLee Jones <lee.jones@linaro.org>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      b4e77006
    • A
      mfd: arizona: Fix undefined behavior · 9b1691c3
      Arnd Bergmann 提交于
      [ Upstream commit 5da6cbcd2f395981aa9bfc571ace99f1c786c985 ]
      
      When the driver is used with a subdevice that is disabled in the
      kernel configuration, clang gets a little confused about the
      control flow and fails to notice that n_subdevs is only
      uninitialized when subdevs is NULL, and we check for that,
      leading to a false-positive warning:
      
      drivers/mfd/arizona-core.c:1423:19: error: variable 'n_subdevs' is uninitialized when used here
            [-Werror,-Wuninitialized]
                                    subdevs, n_subdevs, NULL, 0, NULL);
                                             ^~~~~~~~~
      drivers/mfd/arizona-core.c:999:15: note: initialize the variable 'n_subdevs' to silence this warning
              int n_subdevs, ret, i;
                           ^
                            = 0
      
      Ideally, we would rearrange the code to avoid all those early
      initializations and have an explicit exit in each disabled case,
      but it's much easier to chicken out and add one more initialization
      here to shut up the warning.
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      Reviewed-by: NNathan Chancellor <natechancellor@gmail.com>
      Signed-off-by: NCharles Keepax <ckeepax@opensource.cirrus.com>
      Signed-off-by: NLee Jones <lee.jones@linaro.org>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      9b1691c3
    • R
      mfd: core: Set fwnode for created devices · d9c74176
      Robert Hancock 提交于
      [ Upstream commit c176c6d7e932662668bcaec2d763657096589d85 ]
      
      The logic for setting the of_node on devices created by mfd did not set
      the fwnode pointer to match, which caused fwnode-based APIs to
      malfunction on these devices since the fwnode pointer was null. Fix
      this.
      Signed-off-by: NRobert Hancock <hancock@sedsystems.ca>
      Signed-off-by: NLee Jones <lee.jones@linaro.org>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      d9c74176
    • D
      mfd: madera: Add missing of table registration · 7b24a4a3
      Daniel Gomez 提交于
      [ Upstream commit 5aa3709c0a5c026735b0ddd4ec80810a23d65f5b ]
      
      MODULE_DEVICE_TABLE(of, <of_match_table>) should be called to complete DT
      OF mathing mechanism and register it.
      
      Before this patch:
      modinfo ./drivers/mfd/madera.ko | grep alias
      
      After this patch:
      modinfo ./drivers/mfd/madera.ko | grep alias
      alias:          of:N*T*Ccirrus,wm1840C*
      alias:          of:N*T*Ccirrus,wm1840
      alias:          of:N*T*Ccirrus,cs47l91C*
      alias:          of:N*T*Ccirrus,cs47l91
      alias:          of:N*T*Ccirrus,cs47l90C*
      alias:          of:N*T*Ccirrus,cs47l90
      alias:          of:N*T*Ccirrus,cs47l85C*
      alias:          of:N*T*Ccirrus,cs47l85
      alias:          of:N*T*Ccirrus,cs47l35C*
      alias:          of:N*T*Ccirrus,cs47l35
      Reported-by: NJavier Martinez Canillas <javier@dowhile0.org>
      Signed-off-by: NDaniel Gomez <dagmcr@gmail.com>
      Signed-off-by: NLee Jones <lee.jones@linaro.org>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      7b24a4a3
    • N
      recordmcount: Fix spurious mcount entries on powerpc · e00cf1da
      Naveen N. Rao 提交于
      [ Upstream commit 80e5302e4bc85a6b685b7668c36c6487b5f90e9a ]
      
      An impending change to enable HAVE_C_RECORDMCOUNT on powerpc leads to
      warnings such as the following:
      
        # modprobe kprobe_example
        ftrace-powerpc: Not expected bl: opcode is 3c4c0001
        WARNING: CPU: 0 PID: 227 at kernel/trace/ftrace.c:2001 ftrace_bug+0x90/0x318
        Modules linked in:
        CPU: 0 PID: 227 Comm: modprobe Not tainted 5.2.0-rc6-00678-g1c329100b942 #2
        NIP:  c000000000264318 LR: c00000000025d694 CTR: c000000000f5cd30
        REGS: c000000001f2b7b0 TRAP: 0700   Not tainted  (5.2.0-rc6-00678-g1c329100b942)
        MSR:  900000010282b033 <SF,HV,VEC,VSX,EE,FP,ME,IR,DR,RI,LE,TM[E]>  CR: 28228222  XER: 00000000
        CFAR: c0000000002642fc IRQMASK: 0
        <snip>
        NIP [c000000000264318] ftrace_bug+0x90/0x318
        LR [c00000000025d694] ftrace_process_locs+0x4f4/0x5e0
        Call Trace:
        [c000000001f2ba40] [0000000000000004] 0x4 (unreliable)
        [c000000001f2bad0] [c00000000025d694] ftrace_process_locs+0x4f4/0x5e0
        [c000000001f2bb90] [c00000000020ff10] load_module+0x25b0/0x30c0
        [c000000001f2bd00] [c000000000210cb0] sys_finit_module+0xc0/0x130
        [c000000001f2be20] [c00000000000bda4] system_call+0x5c/0x70
        Instruction dump:
        419e0018 2f83ffff 419e00bc 2f83ffea 409e00cc 4800001c 0fe00000 3c62ff96
        39000001 39400000 386386d0 480000c4 <0fe00000> 3ce20003 39000001 3c62ff96
        ---[ end trace 4c438d5cebf78381 ]---
        ftrace failed to modify
        [<c0080000012a0008>] 0xc0080000012a0008
         actual:   01:00:4c:3c
        Initializing ftrace call sites
        ftrace record flags: 2000000
         (0)
         expected tramp: c00000000006af4c
      
      Looking at the relocation records in __mcount_loc shows a few spurious
      entries:
      
        RELOCATION RECORDS FOR [__mcount_loc]:
        OFFSET           TYPE              VALUE
        0000000000000000 R_PPC64_ADDR64    .text.unlikely+0x0000000000000008
        0000000000000008 R_PPC64_ADDR64    .text.unlikely+0x0000000000000014
        0000000000000010 R_PPC64_ADDR64    .text.unlikely+0x0000000000000060
        0000000000000018 R_PPC64_ADDR64    .text.unlikely+0x00000000000000b4
        0000000000000020 R_PPC64_ADDR64    .init.text+0x0000000000000008
        0000000000000028 R_PPC64_ADDR64    .init.text+0x0000000000000014
      
      The first entry in each section is incorrect. Looking at the
      relocation records, the spurious entries correspond to the
      R_PPC64_ENTRY records:
      
        RELOCATION RECORDS FOR [.text.unlikely]:
        OFFSET           TYPE              VALUE
        0000000000000000 R_PPC64_REL64     .TOC.-0x0000000000000008
        0000000000000008 R_PPC64_ENTRY     *ABS*
        0000000000000014 R_PPC64_REL24     _mcount
        <snip>
      
      The problem is that we are not validating the return value from
      get_mcountsym() in sift_rel_mcount(). With this entry, mcountsym is 0,
      but Elf_r_sym(relp) also ends up being 0. Fix this by ensuring
      mcountsym is valid before processing the entry.
      Signed-off-by: NNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
      Acked-by: NSteven Rostedt (VMware) <rostedt@goodmis.org>
      Tested-by: NSatheesh Rajendran <sathnaga@linux.vnet.ibm.com>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      e00cf1da
    • N
      powerpc/xmon: Fix disabling tracing while in xmon · 9fac3948
      Naveen N. Rao 提交于
      [ Upstream commit aaf06665f7ea3ee9f9754e16c1a507a89f1de5b1 ]
      
      Commit ed49f7fd ("powerpc/xmon: Disable tracing when entering
      xmon") added code to disable recording trace entries while in xmon. The
      commit introduced a variable 'tracing_enabled' to record if tracing was
      enabled on xmon entry, and used this to conditionally enable tracing
      during exit from xmon.
      
      However, we are not checking the value of 'fromipi' variable in
      xmon_core() when setting 'tracing_enabled'. Due to this, when secondary
      cpus enter xmon, they will see tracing as being disabled already and
      tracing won't be re-enabled on exit. Fix the same.
      
      Fixes: ed49f7fd ("powerpc/xmon: Disable tracing when entering xmon")
      Signed-off-by: NNaveen N. Rao <naveen.n.rao@linux.vnet.ibm.com>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      9fac3948
    • Q
      powerpc/cacheflush: fix variable set but not used · a80f67d5
      Qian Cai 提交于
      [ Upstream commit 04db3ede40ae4fc23a5c4237254c4a53bbe4c1f2 ]
      
      The powerpc's flush_cache_vmap() is defined as a macro and never use
      both of its arguments, so it will generate a compilation warning,
      
      lib/ioremap.c: In function 'ioremap_page_range':
      lib/ioremap.c:203:16: warning: variable 'start' set but not used
      [-Wunused-but-set-variable]
      
      Fix it by making it an inline function.
      Signed-off-by: NQian Cai <cai@lca.pw>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      a80f67d5
    • B
      iio: iio-utils: Fix possible incorrect mask calculation · b150423e
      Bastien Nocera 提交于
      [ Upstream commit 208a68c8393d6041a90862992222f3d7943d44d6 ]
      
      On some machines, iio-sensor-proxy was returning all 0's for IIO sensor
      values. It turns out that the bits_used for this sensor is 32, which makes
      the mask calculation:
      
      *mask = (1 << 32) - 1;
      
      If the compiler interprets the 1 literals as 32-bit ints, it generates
      undefined behavior depending on compiler version and optimization level.
      On my system, it optimizes out the shift, so the mask value becomes
      
      *mask = (1) - 1;
      
      With a mask value of 0, iio-sensor-proxy will always return 0 for every axis.
      
      Avoid incorrect 0 values caused by compiler optimization.
      
      See original fix by Brett Dutro <brett.dutro@gmail.com> in
      iio-sensor-proxy:
      https://github.com/hadess/iio-sensor-proxy/commit/9615ceac7c134d838660e209726cd86aa2064fd3Signed-off-by: NBastien Nocera <hadess@hadess.net>
      Signed-off-by: NJonathan Cameron <Jonathan.Cameron@huawei.com>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      b150423e
    • B
      PCI: xilinx-nwl: Fix Multi MSI data programming · fc9c15c4
      Bharat Kumar Gogada 提交于
      [ Upstream commit 181fa434d0514e40ebf6e9721f2b72700287b6e2 ]
      
      According to the PCI Local Bus specification Revision 3.0,
      section 6.8.1.3 (Message Control for MSI), endpoints that
      are Multiple Message Capable as defined by bits [3:1] in
      the Message Control for MSI can request a number of vectors
      that is power of two aligned.
      
      As specified in section 6.8.1.6 "Message data for MSI", the Multiple
      Message Enable field (bits [6:4] of the Message Control register)
      defines the number of low order message data bits the function is
      permitted to modify to generate its system software allocated
      vectors.
      
      The MSI controller in the Xilinx NWL PCIe controller supports a number
      of MSI vectors specified through a bitmap and the hwirq number for an
      MSI, that is the value written in the MSI data TLP is determined by
      the bitmap allocation.
      
      For instance, in a situation where two endpoints sitting on
      the PCI bus request the following MSI configuration, with
      the current PCI Xilinx bitmap allocation code (that does not
      align MSI vector allocation on a power of two boundary):
      
      Endpoint #1: Requesting 1 MSI vector - allocated bitmap bits 0
      Endpoint #2: Requesting 2 MSI vectors - allocated bitmap bits [1,2]
      
      The bitmap value(s) corresponds to the hwirq number that is programmed
      into the Message Data for MSI field in the endpoint MSI capability
      and is detected by the root complex to fire the corresponding
      MSI irqs. The value written in Message Data for MSI field corresponds
      to the first bit allocated in the bitmap for Multi MSI vectors.
      
      The current Xilinx NWL MSI allocation code allows a bitmap allocation
      that is not a power of two boundaries, so endpoint #2, is allowed to
      toggle Message Data bit[0] to differentiate between its two vectors
      (meaning that the MSI data will be respectively 0x0 and 0x1 for the two
      vectors allocated to endpoint #2).
      
      This clearly aliases with the Endpoint #1 vector allocation, resulting
      in a broken Multi MSI implementation.
      
      Update the code to allocate MSI bitmap ranges with a power of two
      alignment, fixing the bug.
      
      Fixes: ab597d35 ("PCI: xilinx-nwl: Add support for Xilinx NWL PCIe Host Controller")
      Suggested-by: NMarc Zyngier <marc.zyngier@arm.com>
      Signed-off-by: NBharat Kumar Gogada <bharat.kumar.gogada@xilinx.com>
      [lorenzo.pieralisi@arm.com: updated commit log]
      Signed-off-by: NLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
      Acked-by: NMarc Zyngier <marc.zyngier@arm.com>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      fc9c15c4
    • W
      genksyms: Teach parser about 128-bit built-in types · e3e2bb12
      Will Deacon 提交于
      [ Upstream commit a222061b85234d8a44486a46bd4df7e2cda52385 ]
      
      __uint128_t crops up in a few files that export symbols to modules, so
      teach genksyms about it and the other GCC built-in 128-bit integer types
      so that we don't end up skipping the CRC generation for some symbols due
      to the parser failing to spot them:
      
        | WARNING: EXPORT symbol "kernel_neon_begin" [vmlinux] version
        |          generation failed, symbol will not be versioned.
        | ld: arch/arm64/kernel/fpsimd.o: relocation R_AARCH64_ABS32 against
        |     `__crc_kernel_neon_begin' can not be used when making a shared
        |     object
        | ld: arch/arm64/kernel/fpsimd.o:(.data+0x0): dangerous relocation:
        |     unsupported relocation
      Reported-by: NArnd Bergmann <arnd@arndb.de>
      Signed-off-by: NWill Deacon <will.deacon@arm.com>
      Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      e3e2bb12
    • N
      kbuild: Add -Werror=unknown-warning-option to CLANG_FLAGS · 27f2335e
      Nathan Chancellor 提交于
      [ Upstream commit 589834b3a0097a4908f4112eac0ca2feb486fa32 ]
      
      In commit ebcc5928c5d9 ("arm64: Silence gcc warnings about arch ABI
      drift"), the arm64 Makefile added -Wno-psabi to KBUILD_CFLAGS, which is
      a GCC only option so clang rightfully complains:
      
      warning: unknown warning option '-Wno-psabi' [-Wunknown-warning-option]
      
      https://clang.llvm.org/docs/DiagnosticsReference.html#wunknown-warning-option
      
      However, by default, this is merely a warning so the build happily goes
      on with a slew of these warnings in the process.
      
      Commit c3f0d0bc ("kbuild, LLVMLinux: Add -Werror to cc-option to
      support clang") worked around this behavior in cc-option by adding
      -Werror so that unknown flags cause an error. However, this all happens
      silently and when an unknown flag is added to the build unconditionally
      like -Wno-psabi, cc-option will always fail because there is always an
      unknown flag in the list of flags. This manifested as link time failures
      in the arm64 libstub because -fno-stack-protector didn't get added to
      KBUILD_CFLAGS.
      
      To avoid these weird cryptic failures in the future, make clang behave
      like gcc and immediately error when it encounters an unknown flag by
      adding -Werror=unknown-warning-option to CLANG_FLAGS. This can be added
      unconditionally for clang because it is supported by at least 3.0.0,
      according to godbolt [1] and 4.0.0, according to its documentation [2],
      which is far earlier than we typically support.
      
      [1]: https://godbolt.org/z/7F7rm3
      [2]: https://releases.llvm.org/4.0.0/tools/clang/docs/DiagnosticsReference.html#wunknown-warning-option
      
      Link: https://github.com/ClangBuiltLinux/linux/issues/511
      Link: https://github.com/ClangBuiltLinux/linux/issues/517Suggested-by: NPeter Smith <peter.smith@linaro.org>
      Signed-off-by: NNathan Chancellor <natechancellor@gmail.com>
      Tested-by: NNick Desaulniers <ndesaulniers@google.com>
      Signed-off-by: NMasahiro Yamada <yamada.masahiro@socionext.com>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      27f2335e
    • F
      i2c: stm32f7: fix the get_irq error cases · 1fa94381
      Fabrice Gasnier 提交于
      [ Upstream commit 79b4499524ed659fb76323efc30f3dc03967c88f ]
      
      During probe, return the "get_irq" error value instead of -EINVAL which
      allows the driver to be deferred probed if needed.
      Fix also the case where of_irq_get() returns a negative value.
      Note :
      On failure of_irq_get() returns 0 or a negative value while
      platform_get_irq() returns a negative value.
      
      Fixes: aeb068c5 ("i2c: i2c-stm32f7: add driver")
      Reviewed-by: NPierre-Yves MORDRET <pierre-yves.mordret@st.com>
      Signed-off-by: NFabien Dessenne <fabien.dessenne@st.com>
      Signed-off-by: NFabrice Gasnier <fabrice.gasnier@st.com>
      Signed-off-by: NWolfram Sang <wsa@the-dreams.de>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      1fa94381
    • M
      PCI: sysfs: Ignore lockdep for remove attribute · f930727f
      Marek Vasut 提交于
      [ Upstream commit dc6b698a86fe40a50525433eb8e92a267847f6f9 ]
      
      With CONFIG_PROVE_LOCKING=y, using sysfs to remove a bridge with a device
      below it causes a lockdep warning, e.g.,
      
        # echo 1 > /sys/class/pci_bus/0000:00/device/0000:00:00.0/remove
        ============================================
        WARNING: possible recursive locking detected
        ...
        pci_bus 0000:01: busn_res: [bus 01] is released
      
      The remove recursively removes the subtree below the bridge.  Each call
      uses a different lock so there's no deadlock, but the locks were all
      created with the same lockdep key so the lockdep checker can't tell them
      apart.
      
      Mark the "remove" sysfs attribute with __ATTR_IGNORE_LOCKDEP() as it is
      safe to ignore the lockdep check between different "remove" kernfs
      instances.
      
      There's discussion about a similar issue in USB at [1], which resulted in
      356c05d5 ("sysfs: get rid of some lockdep false positives") and
      e9b526fe ("i2c: suppress lockdep warning on delete_device"), which do
      basically the same thing for USB "remove" and i2c "delete_device" files.
      
      [1] https://lore.kernel.org/r/Pine.LNX.4.44L0.1204251436140.1206-100000@iolanthe.rowland.org
      Link: https://lore.kernel.org/r/20190526225151.3865-1-marek.vasut@gmail.comSigned-off-by: NMarek Vasut <marek.vasut+renesas@gmail.com>
      [bhelgaas: trim commit log, details at above links]
      Signed-off-by: NBjorn Helgaas <bhelgaas@google.com>
      Cc: Geert Uytterhoeven <geert+renesas@glider.be>
      Cc: Phil Edworthy <phil.edworthy@renesas.com>
      Cc: Simon Horman <horms+renesas@verge.net.au>
      Cc: Tejun Heo <tj@kernel.org>
      Cc: Wolfram Sang <wsa@the-dreams.de>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      f930727f
    • S
      serial: mctrl_gpio: Check if GPIO property exisits before requesting it · 9d45fbee
      Stefan Roese 提交于
      [ Upstream commit d99482673f950817b30caf3fcdfb31179b050ce1 ]
      
      This patch adds a check for the GPIOs property existence, before the
      GPIO is requested. This fixes an issue seen when the 8250 mctrl_gpio
      support is added (2nd patch in this patch series) on x86 platforms using
      ACPI.
      
      Here Mika's comments from 2016-08-09:
      
      "
      I noticed that with v4.8-rc1 serial console of some of our Broxton
      systems does not work properly anymore. I'm able to see output but input
      does not work.
      
      I bisected it down to commit 4ef03d32
      ("tty/serial/8250: use mctrl_gpio helpers").
      
      The reason why it fails is that in ACPI we do not have names for GPIOs
      (except when _DSD is used) so we use the "idx" to index into _CRS GPIO
      resources. Now mctrl_gpio_init_noauto() goes through a list of GPIOs
      calling devm_gpiod_get_index_optional() passing "idx" of 0 for each. The
      UART device in Broxton has following (simplified) ACPI description:
      
          Device (URT4)
          {
              ...
              Name (_CRS, ResourceTemplate () {
                  GpioIo (Exclusive, PullDefault, 0x0000, 0x0000, IoRestrictionOutputOnly,
                          "\\_SB.GPO0", 0x00, ResourceConsumer)
                  {
                      0x003A
                  }
                  GpioIo (Exclusive, PullDefault, 0x0000, 0x0000, IoRestrictionOutputOnly,
                          "\\_SB.GPO0", 0x00, ResourceConsumer)
                  {
                      0x003D
                  }
              })
      
      In this case it finds the first GPIO (0x003A which happens to be RX pin
      for that UART), turns it into GPIO which then breaks input for the UART
      device. This also breaks systems with bluetooth connected to UART (those
      typically have some GPIOs in their _CRS).
      
      Any ideas how to fix this?
      
      We cannot just drop the _CRS index lookup fallback because that would
      break many existing machines out there so maybe we can limit this to
      only DT enabled machines. Or alternatively probe if the property first
      exists before trying to acquire the GPIOs (using
      device_property_present()).
      "
      
      This patch implements the fix suggested by Mika in his statement above.
      Signed-off-by: NStefan Roese <sr@denx.de>
      Reviewed-by: NMika Westerberg <mika.westerberg@linux.intel.com>
      Reviewed-by: NAndy Shevchenko <andriy.shevchenko@linux.intel.com>
      Tested-by: NYegor Yefremov <yegorslists@googlemail.com>
      Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
      Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
      Cc: Yegor Yefremov <yegorslists@googlemail.com>
      Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
      Cc: Giulio Benetti <giulio.benetti@micronovasrl.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      9d45fbee
    • S
      drm/msm: Depopulate platform on probe failure · e7f206f4
      Sean Paul 提交于
      [ Upstream commit 4368a1539c6b41ac3cddc06f5a5117952998804c ]
      
      add_display_components() calls of_platform_populate, and we depopluate
      on pdev remove, but not when probe fails. So if we get a probe deferral
      in one of the components, we won't depopulate the platform. This causes
      the core to keep references to devices which should be destroyed, which
      causes issues when those same devices try to re-initialize on the next
      probe attempt.
      
      I think this is the reason we had issues with the gmu's device-managed
      resources on deferral (worked around in commit 94e3a17f33a5).
      Reviewed-by: NRob Clark <robdclark@chromium.org>
      Signed-off-by: NSean Paul <seanpaul@chromium.org>
      Link: https://patchwork.freedesktop.org/patch/msgid/20190617201301.133275-3-sean@poorly.runSigned-off-by: NSasha Levin <sashal@kernel.org>
      e7f206f4
    • A
      powerpc/pci/of: Fix OF flags parsing for 64bit BARs · 216462fa
      Alexey Kardashevskiy 提交于
      [ Upstream commit df5be5be8735ef2ae80d5ae1f2453cd81a035c4b ]
      
      When the firmware does PCI BAR resource allocation, it passes the assigned
      addresses and flags (prefetch/64bit/...) via the "reg" property of
      a PCI device device tree node so the kernel does not need to do
      resource allocation.
      
      The flags are stored in resource::flags - the lower byte stores
      PCI_BASE_ADDRESS_SPACE/etc bits and the other bytes are IORESOURCE_IO/etc.
      Some flags from PCI_BASE_ADDRESS_xxx and IORESOURCE_xxx are duplicated,
      such as PCI_BASE_ADDRESS_MEM_PREFETCH/PCI_BASE_ADDRESS_MEM_TYPE_64/etc.
      When parsing the "reg" property, we copy the prefetch flag but we skip
      on PCI_BASE_ADDRESS_MEM_TYPE_64 which leaves the flags out of sync.
      
      The missing IORESOURCE_MEM_64 flag comes into play under 2 conditions:
      1. we remove PCI_PROBE_ONLY for pseries (by hacking pSeries_setup_arch()
      or by passing "/chosen/linux,pci-probe-only");
      2. we request resource alignment (by passing pci=resource_alignment=
      via the kernel cmd line to request PAGE_SIZE alignment or defining
      ppc_md.pcibios_default_alignment which returns anything but 0). Note that
      the alignment requests are ignored if PCI_PROBE_ONLY is enabled.
      
      With 1) and 2), the generic PCI code in the kernel unconditionally
      decides to:
      - reassign the BARs in pci_specified_resource_alignment() (works fine)
      - write new BARs to the device - this fails for 64bit BARs as the generic
      code looks at IORESOURCE_MEM_64 (not set) and writes only lower 32bits
      of the BAR and leaves the upper 32bit unmodified which breaks BAR mapping
      in the hypervisor.
      
      This fixes the issue by copying the flag. This is useful if we want to
      enforce certain BAR alignment per platform as handling subpage sized BARs
      is proven to cause problems with hotplug (SLOF already aligns BARs to 64k).
      Signed-off-by: NAlexey Kardashevskiy <aik@ozlabs.ru>
      Reviewed-by: NSam Bobroff <sbobroff@linux.ibm.com>
      Reviewed-by: NOliver O'Halloran <oohall@gmail.com>
      Reviewed-by: NShawn Anastasio <shawn@anastas.io>
      Signed-off-by: NMichael Ellerman <mpe@ellerman.id.au>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      216462fa
    • R
      mmc: sdhci: sdhci-pci-o2micro: Check if controller supports 8-bit width · 5d3ad905
      Raul E Rangel 提交于
      [ Upstream commit de23f0b757766d9fae59df97da6e8bdc5b231351 ]
      
      The O2 controller supports 8-bit EMMC access.
      
      JESD84-B51 section A.6.3.a defines the bus testing procedure that
      `mmc_select_bus_width()` implements. This is used to determine the actual
      bus width of the eMMC.
      Signed-off-by: NRaul E Rangel <rrangel@chromium.org>
      Acked-by: NAdrian Hunter <adrian.hunter@intel.com>
      Signed-off-by: NUlf Hansson <ulf.hansson@linaro.org>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      5d3ad905
    • A
      usb: gadget: Zero ffs_io_data · bf7cf9fb
      Andrzej Pietrasiewicz 提交于
      [ Upstream commit 508595515f4bcfe36246e4a565cf280937aeaade ]
      
      In some cases the "Allocate & copy" block in ffs_epfile_io() is not
      executed. Consequently, in such a case ffs_alloc_buffer() is never called
      and struct ffs_io_data is not initialized properly. This in turn leads to
      problems when ffs_free_buffer() is called at the end of ffs_epfile_io().
      
      This patch uses kzalloc() instead of kmalloc() in the aio case and memset()
      in non-aio case to properly initialize struct ffs_io_data.
      Signed-off-by: NAndrzej Pietrasiewicz <andrzej.p@collabora.com>
      Signed-off-by: NFelipe Balbi <felipe.balbi@linux.intel.com>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      bf7cf9fb
    • S
      tty: serial_core: Set port active bit in uart_port_activate · ac380eb4
      Serge Semin 提交于
      [ Upstream commit 13b18d35909707571af9539f7731389fbf0feb31 ]
      
      A bug was introduced by commit b3b57646 ("tty: serial_core: convert
      uart_open to use tty_port_open"). It caused a constant warning printed
      into the system log regarding the tty and port counter mismatch:
      
      [   21.644197] ttyS ttySx: tty_port_close_start: tty->count = 1 port count = 2
      
      in case if session hangup was detected so the warning is printed starting
      from the second open-close iteration.
      
      Particularly the problem was discovered in situation when there is a
      serial tty device without hardware back-end being setup. It is considered
      by the tty-serial subsystems as a hardware problem with session hang up.
      In this case uart_startup() will return a positive value with TTY_IO_ERROR
      flag set in corresponding tty_struct instance. The same value will get
      passed to be returned from the activate() callback and then being returned
      from tty_port_open(). But since in this case tty_port_block_til_ready()
      isn't called the TTY_PORT_ACTIVE flag isn't set (while the method had been
      called before tty_port_open conversion was introduced and the rest of the
      subsystem code expected the bit being set in this case), which prevents the
      uart_hangup() method to perform any cleanups including the tty port
      counter setting to zero. So the next attempt to open/close the tty device
      will discover the counters mismatch.
      
      In order to fix the problem we need to manually set the TTY_PORT_ACTIVE
      flag in case if uart_startup() returned a positive value. In this case
      the hang up procedure will perform a full set of cleanup actions including
      the port ref-counter resetting.
      
      Fixes: b3b57646 "tty: serial_core: convert uart_open to use tty_port_open"
      Signed-off-by: NSerge Semin <fancer.lancer@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      ac380eb4
    • S
      serial: imx: fix locking in set_termios() · 785e11c0
      Sergey Organov 提交于
      [ Upstream commit 4e828c3e09201512be5ee162393f334321f7cf01 ]
      
      imx_uart_set_termios() called imx_uart_rts_active(), or
      imx_uart_rts_inactive() before taking port->port.lock.
      
      As a consequence, sport->port.mctrl that these functions modify
      could have been changed without holding port->port.lock.
      
      Moved locking of port->port.lock above the calls to fix the issue.
      Signed-off-by: NSergey Organov <sorganov@gmail.com>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      Signed-off-by: NSasha Levin <sashal@kernel.org>
      785e11c0