--- /dev/null
+From e60cbeedc48d80689c249ab5dcc3c31ad0452dea Mon Sep 17 00:00:00 2001
+From: Johannes Berg <johannes.berg@intel.com>
+Date: Thu, 22 May 2014 11:54:23 -0700
+Subject: Documentation: fix DOCBOOKS=... building
+
+From: Johannes Berg <johannes.berg@intel.com>
+
+commit e60cbeedc48d80689c249ab5dcc3c31ad0452dea upstream.
+
+Prior to commit 4266129964b8 ("[media] DocBook: Move all media docbook
+stuff into its own directory") it was possible to build only a single
+(or more) book(s) by calling, for example
+
+ make htmldocs DOCBOOKS=80211.xml
+
+This now fails:
+
+ cp: target `.../Documentation/DocBook//media_api' is not a directory
+
+Ignore errors from that copy to make this possible again.
+
+Fixes: 4266129964b8 ("[media] DocBook: Move all media docbook stuff into its own directory")
+Signed-off-by: Johannes Berg <johannes.berg@intel.com>
+Acked-by: Randy Dunlap <rdunlap@xenotime.net>
+Cc: Mauro Carvalho Chehab <mchehab@redhat.com>
+Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
+Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ Documentation/DocBook/media/Makefile | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/Documentation/DocBook/media/Makefile
++++ b/Documentation/DocBook/media/Makefile
+@@ -195,7 +195,7 @@ DVB_DOCUMENTED = \
+ #
+
+ install_media_images = \
+- $(Q)cp $(OBJIMGFILES) $(MEDIA_SRC_DIR)/v4l/*.svg $(MEDIA_OBJ_DIR)/media_api
++ $(Q)-cp $(OBJIMGFILES) $(MEDIA_SRC_DIR)/v4l/*.svg $(MEDIA_OBJ_DIR)/media_api
+
+ $(MEDIA_OBJ_DIR)/%: $(MEDIA_SRC_DIR)/%.b64
+ $(Q)base64 -d $< >$@
--- /dev/null
+From 0f1d360b2ee3a2a0f510d3f1bcd3f5ebe5d41265 Mon Sep 17 00:00:00 2001
+From: Ben Skeggs <bskeggs@redhat.com>
+Date: Tue, 20 May 2014 16:13:54 +1000
+Subject: drm/gf119-/disp: fix nasty bug which can clobber SOR0's clock setup
+
+From: Ben Skeggs <bskeggs@redhat.com>
+
+commit 0f1d360b2ee3a2a0f510d3f1bcd3f5ebe5d41265 upstream.
+
+Fixes a LVDS bleed issue on Lenovo W530 that can occur under a
+number of circumstances.
+
+Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/nouveau/core/engine/disp/nvd0.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/nouveau/core/engine/disp/nvd0.c
++++ b/drivers/gpu/drm/nouveau/core/engine/disp/nvd0.c
+@@ -732,7 +732,7 @@ exec_clkcmp(struct nv50_disp_priv *priv,
+ }
+
+ if (outp == 8)
+- return false;
++ return conf;
+
+ data = exec_lookup(priv, head, outp, ctrl, dcb, &ver, &hdr, &cnt, &len, &info1);
+ if (data == 0x0000)
--- /dev/null
+From 544092596e8ac269f70e70961b5e9381909c9b1e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
+Date: Mon, 5 May 2014 18:40:12 +0200
+Subject: drm/radeon: also try GART for CPU accessed buffers
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: =?UTF-8?q?Christian=20K=C3=B6nig?= <christian.koenig@amd.com>
+
+commit 544092596e8ac269f70e70961b5e9381909c9b1e upstream.
+
+Placing them exclusively into VRAM might not work all the time.
+
+Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=78297
+
+Signed-off-by: Christian König <christian.koenig@amd.com>
+Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/radeon_object.c | 38 +++++++++++++++++++--------------
+ 1 file changed, 23 insertions(+), 15 deletions(-)
+
+--- a/drivers/gpu/drm/radeon/radeon_object.c
++++ b/drivers/gpu/drm/radeon/radeon_object.c
+@@ -586,22 +586,30 @@ int radeon_bo_fault_reserve_notify(struc
+ rbo = container_of(bo, struct radeon_bo, tbo);
+ radeon_bo_check_tiling(rbo, 0, 0);
+ rdev = rbo->rdev;
+- if (bo->mem.mem_type == TTM_PL_VRAM) {
+- size = bo->mem.num_pages << PAGE_SHIFT;
+- offset = bo->mem.start << PAGE_SHIFT;
+- if ((offset + size) > rdev->mc.visible_vram_size) {
+- /* hurrah the memory is not visible ! */
+- radeon_ttm_placement_from_domain(rbo, RADEON_GEM_DOMAIN_VRAM);
+- rbo->placement.lpfn = rdev->mc.visible_vram_size >> PAGE_SHIFT;
+- r = ttm_bo_validate(bo, &rbo->placement, false, false);
+- if (unlikely(r != 0))
+- return r;
+- offset = bo->mem.start << PAGE_SHIFT;
+- /* this should not happen */
+- if ((offset + size) > rdev->mc.visible_vram_size)
+- return -EINVAL;
+- }
++ if (bo->mem.mem_type != TTM_PL_VRAM)
++ return 0;
++
++ size = bo->mem.num_pages << PAGE_SHIFT;
++ offset = bo->mem.start << PAGE_SHIFT;
++ if ((offset + size) <= rdev->mc.visible_vram_size)
++ return 0;
++
++ /* hurrah the memory is not visible ! */
++ radeon_ttm_placement_from_domain(rbo, RADEON_GEM_DOMAIN_VRAM);
++ rbo->placement.lpfn = rdev->mc.visible_vram_size >> PAGE_SHIFT;
++ r = ttm_bo_validate(bo, &rbo->placement, false, false);
++ if (unlikely(r == -ENOMEM)) {
++ radeon_ttm_placement_from_domain(rbo, RADEON_GEM_DOMAIN_GTT);
++ return ttm_bo_validate(bo, &rbo->placement, false, false);
++ } else if (unlikely(r != 0)) {
++ return r;
+ }
++
++ offset = bo->mem.start << PAGE_SHIFT;
++ /* this should never happen */
++ if ((offset + size) > rdev->mc.visible_vram_size)
++ return -EINVAL;
++
+ return 0;
+ }
+
--- /dev/null
+From 4955bb073f1be6dd884b5d10041ba4bade6495bf Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexdeucher@gmail.com>
+Date: Mon, 5 May 2014 16:40:42 -0400
+Subject: drm/radeon: fix register typo on si
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Alex Deucher <alexdeucher@gmail.com>
+
+commit 4955bb073f1be6dd884b5d10041ba4bade6495bf upstream.
+
+Probably a copy paste typo.
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Christian König <christian.koenig@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/sid.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+--- a/drivers/gpu/drm/radeon/sid.h
++++ b/drivers/gpu/drm/radeon/sid.h
+@@ -107,8 +107,8 @@
+ #define SPLL_CHG_STATUS (1 << 1)
+ #define SPLL_CNTL_MODE 0x618
+ #define SPLL_SW_DIR_CONTROL (1 << 0)
+-# define SPLL_REFCLK_SEL(x) ((x) << 8)
+-# define SPLL_REFCLK_SEL_MASK 0xFF00
++# define SPLL_REFCLK_SEL(x) ((x) << 26)
++# define SPLL_REFCLK_SEL_MASK (3 << 26)
+
+ #define CG_SPLL_SPREAD_SPECTRUM 0x620
+ #define SSEN (1 << 0)
--- /dev/null
+From d8ade3526b2aa0505132c404c05a38b73ea15490 Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexdeucher@gmail.com>
+Date: Thu, 8 May 2014 20:04:03 -0400
+Subject: drm/radeon: handle non-VGA class pci devices with ATRM
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Alex Deucher <alexdeucher@gmail.com>
+
+commit d8ade3526b2aa0505132c404c05a38b73ea15490 upstream.
+
+Newer PX systems have non-VGA pci class dGPUs. Update
+the ATRM fetch method to handle those cases.
+
+bug:
+https://bugzilla.kernel.org/show_bug.cgi?id=75401
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Christian König <christian.koenig@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/radeon_bios.c | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+--- a/drivers/gpu/drm/radeon/radeon_bios.c
++++ b/drivers/gpu/drm/radeon/radeon_bios.c
+@@ -196,6 +196,20 @@ static bool radeon_atrm_get_bios(struct
+ }
+ }
+
++ if (!found) {
++ while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_OTHER << 8, pdev)) != NULL) {
++ dhandle = ACPI_HANDLE(&pdev->dev);
++ if (!dhandle)
++ continue;
++
++ status = acpi_get_handle(dhandle, "ATRM", &atrm_handle);
++ if (!ACPI_FAILURE(status)) {
++ found = true;
++ break;
++ }
++ }
++ }
++
+ if (!found)
+ return false;
+
--- /dev/null
+From 4f2f203976964e267dc477de6648bdb3acd2b74b Mon Sep 17 00:00:00 2001
+From: Alex Deucher <alexdeucher@gmail.com>
+Date: Mon, 19 May 2014 19:21:29 -0400
+Subject: drm/radeon/pm: don't allow debugfs/sysfs access when PX card is off (v2)
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Alex Deucher <alexdeucher@gmail.com>
+
+commit 4f2f203976964e267dc477de6648bdb3acd2b74b upstream.
+
+When the PX card is off don't try and access it. Avoid hw access
+to the card while it's off (e.g., reading back invalid temperature).
+
+v2: be less strict
+
+bug:
+https://bugzilla.kernel.org/show_bug.cgi?id=76321
+
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+Signed-off-by: Christian König <christian.koenig@amd.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/gpu/drm/radeon/radeon_pm.c | 42 ++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 41 insertions(+), 1 deletion(-)
+
+--- a/drivers/gpu/drm/radeon/radeon_pm.c
++++ b/drivers/gpu/drm/radeon/radeon_pm.c
+@@ -361,6 +361,11 @@ static ssize_t radeon_set_pm_profile(str
+ struct drm_device *ddev = dev_get_drvdata(dev);
+ struct radeon_device *rdev = ddev->dev_private;
+
++ /* Can't set profile when the card is off */
++ if ((rdev->flags & RADEON_IS_PX) &&
++ (ddev->switch_power_state != DRM_SWITCH_POWER_ON))
++ return -EINVAL;
++
+ mutex_lock(&rdev->pm.mutex);
+ if (rdev->pm.pm_method == PM_METHOD_PROFILE) {
+ if (strncmp("default", buf, strlen("default")) == 0)
+@@ -409,6 +414,13 @@ static ssize_t radeon_set_pm_method(stru
+ struct drm_device *ddev = dev_get_drvdata(dev);
+ struct radeon_device *rdev = ddev->dev_private;
+
++ /* Can't set method when the card is off */
++ if ((rdev->flags & RADEON_IS_PX) &&
++ (ddev->switch_power_state != DRM_SWITCH_POWER_ON)) {
++ count = -EINVAL;
++ goto fail;
++ }
++
+ /* we don't support the legacy modes with dpm */
+ if (rdev->pm.pm_method == PM_METHOD_DPM) {
+ count = -EINVAL;
+@@ -446,6 +458,10 @@ static ssize_t radeon_get_dpm_state(stru
+ struct radeon_device *rdev = ddev->dev_private;
+ enum radeon_pm_state_type pm = rdev->pm.dpm.user_state;
+
++ if ((rdev->flags & RADEON_IS_PX) &&
++ (ddev->switch_power_state != DRM_SWITCH_POWER_ON))
++ return snprintf(buf, PAGE_SIZE, "off\n");
++
+ return snprintf(buf, PAGE_SIZE, "%s\n",
+ (pm == POWER_STATE_TYPE_BATTERY) ? "battery" :
+ (pm == POWER_STATE_TYPE_BALANCED) ? "balanced" : "performance");
+@@ -459,6 +475,11 @@ static ssize_t radeon_set_dpm_state(stru
+ struct drm_device *ddev = dev_get_drvdata(dev);
+ struct radeon_device *rdev = ddev->dev_private;
+
++ /* Can't set dpm state when the card is off */
++ if ((rdev->flags & RADEON_IS_PX) &&
++ (ddev->switch_power_state != DRM_SWITCH_POWER_ON))
++ return -EINVAL;
++
+ mutex_lock(&rdev->pm.mutex);
+ if (strncmp("battery", buf, strlen("battery")) == 0)
+ rdev->pm.dpm.user_state = POWER_STATE_TYPE_BATTERY;
+@@ -485,6 +506,10 @@ static ssize_t radeon_get_dpm_forced_per
+ struct radeon_device *rdev = ddev->dev_private;
+ enum radeon_dpm_forced_level level = rdev->pm.dpm.forced_level;
+
++ if ((rdev->flags & RADEON_IS_PX) &&
++ (ddev->switch_power_state != DRM_SWITCH_POWER_ON))
++ return snprintf(buf, PAGE_SIZE, "off\n");
++
+ return snprintf(buf, PAGE_SIZE, "%s\n",
+ (level == RADEON_DPM_FORCED_LEVEL_AUTO) ? "auto" :
+ (level == RADEON_DPM_FORCED_LEVEL_LOW) ? "low" : "high");
+@@ -500,6 +525,11 @@ static ssize_t radeon_set_dpm_forced_per
+ enum radeon_dpm_forced_level level;
+ int ret = 0;
+
++ /* Can't force performance level when the card is off */
++ if ((rdev->flags & RADEON_IS_PX) &&
++ (ddev->switch_power_state != DRM_SWITCH_POWER_ON))
++ return -EINVAL;
++
+ mutex_lock(&rdev->pm.mutex);
+ if (strncmp("low", buf, strlen("low")) == 0) {
+ level = RADEON_DPM_FORCED_LEVEL_LOW;
+@@ -538,8 +568,14 @@ static ssize_t radeon_hwmon_show_temp(st
+ char *buf)
+ {
+ struct radeon_device *rdev = dev_get_drvdata(dev);
++ struct drm_device *ddev = rdev->ddev;
+ int temp;
+
++ /* Can't get temperature when the card is off */
++ if ((rdev->flags & RADEON_IS_PX) &&
++ (ddev->switch_power_state != DRM_SWITCH_POWER_ON))
++ return -EINVAL;
++
+ if (rdev->asic->pm.get_temperature)
+ temp = radeon_get_temperature(rdev);
+ else
+@@ -1591,8 +1627,12 @@ static int radeon_debugfs_pm_info(struct
+ struct drm_info_node *node = (struct drm_info_node *) m->private;
+ struct drm_device *dev = node->minor->dev;
+ struct radeon_device *rdev = dev->dev_private;
++ struct drm_device *ddev = rdev->ddev;
+
+- if (rdev->pm.dpm_enabled) {
++ if ((rdev->flags & RADEON_IS_PX) &&
++ (ddev->switch_power_state != DRM_SWITCH_POWER_ON)) {
++ seq_printf(m, "PX asic powered off\n");
++ } else if (rdev->pm.dpm_enabled) {
+ mutex_lock(&rdev->pm.mutex);
+ if (rdev->asic->dpm.debugfs_print_current_performance_level)
+ radeon_dpm_debugfs_print_current_performance_level(rdev, m);
--- /dev/null
+From 59cf4243e557aa64ab2ef51280454aa1f3828e14 Mon Sep 17 00:00:00 2001
+From: Jean Delvare <jdelvare@suse.de>
+Date: Sun, 25 May 2014 17:23:08 +0200
+Subject: hwmon: (ntc_thermistor) Fix dependencies
+
+From: Jean Delvare <jdelvare@suse.de>
+
+commit 59cf4243e557aa64ab2ef51280454aa1f3828e14 upstream.
+
+In commit 9e8269de, support was added for ntc_thermistor devices being
+declared in the device tree and implemented on top of IIO. With that
+change, a dependency was added to the ntc_thermistor driver:
+
+ depends on (!OF && !IIO) || (OF && IIO)
+
+This construct has the drawback that the driver can no longer be
+selected when OF is set and IIO isn't, nor when IIO is set and OF is
+not. This is a regression for the original users of the driver.
+
+As the new code depends on IIO and is useless without OF, include it
+only if both are enabled, and set the dependencies accordingly. This
+is clearer, more simple and more correct.
+
+Signed-off-by: Jean Delvare <jdelvare@suse.de>
+Fixes: 9e8269de hwmon: (ntc_thermistor) Add DT with IIO support to NTC thermistor driver
+Reviewed-by: Guenter Roeck <linux@roeck-us.net>
+Cc: Naveen Krishna Chatradhi <ch.naveen@samsung.com>
+Cc: Doug Anderson <dianders@chromium.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/hwmon/Kconfig | 2 +-
+ drivers/hwmon/ntc_thermistor.c | 4 +++-
+ 2 files changed, 4 insertions(+), 2 deletions(-)
+
+--- a/drivers/hwmon/Kconfig
++++ b/drivers/hwmon/Kconfig
+@@ -971,7 +971,7 @@ config SENSORS_NCT6775
+
+ config SENSORS_NTC_THERMISTOR
+ tristate "NTC thermistor support"
+- depends on (!OF && !IIO) || (OF && IIO)
++ depends on !OF || IIO=n || IIO
+ help
+ This driver supports NTC thermistors sensor reading and its
+ interpretation. The driver can also monitor the temperature and
+--- a/drivers/hwmon/ntc_thermistor.c
++++ b/drivers/hwmon/ntc_thermistor.c
+@@ -141,7 +141,7 @@ struct ntc_data {
+ char name[PLATFORM_NAME_SIZE];
+ };
+
+-#ifdef CONFIG_OF
++#if defined(CONFIG_OF) && IS_ENABLED(CONFIG_IIO)
+ static int ntc_adc_iio_read(struct ntc_thermistor_platform_data *pdata)
+ {
+ struct iio_channel *channel = pdata->chan;
+@@ -223,6 +223,8 @@ ntc_thermistor_parse_dt(struct platform_
+ return NULL;
+ }
+
++#define ntc_match NULL
++
+ static void ntc_iio_channel_release(struct ntc_thermistor_platform_data *pdata)
+ { }
+ #endif
--- /dev/null
+From ead82d6792ef5c600d535bca6ec50a4da14ff7c7 Mon Sep 17 00:00:00 2001
+From: Jean Delvare <jdelvare@suse.de>
+Date: Sun, 25 May 2014 17:23:08 +0200
+Subject: hwmon: (ntc_thermistor) Fix OF device ID mapping
+
+From: Jean Delvare <jdelvare@suse.de>
+
+commit ead82d6792ef5c600d535bca6ec50a4da14ff7c7 upstream.
+
+The mapping from OF device IDs to platform device IDs is wrong.
+TYPE_NCPXXWB473 is 0, TYPE_NCPXXWL333 is 1, so
+ntc_thermistor_id[TYPE_NCPXXWB473] is { "ncp15wb473", TYPE_NCPXXWB473 }
+while
+ntc_thermistor_id[TYPE_NCPXXWL333] is { "ncp18wb473", TYPE_NCPXXWB473 }.
+
+So the name is wrong for all but the "ntc,ncp15wb473" entry, and the
+type is wrong for the "ntc,ncp15wl333" entry.
+
+So map the entries by index, it is neither elegant nor robust but at
+least it is correct.
+
+Signed-off-by: Jean Delvare <jdelvare@suse.de>
+Fixes: 9e8269de hwmon: (ntc_thermistor) Add DT with IIO support to NTC thermistor driver
+Reviewed-by: Guenter Roeck <linux@roeck-us.net>
+Cc: Naveen Krishna Chatradhi <ch.naveen@samsung.com>
+Cc: Doug Anderson <dianders@chromium.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/hwmon/ntc_thermistor.c | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+--- a/drivers/hwmon/ntc_thermistor.c
++++ b/drivers/hwmon/ntc_thermistor.c
+@@ -44,6 +44,7 @@ struct ntc_compensation {
+ unsigned int ohm;
+ };
+
++/* Order matters, ntc_match references the entries by index */
+ static const struct platform_device_id ntc_thermistor_id[] = {
+ { "ncp15wb473", TYPE_NCPXXWB473 },
+ { "ncp18wb473", TYPE_NCPXXWB473 },
+@@ -163,15 +164,15 @@ static int ntc_adc_iio_read(struct ntc_t
+
+ static const struct of_device_id ntc_match[] = {
+ { .compatible = "ntc,ncp15wb473",
+- .data = &ntc_thermistor_id[TYPE_NCPXXWB473] },
++ .data = &ntc_thermistor_id[0] },
+ { .compatible = "ntc,ncp18wb473",
+- .data = &ntc_thermistor_id[TYPE_NCPXXWB473] },
++ .data = &ntc_thermistor_id[1] },
+ { .compatible = "ntc,ncp21wb473",
+- .data = &ntc_thermistor_id[TYPE_NCPXXWB473] },
++ .data = &ntc_thermistor_id[2] },
+ { .compatible = "ntc,ncp03wb473",
+- .data = &ntc_thermistor_id[TYPE_NCPXXWB473] },
++ .data = &ntc_thermistor_id[3] },
+ { .compatible = "ntc,ncp15wl333",
+- .data = &ntc_thermistor_id[TYPE_NCPXXWL333] },
++ .data = &ntc_thermistor_id[4] },
+ { },
+ };
+ MODULE_DEVICE_TABLE(of, ntc_match);
--- /dev/null
+From 6aa6caff30f5dcb9e55b03b9710c30b83750cae5 Mon Sep 17 00:00:00 2001
+From: Joe Lawrence <joe.lawrence@stratus.com>
+Date: Thu, 22 May 2014 17:30:54 -0400
+Subject: SCSI: scsi_transport_sas: move bsg destructor into sas_rphy_remove
+
+From: Joe Lawrence <joe.lawrence@stratus.com>
+
+commit 6aa6caff30f5dcb9e55b03b9710c30b83750cae5 upstream.
+
+The recent change in sysfs, bcdde7e221a8750f9b62b6d0bd31b72ea4ad9309
+"sysfs: make __sysfs_remove_dir() recursive" revealed an asymmetric
+rphy device creation/deletion sequence in scsi_transport_sas:
+
+ modprobe mpt2sas
+ sas_rphy_add
+ device_add A rphy->dev
+ device_add B sas_device transport class
+ device_add C sas_end_device transport class
+ device_add D bsg class
+
+ rmmod mpt2sas
+ sas_rphy_delete
+ sas_rphy_remove
+ device_del B
+ device_del C
+ device_del A
+ sysfs_remove_group recursive sysfs dir removal
+ sas_rphy_free
+ device_del D warning
+
+ where device A is the parent of B, C, and D.
+
+When sas_rphy_free tries to unregister the bsg request queue (device D
+above), the ensuing sysfs cleanup discovers that its sysfs group has
+already been removed and emits a warning, "sysfs group... not found for
+kobject 'end_device-X:0'".
+
+Since bsg creation is a side effect of sas_rphy_add, move its
+complementary removal call into sas_rphy_remove. This imposes the
+following tear-down order for the devices above: D, B, C, A.
+
+Note the sas_device and sas_end_device transport class devices (B and C
+above) are created and destroyed both via the list match traversal in
+attribute_container_device_trigger, so the order in which they are
+handled is fixed. This is fine as long as they are deleted before their
+parent device.
+
+Signed-off-by: Joe Lawrence <joe.lawrence@stratus.com>
+Acked-by: Dan Williams <dan.j.williams@intel.com>
+Signed-off-by: James Bottomley <JBottomley@Parallels.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/scsi/scsi_transport_sas.c | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+--- a/drivers/scsi/scsi_transport_sas.c
++++ b/drivers/scsi/scsi_transport_sas.c
+@@ -1621,8 +1621,6 @@ void sas_rphy_free(struct sas_rphy *rphy
+ list_del(&rphy->list);
+ mutex_unlock(&sas_host->lock);
+
+- sas_bsg_remove(shost, rphy);
+-
+ transport_destroy_device(dev);
+
+ put_device(dev);
+@@ -1681,6 +1679,7 @@ sas_rphy_remove(struct sas_rphy *rphy)
+ }
+
+ sas_rphy_unlink(rphy);
++ sas_bsg_remove(NULL, rphy);
+ transport_remove_device(dev);
+ device_del(dev);
+ }
perf-limit-perf_event_attr-sample_period-to-63-bits.patch
perf-fix-race-in-removing-an-event.patch
mm-memory-failure.c-fix-memory-leak-by-race-between-poison-and-unpoison.patch
+documentation-fix-docbooks-...-building.patch
+hwmon-ntc_thermistor-fix-dependencies.patch
+hwmon-ntc_thermistor-fix-of-device-id-mapping.patch
+drm-gf119-disp-fix-nasty-bug-which-can-clobber-sor0-s-clock-setup.patch
+drm-radeon-fix-register-typo-on-si.patch
+drm-radeon-also-try-gart-for-cpu-accessed-buffers.patch
+drm-radeon-handle-non-vga-class-pci-devices-with-atrm.patch
+drm-radeon-pm-don-t-allow-debugfs-sysfs-access-when-px-card-is-off-v2.patch
+scsi-scsi_transport_sas-move-bsg-destructor-into-sas_rphy_remove.patch