1. 25 6月, 2018 1 次提交
  2. 14 6月, 2018 2 次提交
    • R
      PM / core: Fix supplier device runtime PM usage counter imbalance · 47e5abfb
      Rafael J. Wysocki 提交于
      If a device link is added via device_link_add() by the driver of the
      link's consumer device, the supplier's runtime PM usage counter is
      going to be dropped by the pm_runtime_put_suppliers() call in
      driver_probe_device().  However, in that case it is not incremented
      unless the supplier driver is already present and the link is not
      stateless.  That leads to a runtime PM usage counter imbalance for
      the supplier device in a few cases.
      
      To prevent that from happening, bump up the supplier runtime
      PM usage counter in device_link_add() for all links with the
      DL_FLAG_PM_RUNTIME flag set that are added at the consumer probe
      time.  Use pm_runtime_get_noresume() for that as the callers of
      device_link_add() who want the supplier to be resumed by it are
      expected to pass DL_FLAG_RPM_ACTIVE in flags to it anyway, but
      additionally resume the supplier if the link is added during
      consumer driver probe to retain the existing behavior for the
      callers depending on it.
      
      Fixes: 21d5c57b (PM / runtime: Use device links)
      Reported-by: NUlf Hansson <ulf.hansson@linaro.org>
      Reviewed-by: NUlf Hansson <ulf.hansson@linaro.org>
      Tested-by: NMarek Szyprowski <m.szyprowski@samsung.com>
      Cc: 4.10+ <stable@vger.kernel.org> # 4.10+
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      47e5abfb
    • C
      dma-mapping: move all DMA mapping code to kernel/dma · cf65a0f6
      Christoph Hellwig 提交于
      Currently the code is split over various files with dma- prefixes in the
      lib/ and drives/base directories, and the number of files keeps growing.
      Move them into a single directory to keep the code together and remove
      the file name prefixes.  To match the irq infrastructure this directory
      is placed under the kernel/ directory.
      Signed-off-by: NChristoph Hellwig <hch@lst.de>
      cf65a0f6
  3. 13 6月, 2018 1 次提交
    • K
      treewide: Use array_size() in vmalloc() · 42bc47b3
      Kees Cook 提交于
      The vmalloc() function has no 2-factor argument form, so multiplication
      factors need to be wrapped in array_size(). This patch replaces cases of:
      
              vmalloc(a * b)
      
      with:
              vmalloc(array_size(a, b))
      
      as well as handling cases of:
      
              vmalloc(a * b * c)
      
      with:
      
              vmalloc(array3_size(a, b, c))
      
      This does, however, attempt to ignore constant size factors like:
      
              vmalloc(4 * 1024)
      
      though any constants defined via macros get caught up in the conversion.
      
      Any factors with a sizeof() of "unsigned char", "char", and "u8" were
      dropped, since they're redundant.
      
      The Coccinelle script used for this was:
      
      // Fix redundant parens around sizeof().
      @@
      type TYPE;
      expression THING, E;
      @@
      
      (
        vmalloc(
      -	(sizeof(TYPE)) * E
      +	sizeof(TYPE) * E
        , ...)
      |
        vmalloc(
      -	(sizeof(THING)) * E
      +	sizeof(THING) * E
        , ...)
      )
      
      // Drop single-byte sizes and redundant parens.
      @@
      expression COUNT;
      typedef u8;
      typedef __u8;
      @@
      
      (
        vmalloc(
      -	sizeof(u8) * (COUNT)
      +	COUNT
        , ...)
      |
        vmalloc(
      -	sizeof(__u8) * (COUNT)
      +	COUNT
        , ...)
      |
        vmalloc(
      -	sizeof(char) * (COUNT)
      +	COUNT
        , ...)
      |
        vmalloc(
      -	sizeof(unsigned char) * (COUNT)
      +	COUNT
        , ...)
      |
        vmalloc(
      -	sizeof(u8) * COUNT
      +	COUNT
        , ...)
      |
        vmalloc(
      -	sizeof(__u8) * COUNT
      +	COUNT
        , ...)
      |
        vmalloc(
      -	sizeof(char) * COUNT
      +	COUNT
        , ...)
      |
        vmalloc(
      -	sizeof(unsigned char) * COUNT
      +	COUNT
        , ...)
      )
      
      // 2-factor product with sizeof(type/expression) and identifier or constant.
      @@
      type TYPE;
      expression THING;
      identifier COUNT_ID;
      constant COUNT_CONST;
      @@
      
      (
        vmalloc(
      -	sizeof(TYPE) * (COUNT_ID)
      +	array_size(COUNT_ID, sizeof(TYPE))
        , ...)
      |
        vmalloc(
      -	sizeof(TYPE) * COUNT_ID
      +	array_size(COUNT_ID, sizeof(TYPE))
        , ...)
      |
        vmalloc(
      -	sizeof(TYPE) * (COUNT_CONST)
      +	array_size(COUNT_CONST, sizeof(TYPE))
        , ...)
      |
        vmalloc(
      -	sizeof(TYPE) * COUNT_CONST
      +	array_size(COUNT_CONST, sizeof(TYPE))
        , ...)
      |
        vmalloc(
      -	sizeof(THING) * (COUNT_ID)
      +	array_size(COUNT_ID, sizeof(THING))
        , ...)
      |
        vmalloc(
      -	sizeof(THING) * COUNT_ID
      +	array_size(COUNT_ID, sizeof(THING))
        , ...)
      |
        vmalloc(
      -	sizeof(THING) * (COUNT_CONST)
      +	array_size(COUNT_CONST, sizeof(THING))
        , ...)
      |
        vmalloc(
      -	sizeof(THING) * COUNT_CONST
      +	array_size(COUNT_CONST, sizeof(THING))
        , ...)
      )
      
      // 2-factor product, only identifiers.
      @@
      identifier SIZE, COUNT;
      @@
      
        vmalloc(
      -	SIZE * COUNT
      +	array_size(COUNT, SIZE)
        , ...)
      
      // 3-factor product with 1 sizeof(type) or sizeof(expression), with
      // redundant parens removed.
      @@
      expression THING;
      identifier STRIDE, COUNT;
      type TYPE;
      @@
      
      (
        vmalloc(
      -	sizeof(TYPE) * (COUNT) * (STRIDE)
      +	array3_size(COUNT, STRIDE, sizeof(TYPE))
        , ...)
      |
        vmalloc(
      -	sizeof(TYPE) * (COUNT) * STRIDE
      +	array3_size(COUNT, STRIDE, sizeof(TYPE))
        , ...)
      |
        vmalloc(
      -	sizeof(TYPE) * COUNT * (STRIDE)
      +	array3_size(COUNT, STRIDE, sizeof(TYPE))
        , ...)
      |
        vmalloc(
      -	sizeof(TYPE) * COUNT * STRIDE
      +	array3_size(COUNT, STRIDE, sizeof(TYPE))
        , ...)
      |
        vmalloc(
      -	sizeof(THING) * (COUNT) * (STRIDE)
      +	array3_size(COUNT, STRIDE, sizeof(THING))
        , ...)
      |
        vmalloc(
      -	sizeof(THING) * (COUNT) * STRIDE
      +	array3_size(COUNT, STRIDE, sizeof(THING))
        , ...)
      |
        vmalloc(
      -	sizeof(THING) * COUNT * (STRIDE)
      +	array3_size(COUNT, STRIDE, sizeof(THING))
        , ...)
      |
        vmalloc(
      -	sizeof(THING) * COUNT * STRIDE
      +	array3_size(COUNT, STRIDE, sizeof(THING))
        , ...)
      )
      
      // 3-factor product with 2 sizeof(variable), with redundant parens removed.
      @@
      expression THING1, THING2;
      identifier COUNT;
      type TYPE1, TYPE2;
      @@
      
      (
        vmalloc(
      -	sizeof(TYPE1) * sizeof(TYPE2) * COUNT
      +	array3_size(COUNT, sizeof(TYPE1), sizeof(TYPE2))
        , ...)
      |
        vmalloc(
      -	sizeof(TYPE1) * sizeof(THING2) * (COUNT)
      +	array3_size(COUNT, sizeof(TYPE1), sizeof(TYPE2))
        , ...)
      |
        vmalloc(
      -	sizeof(THING1) * sizeof(THING2) * COUNT
      +	array3_size(COUNT, sizeof(THING1), sizeof(THING2))
        , ...)
      |
        vmalloc(
      -	sizeof(THING1) * sizeof(THING2) * (COUNT)
      +	array3_size(COUNT, sizeof(THING1), sizeof(THING2))
        , ...)
      |
        vmalloc(
      -	sizeof(TYPE1) * sizeof(THING2) * COUNT
      +	array3_size(COUNT, sizeof(TYPE1), sizeof(THING2))
        , ...)
      |
        vmalloc(
      -	sizeof(TYPE1) * sizeof(THING2) * (COUNT)
      +	array3_size(COUNT, sizeof(TYPE1), sizeof(THING2))
        , ...)
      )
      
      // 3-factor product, only identifiers, with redundant parens removed.
      @@
      identifier STRIDE, SIZE, COUNT;
      @@
      
      (
        vmalloc(
      -	(COUNT) * STRIDE * SIZE
      +	array3_size(COUNT, STRIDE, SIZE)
        , ...)
      |
        vmalloc(
      -	COUNT * (STRIDE) * SIZE
      +	array3_size(COUNT, STRIDE, SIZE)
        , ...)
      |
        vmalloc(
      -	COUNT * STRIDE * (SIZE)
      +	array3_size(COUNT, STRIDE, SIZE)
        , ...)
      |
        vmalloc(
      -	(COUNT) * (STRIDE) * SIZE
      +	array3_size(COUNT, STRIDE, SIZE)
        , ...)
      |
        vmalloc(
      -	COUNT * (STRIDE) * (SIZE)
      +	array3_size(COUNT, STRIDE, SIZE)
        , ...)
      |
        vmalloc(
      -	(COUNT) * STRIDE * (SIZE)
      +	array3_size(COUNT, STRIDE, SIZE)
        , ...)
      |
        vmalloc(
      -	(COUNT) * (STRIDE) * (SIZE)
      +	array3_size(COUNT, STRIDE, SIZE)
        , ...)
      |
        vmalloc(
      -	COUNT * STRIDE * SIZE
      +	array3_size(COUNT, STRIDE, SIZE)
        , ...)
      )
      
      // Any remaining multi-factor products, first at least 3-factor products
      // when they're not all constants...
      @@
      expression E1, E2, E3;
      constant C1, C2, C3;
      @@
      
      (
        vmalloc(C1 * C2 * C3, ...)
      |
        vmalloc(
      -	E1 * E2 * E3
      +	array3_size(E1, E2, E3)
        , ...)
      )
      
      // And then all remaining 2 factors products when they're not all constants.
      @@
      expression E1, E2;
      constant C1, C2;
      @@
      
      (
        vmalloc(C1 * C2, ...)
      |
        vmalloc(
      -	E1 * E2
      +	array_size(E1, E2)
        , ...)
      )
      Signed-off-by: NKees Cook <keescook@chromium.org>
      42bc47b3
  4. 12 6月, 2018 1 次提交
  5. 06 6月, 2018 6 次提交
    • R
      PM / wakeup: Export wakeup_count instead of event_count via sysfs · 2d5ed61c
      Ravi Chandra Sadineni 提交于
      Currently we export event_count instead of wakeup_count via the
      per-device wakeup_count sysfs attribute. Change it to wakeup_count
      to make it more meaningful.
      
      wakeup_count increments only when events_check_enabled is set,
      that is whenever writes the current wakeup count to
      /sys/power/wakeup_count.  Also events_check_enabled is cleared on
      every resume. User space is expected to write to this just before
      suspend.  This way pm_wakeup_event(), when called from IRQs handles,
      will increment wakeup_count only if we are in system-wide
      suspend-resume cycle and should give a fair approximation of how many
      times a device may have triggered a wakeup from system suspend.
      
      event_count on the other hand will increment every time
      pm_wakeup_event() is called irrespective of whether we are in a
      suspend-resume cycle and some drivers call it on every interrupt
      which makes it less useful for system wakeup tracking.
      Signed-off-by: NRavi Chandra Sadineni <ravisadineni@chromium.org>
      Acked-by: NPavel Machek <pavel@ucw.cz>
      [ rjw: Subject & changelog ]
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      2d5ed61c
    • U
      PM / Domains: Add dev_pm_domain_attach_by_id() to manage multi PM domains · 82e12d9e
      Ulf Hansson 提交于
      The existing dev_pm_domain_attach() function, allows a single PM domain to
      be attached per device. To be able to support devices that are partitioned
      across multiple PM domains, let's introduce a new interface,
      dev_pm_domain_attach_by_id().
      
      The dev_pm_domain_attach_by_id() returns a new allocated struct device with
      the corresponding attached PM domain. This enables for example a driver to
      operate on the new device from a power management point of view. The driver
      may then also benefit from using the received device, to set up so called
      device-links towards its original device. Depending on the situation, these
      links may then be dynamically changed.
      
      The new interface is typically called by drivers during their probe phase,
      in case they manages devices which uses multiple PM domains. If that is the
      case, the driver also becomes responsible of managing the detaching of the
      PM domains, which typically should be done at the remove phase. Detaching
      is done by calling the existing dev_pm_domain_detach() function and for
      each of the received devices from dev_pm_domain_attach_by_id().
      
      Note, currently its only genpd that supports multiple PM domains per
      device, but dev_pm_domain_attach_by_id() can easily by extended to cover
      other PM domain types, if/when needed.
      Signed-off-by: NUlf Hansson <ulf.hansson@linaro.org>
      Acked-by: NJon Hunter <jonathanh@nvidia.com>
      Tested-by: NJon Hunter <jonathanh@nvidia.com>
      Reviewed-by: NViresh Kumar <viresh.kumar@linaro.org>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      82e12d9e
    • U
      PM / Domains: Add support for multi PM domains per device to genpd · 3c095f32
      Ulf Hansson 提交于
      To support devices being partitioned across multiple PM domains, let's
      begin with extending genpd to cope with these kind of configurations.
      
      Therefore, add a new exported function genpd_dev_pm_attach_by_id(), which
      is similar to the existing genpd_dev_pm_attach(), but with the difference
      that it allows its callers to provide an index to the PM domain that it
      wants to attach.
      
      Note that, genpd_dev_pm_attach_by_id() shall only be called by the driver
      core / PM core, similar to how the existing dev_pm_domain_attach() makes
      use of genpd_dev_pm_attach(). However, this is implemented by following
      changes on top.
      
      Because, only one PM domain can be attached per device, genpd needs to
      create a virtual device that it can attach/detach instead. More precisely,
      let the new function genpd_dev_pm_attach_by_id() register a virtual struct
      device via calling device_register(). Then let it attach this device to the
      corresponding PM domain, rather than the one that is provided by the
      caller. The actual attaching is done via re-using the existing genpd OF
      functions.
      
      At successful attachment, genpd_dev_pm_attach_by_id() returns the created
      virtual device, which allows the caller to operate on it to deal with power
      management. Following changes on top, provides more details in this
      regards.
      
      To deal with detaching of a PM domain for the multiple PM domains case,
      let's also extend the existing genpd_dev_pm_detach() function, to cover the
      cleanup of the created virtual device, via make it call device_unregister()
      on it. In this way, there is no need to introduce a new function to deal
      with detach for the multiple PM domain case, but instead the existing one
      is re-used.
      Signed-off-by: NUlf Hansson <ulf.hansson@linaro.org>
      Acked-by: NJon Hunter <jonathanh@nvidia.com>
      Tested-by: NJon Hunter <jonathanh@nvidia.com>
      Reviewed-by: NViresh Kumar <viresh.kumar@linaro.org>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      3c095f32
    • U
      PM / Domains: Split genpd_dev_pm_attach() · 8cb1cbd6
      Ulf Hansson 提交于
      To extend genpd to deal with allowing multiple PM domains per device, some
      of the code in genpd_dev_pm_attach() can be re-used. Let's prepare for this
      by moving some of the code into a sub-function.
      Signed-off-by: NUlf Hansson <ulf.hansson@linaro.org>
      Acked-by: NJon Hunter <jonathanh@nvidia.com>
      Tested-by: NJon Hunter <jonathanh@nvidia.com>
      Reviewed-by: NViresh Kumar <viresh.kumar@linaro.org>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      8cb1cbd6
    • U
      PM / Domains: Don't attach devices in genpd with multi PM domains · bcd931f2
      Ulf Hansson 提交于
      The power-domain DT property may now contain a list of PM domain
      specifiers, which represents that a device are partitioned across multiple
      PM domains. This leads to a new situation in genpd_dev_pm_attach(), as only
      one PM domain can be attached per device.
      
      To remain things simple for the most common configuration, when a single PM
      domain is used, let's treat the multiple PM domain case as being specific.
      
      In other words, let's change genpd_dev_pm_attach() to check for multiple PM
      domains and prevent it from attach any PM domain for this case. Instead,
      leave this to be managed separately, from following changes to genpd.
      Suggested-by: NJon Hunter <jonathanh@nvidia.com>
      Signed-off-by: NUlf Hansson <ulf.hansson@linaro.org>
      Acked-by: NJon Hunter <jonathanh@nvidia.com>
      Tested-by: NJon Hunter <jonathanh@nvidia.com>
      Reviewed-by: NViresh Kumar <viresh.kumar@linaro.org>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      bcd931f2
    • K
      device: Use overflow helpers for devm_kmalloc() · 2509b561
      Kees Cook 提交于
      Use the overflow helpers both in existing multiplication-using inlines as
      well as the addition-overflow case in the core allocation routine.
      Signed-off-by: NKees Cook <keescook@chromium.org>
      2509b561
  6. 31 5月, 2018 1 次提交
    • M
      driver core: hold dev's parent lock when needed · 8c97a46a
      Martin Liu 提交于
      SoC have internal I/O buses that can't be proved for devices. The
      devices on the buses can be accessed directly without additinal
      configuration required. This type of bus is represented as
      "simple-bus". In some platforms, we name "soc" with "simple-bus"
      attribute and many devices are hooked under it described in DT
      (device tree).
      
      In commit bf74ad5b ("Hold the device's parent's lock during
      probe and remove") to solve USB subsystem lock sequence since
      USB device's characteristic. Thus "soc" needs to be locked
      whenever a device and driver's probing happen under "soc" bus.
      During this period, an async driver tries to probe a device which
      is under the "soc" bus would be blocked until previous driver
      finish the probing and release "soc" lock. And the next probing
      under the "soc" bus need to wait for async finish. Because of
      that, driver's async probe for init time improvement will be
      shadowed.
      
      Since many devices don't have USB devices' characteristic, they
      actually don't need parent's lock. Thus, we introduce a lock flag
      in bus_type struct and driver core would lock the parent lock base
      on the flag. For USB, we set this flag in usb_bus_type to keep
      original lock behavior in driver core.
      
      Async probe could have more benefit after this patch.
      Signed-off-by: NMartin Liu <liumartin@google.com>
      Acked-by: NAlan Stern <stern@rowland.harvard.edu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      8c97a46a
  7. 30 5月, 2018 4 次提交
  8. 27 5月, 2018 3 次提交
    • U
      PM / runtime: Drop usage count for suppliers at device link removal · a0504aec
      Ulf Hansson 提交于
      In the case consumer device is runtime resumed, while the link to the
      supplier is removed, the earlier call to pm_runtime_get_sync() made from
      rpm_get_suppliers() does not get properly balanced with a corresponding
      call to pm_runtime_put(). This leads to that suppliers remains to be
      runtime resumed forever, while they don't need to.
      
      Let's fix the behaviour by calling rpm_put_suppliers() when dropping a
      device link. Not that, since rpm_put_suppliers() checks the
      link->rpm_active flag, we can correctly avoid to call pm_runtime_put() in
      cases when we shouldn't.
      Reported-by: NTodor Tomov <todor.tomov@linaro.org>
      Fixes: 21d5c57b (PM / runtime: Use device links)
      Signed-off-by: NUlf Hansson <ulf.hansson@linaro.org>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      a0504aec
    • U
      PM / runtime: Fixup reference counting of device link suppliers at probe · 1e837861
      Ulf Hansson 提交于
      In the driver core, before it invokes really_probe() it runtime resumes the
      suppliers for the device via calling pm_runtime_get_suppliers(), which also
      increases the runtime PM usage count for each of the available supplier.
      
      This makes sense, as to be able to allow the consumer device to be probed
      by its driver. However, if the driver decides to add a new supplier link
      during ->probe(), hence updating the list of suppliers, the following call
      to pm_runtime_put_suppliers(), invoked after really_probe() in the driver
      core, we get into trouble.
      
      More precisely, pm_runtime_put() gets called also for the new supplier(s),
      which is wrong as the driver core, didn't trigger pm_runtime_get_sync() to
      be called for it in the first place. In other words, the new supplier may
      be runtime suspended even in cases when it shouldn't.
      
      Fix this behaviour, by runtime resume suppliers according to the same
      conditions as managed by the runtime PM core, when runtime resume callbacks
      are being invoked.
      
      Additionally, don't try to runtime suspend any of the suppliers after
      really_probe(), but instead rely on that to happen via the consumer device,
      when it becomes runtime suspended.
      
      Fixes: 21d5c57b (PM / runtime: Use device links)
      Signed-off-by: NUlf Hansson <ulf.hansson@linaro.org>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      1e837861
    • S
      PM / wakeup: Make events_lock a RAW_SPINLOCK · bccaadab
      Sebastian Andrzej Siewior 提交于
      The `events_lock' is acquired during suspend while interrupts are
      disabled even on RT. The lock is taken only for a very brief moment.
      Make it a RAW lock which avoids "sleeping while atomic" warnings on RT.
      Signed-off-by: NSebastian Andrzej Siewior <bigeasy@linutronix.de>
      Signed-off-by: NRafael J. Wysocki <rafael.j.wysocki@intel.com>
      bccaadab
  9. 26 5月, 2018 3 次提交
    • J
      mm/memory_hotplug: fix leftover use of struct page during hotplug · a2155861
      Jonathan Cameron 提交于
      The case of a new numa node got missed in avoiding using the node info
      from page_struct during hotplug.  In this path we have a call to
      register_mem_sect_under_node (which allows us to specify it is hotplug
      so don't change the node), via link_mem_sections which unfortunately
      does not.
      
      Fix is to pass check_nid through link_mem_sections as well and disable
      it in the new numa node path.
      
      Note the bug only 'sometimes' manifests depending on what happens to be
      in the struct page structures - there are lots of them and it only needs
      to match one of them.
      
      The result of the bug is that (with a new memory only node) we never
      successfully call register_mem_sect_under_node so don't get the memory
      associated with the node in sysfs and meminfo for the node doesn't
      report it.
      
      It came up whilst testing some arm64 hotplug patches, but appears to be
      universal.  Whilst I'm triggering it by removing then reinserting memory
      to a node with no other elements (thus making the node disappear then
      appear again), it appears it would happen on hotplugging memory where
      there was none before and it doesn't seem to be related the arm64
      patches.
      
      These patches call __add_pages (where most of the issue was fixed by
      Pavel's patch).  If there is a node at the time of the __add_pages call
      then all is well as it calls register_mem_sect_under_node from there
      with check_nid set to false.  Without a node that function returns
      having not done the sysfs related stuff as there is no node to use.
      This is expected but it is the resulting path that fails...
      
      Exact path to the problem is as follows:
      
       mm/memory_hotplug.c: add_memory_resource()
      
         The node is not online so we enter the 'if (new_node)' twice, on the
         second such block there is a call to link_mem_sections which calls
         into
      
        drivers/node.c: link_mem_sections() which calls
      
        drivers/node.c: register_mem_sect_under_node() which calls
           get_nid_for_pfn and keeps trying until the output of that matches
           the expected node (passed all the way down from
           add_memory_resource)
      
      It is effectively the same fix as the one referred to in the fixes tag
      just in the code path for a new node where the comments point out we
      have to rerun the link creation because it will have failed in
      register_new_memory (as there was no node at the time).  (actually that
      comment is wrong now as we don't have register_new_memory any more it
      got renamed to hotplug_memory_register in Pavel's patch).
      
      Link: http://lkml.kernel.org/r/20180504085311.1240-1-Jonathan.Cameron@huawei.com
      Fixes: fc44f7f9 ("mm/memory_hotplug: don't read nid from struct page during hotplug")
      Signed-off-by: NJonathan Cameron <Jonathan.Cameron@huawei.com>
      Reviewed-by: NPavel Tatashin <pasha.tatashin@oracle.com>
      Acked-by: NMichal Hocko <mhocko@suse.com>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      a2155861
    • S
      regmap: slimbus: allow register offsets up to 16 bits · cbdd39ca
      Srinivas Kandagatla 提交于
      As per SLIMBus specs Value Elements and Information Elements
      address map ranges from 0x000 - 0xFFF.
      
      So allow register addresses up to 16 bits
      
      Fixes: 7d6f7fb0 ("regmap: add SLIMbus support")
      Signed-off-by: NSrinivas Kandagatla <srinivas.kandagatla@linaro.org>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      cbdd39ca
    • F
      driver-core: return EINVAL error instead of BUG_ON() · 0dda2bb6
      Florian Schmaus 提交于
      I triggerd the BUG_ON() in driver_register() when booting a domU Xen
      domain. Since there was no contextual information logged, I needed to
      attach kgdb to determine the culprit (the wmi-bmof driver in my
      case). The BUG_ON() was added in commit f48f3feb ("driver-core: do
      not register a driver with bus_type not registered").
      
      Instead of running into a BUG_ON() we print an error message
      identifying the, likely faulty, driver but continue booting.
      Signed-off-by: NFlorian Schmaus <flo@geekplace.eu>
      Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
      0dda2bb6
  10. 25 5月, 2018 1 次提交
  11. 24 5月, 2018 1 次提交
  12. 22 5月, 2018 1 次提交
  13. 18 5月, 2018 4 次提交
  14. 17 5月, 2018 3 次提交
  15. 15 5月, 2018 7 次提交
  16. 14 5月, 2018 1 次提交