Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update 5.4.x+fslc to v5.4.39 #69

Merged
merged 59 commits into from
May 6, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
59 commits
Select commit Hold shift + click to select a range
ffd99c0
dma-buf: Fix SET_NAME ioctl uapi
danvet-intel Apr 7, 2020
5ec7eb9
drm/edid: Fix off-by-one in DispID DTD pixel clock
vsyrjala Apr 23, 2020
f25335a
drm/amd/display: Fix green screen issue after suspend
Apr 22, 2020
4441fb2
drm/qxl: qxl_release leak in qxl_draw_dirty_fb()
vaverin Apr 27, 2020
c465bc3
drm/qxl: qxl_release leak in qxl_hw_surface_alloc()
vaverin Apr 27, 2020
6eb95b3
drm/qxl: qxl_release use after free
vaverin Apr 29, 2020
e574482
NFSv4.1: fix handling of backchannel binding in BIND_CONN_TO_SESSION
Apr 24, 2020
a378abb
btrfs: fix transaction leak in btrfs_recover_relocation
sherlly Apr 20, 2020
6369876
btrfs: fix block group leak when removing fails
sherlly Apr 21, 2020
67bc5f6
btrfs: fix partial loss of prealloc extent past i_size after fsync
fdmanana Apr 23, 2020
2b925c4
btrfs: transaction: Avoid deadlock due to bad initialization timing o…
adam900710 Apr 27, 2020
31ba94b
mmc: cqhci: Avoid false "cqhci: CQE stuck on" by not open-coding time…
dianders Apr 13, 2020
eed4792
mmc: sdhci-xenon: fix annoying 1.8V regulator warning
elkablo Apr 20, 2020
d8f7e15
mmc: sdhci-pci: Fix eMMC driver strength for BYT-based controllers
ahunter6 Apr 22, 2020
80e99f4
mmc: sdhci-msm: Enable host capabilities pertains to R1b response
Apr 20, 2020
9e33151
mmc: meson-mx-sdio: Set MMC_CAP_WAIT_WHILE_BUSY
xdarklight Apr 16, 2020
ca34751
mmc: meson-mx-sdio: remove the broken ->card_busy() op
xdarklight Apr 16, 2020
35a9399
crypto: caam - fix the address of the last entry of S/G
iuliana-prodan Apr 7, 2020
981b719
ALSA: hda/realtek - Two front mics on a Lenovo ThinkCenter
jason77-wang Apr 27, 2020
6426aa6
ALSA: usb-audio: Correct a typo of NuPrime DAC-10 USB ID
tiwai Apr 30, 2020
c757723
ALSA: hda/hdmi: fix without unlocked before return
Apr 26, 2020
c867614
ALSA: line6: Fix POD HD500 audio playback
anarsoul Apr 25, 2020
ea63e38
ALSA: pcm: oss: Place the plugin buffer overflow checks correctly
tiwai Apr 24, 2020
95dd309
i2c: amd-mp2-pci: Fix Oops in amd_mp2_pci_init() error handling
Sep 10, 2019
5049385
Drivers: hv: vmbus: Fix Suspend-to-Idle for Generation-2 VM
dcui Apr 12, 2020
16cc37b
dlmfs_file_write(): fix the bogosity in handling non-zero *ppos
Apr 23, 2020
ca662b6
IB/rdmavt: Always return ERR_PTR from rvt_create_mmap_info()
sudipm-mukherjee Apr 24, 2020
8fc24d1
PM: ACPI: Output correct message on target power state
khfeng Apr 21, 2020
c554ab8
PM: hibernate: Freeze kernel threads in software_resume()
dcui Apr 24, 2020
969b9cb
dm verity fec: fix hash block number in verity_fec_decode
nook1208 Apr 10, 2020
beed763
dm writecache: fix data corruption when reloading the target
Apr 15, 2020
100cf0b
dm multipath: use updated MPATHF_QUEUE_IO on mapping for bio-based mpath
krisman-at-collabora Apr 28, 2020
4438f39
ARM: dts: imx6qdl-sr-som-ti: indicate powering off wifi is safe
Feb 27, 2020
faa8dac
scsi: qla2xxx: set UNLOADING before waiting for session deletion
mwilck Apr 21, 2020
1f5a216
scsi: qla2xxx: check UNLOADING before posting async work
mwilck Apr 21, 2020
80ba115
RDMA/mlx5: Set GRH fields in query QP on RoCE
Apr 13, 2020
7665d88
RDMA/mlx4: Initialize ib_spec on the stack
alaahl Apr 13, 2020
b7b72a1
RDMA/siw: Fix potential siw_mem refcnt leak in siw_fastreg_mr()
jgunthorpe Apr 15, 2020
1e12524
RDMA/core: Prevent mixed use of FDs between shared ufiles
Apr 21, 2020
169b8b6
RDMA/core: Fix race between destroy and release FD object
Apr 23, 2020
4c499da
RDMA/cm: Fix ordering of xa_alloc_cyclic() in ib_create_cm_id()
jgunthorpe Mar 10, 2020
92c9919
RDMA/cm: Fix an error check in cm_alloc_id_priv()
Apr 7, 2020
44e2a98
i2c: iproc: generate stop event for slave writes
rayagonda Mar 22, 2020
08e90b2
vfio: avoid possible overflow in vfio_iommu_type1_pin_pages
yanzhao56 Apr 8, 2020
205757f
vfio/type1: Fix VA->PA translation for PFNMAP VMAs in vaddr_get_pfn()
Apr 16, 2020
de59f2f
iommu/qcom: Fix local_base status check
Apr 18, 2020
a0000d2
scsi: target/iblock: fix WRITE SAME zeroing
ddiss Apr 19, 2020
501ecc8
iommu/amd: Fix legacy interrupt remapping for x2APIC-enabled system
ssuthiku-amd Apr 22, 2020
3af9be5
i2c: aspeed: Avoid i2c interrupt status clear race condition.
aspeedtech Apr 29, 2020
c0be115
ALSA: opti9xx: shut up gcc-10 range warning
arndb Apr 29, 2020
57165a2
Fix use after free in get_tree_bdev()
dhowells Apr 28, 2020
779f155
nvme: prevent double free in nvme_alloc_ns() error handling
Apr 27, 2020
d458565
nfs: Fix potential posix_acl refcnt leak in nfs3_set_acl
Apr 20, 2020
c753a12
dmaengine: dmatest: Fix iteration non-stop logic
andy-shev Apr 24, 2020
73162ca
dmaengine: dmatest: Fix process hang when reading 'wait' parameter
andy-shev Apr 28, 2020
1de07eb
arm64: vdso: Add -fasynchronous-unwind-tables to cflags
fvincenzo Apr 29, 2020
eeef0d9
selinux: properly handle multiple messages in selinux_netlink_send()
pcmoore Apr 28, 2020
592465e
Linux 5.4.39
gregkh May 6, 2020
5a886b0
Merge tag 'v5.4.39' into 5.4.x+fslc
zandrey May 6, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# SPDX-License-Identifier: GPL-2.0
VERSION = 5
PATCHLEVEL = 4
SUBLEVEL = 38
SUBLEVEL = 39
EXTRAVERSION =
NAME = Kleptomaniac Octopus

Expand Down
1 change: 1 addition & 0 deletions arch/arm/boot/dts/imx6qdl-sr-som-ti.dtsi
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@
bus-width = <4>;
keep-power-in-suspend;
mmc-pwrseq = <&pwrseq_ti_wifi>;
cap-power-off-card;
non-removable;
vmmc-supply = <&vcc_3v3>;
/* vqmmc-supply = <&nvcc_sd1>; - MMC layer doesn't like it! */
Expand Down
2 changes: 1 addition & 1 deletion arch/arm64/kernel/vdso/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ UBSAN_SANITIZE := n
OBJECT_FILES_NON_STANDARD := y
KCOV_INSTRUMENT := n

CFLAGS_vgettimeofday.o = -O2 -mcmodel=tiny
CFLAGS_vgettimeofday.o = -O2 -mcmodel=tiny -fasynchronous-unwind-tables

ifneq ($(c-gettimeofday-y),)
CFLAGS_vgettimeofday.o += -include $(c-gettimeofday-y)
Expand Down
4 changes: 2 additions & 2 deletions drivers/acpi/device_pm.c
Original file line number Diff line number Diff line change
Expand Up @@ -273,13 +273,13 @@ int acpi_device_set_power(struct acpi_device *device, int state)
end:
if (result) {
dev_warn(&device->dev, "Failed to change power state to %s\n",
acpi_power_state_string(state));
acpi_power_state_string(target_state));
} else {
device->power.state = target_state;
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
"Device [%s] transitioned to %s\n",
device->pnp.bus_id,
acpi_power_state_string(state)));
acpi_power_state_string(target_state)));
}

return result;
Expand Down
2 changes: 1 addition & 1 deletion drivers/crypto/caam/caamalg.c
Original file line number Diff line number Diff line change
Expand Up @@ -1810,7 +1810,7 @@ static struct skcipher_edesc *skcipher_edesc_alloc(struct skcipher_request *req,

if (ivsize || mapped_dst_nents > 1)
sg_to_sec4_set_last(edesc->sec4_sg + dst_sg_idx +
mapped_dst_nents);
mapped_dst_nents - 1 + !!ivsize);

if (sec4_sg_bytes) {
edesc->sec4_sg_dma = dma_map_single(jrdev, edesc->sec4_sg,
Expand Down
3 changes: 2 additions & 1 deletion drivers/dma-buf/dma-buf.c
Original file line number Diff line number Diff line change
Expand Up @@ -388,7 +388,8 @@ static long dma_buf_ioctl(struct file *file,

return ret;

case DMA_BUF_SET_NAME:
case DMA_BUF_SET_NAME_A:
case DMA_BUF_SET_NAME_B:
return dma_buf_set_name(dmabuf, (const char __user *)arg);

default:
Expand Down
6 changes: 3 additions & 3 deletions drivers/dma/dmatest.c
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ static bool is_threaded_test_run(struct dmatest_info *info)
struct dmatest_thread *thread;

list_for_each_entry(thread, &dtc->threads, node) {
if (!thread->done)
if (!thread->done && !thread->pending)
return true;
}
}
Expand Down Expand Up @@ -662,8 +662,8 @@ static int dmatest_func(void *data)
flags = DMA_CTRL_ACK | DMA_PREP_INTERRUPT;

ktime = ktime_get();
while (!kthread_should_stop()
&& !(params->iterations && total_tests >= params->iterations)) {
while (!(kthread_should_stop() ||
(params->iterations && total_tests >= params->iterations))) {
struct dma_async_tx_descriptor *tx = NULL;
struct dmaengine_unmap_data *um;
dma_addr_t *dsts;
Expand Down
38 changes: 29 additions & 9 deletions drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
Original file line number Diff line number Diff line change
Expand Up @@ -2698,7 +2698,8 @@ fill_plane_dcc_attributes(struct amdgpu_device *adev,
const union dc_tiling_info *tiling_info,
const uint64_t info,
struct dc_plane_dcc_param *dcc,
struct dc_plane_address *address)
struct dc_plane_address *address,
bool force_disable_dcc)
{
struct dc *dc = adev->dm.dc;
struct dc_dcc_surface_param input;
Expand All @@ -2710,6 +2711,9 @@ fill_plane_dcc_attributes(struct amdgpu_device *adev,
memset(&input, 0, sizeof(input));
memset(&output, 0, sizeof(output));

if (force_disable_dcc)
return 0;

if (!offset)
return 0;

Expand Down Expand Up @@ -2759,7 +2763,8 @@ fill_plane_buffer_attributes(struct amdgpu_device *adev,
union dc_tiling_info *tiling_info,
struct plane_size *plane_size,
struct dc_plane_dcc_param *dcc,
struct dc_plane_address *address)
struct dc_plane_address *address,
bool force_disable_dcc)
{
const struct drm_framebuffer *fb = &afb->base;
int ret;
Expand Down Expand Up @@ -2869,7 +2874,8 @@ fill_plane_buffer_attributes(struct amdgpu_device *adev,

ret = fill_plane_dcc_attributes(adev, afb, format, rotation,
plane_size, tiling_info,
tiling_flags, dcc, address);
tiling_flags, dcc, address,
force_disable_dcc);
if (ret)
return ret;
}
Expand Down Expand Up @@ -2961,7 +2967,8 @@ fill_dc_plane_info_and_addr(struct amdgpu_device *adev,
const struct drm_plane_state *plane_state,
const uint64_t tiling_flags,
struct dc_plane_info *plane_info,
struct dc_plane_address *address)
struct dc_plane_address *address,
bool force_disable_dcc)
{
const struct drm_framebuffer *fb = plane_state->fb;
const struct amdgpu_framebuffer *afb =
Expand Down Expand Up @@ -3040,7 +3047,8 @@ fill_dc_plane_info_and_addr(struct amdgpu_device *adev,
plane_info->rotation, tiling_flags,
&plane_info->tiling_info,
&plane_info->plane_size,
&plane_info->dcc, address);
&plane_info->dcc, address,
force_disable_dcc);
if (ret)
return ret;

Expand All @@ -3063,6 +3071,7 @@ static int fill_dc_plane_attributes(struct amdgpu_device *adev,
struct dc_plane_info plane_info;
uint64_t tiling_flags;
int ret;
bool force_disable_dcc = false;

ret = fill_dc_scaling_info(plane_state, &scaling_info);
if (ret)
Expand All @@ -3077,9 +3086,11 @@ static int fill_dc_plane_attributes(struct amdgpu_device *adev,
if (ret)
return ret;

force_disable_dcc = adev->asic_type == CHIP_RAVEN && adev->in_suspend;
ret = fill_dc_plane_info_and_addr(adev, plane_state, tiling_flags,
&plane_info,
&dc_plane_state->address);
&dc_plane_state->address,
force_disable_dcc);
if (ret)
return ret;

Expand Down Expand Up @@ -4481,6 +4492,7 @@ static int dm_plane_helper_prepare_fb(struct drm_plane *plane,
uint64_t tiling_flags;
uint32_t domain;
int r;
bool force_disable_dcc = false;

dm_plane_state_old = to_dm_plane_state(plane->state);
dm_plane_state_new = to_dm_plane_state(new_state);
Expand Down Expand Up @@ -4539,11 +4551,13 @@ static int dm_plane_helper_prepare_fb(struct drm_plane *plane,
dm_plane_state_old->dc_state != dm_plane_state_new->dc_state) {
struct dc_plane_state *plane_state = dm_plane_state_new->dc_state;

force_disable_dcc = adev->asic_type == CHIP_RAVEN && adev->in_suspend;
fill_plane_buffer_attributes(
adev, afb, plane_state->format, plane_state->rotation,
tiling_flags, &plane_state->tiling_info,
&plane_state->plane_size, &plane_state->dcc,
&plane_state->address);
&plane_state->address,
force_disable_dcc);
}

return 0;
Expand Down Expand Up @@ -5767,7 +5781,12 @@ static void amdgpu_dm_commit_planes(struct drm_atomic_state *state,
fill_dc_plane_info_and_addr(
dm->adev, new_plane_state, tiling_flags,
&bundle->plane_infos[planes_count],
&bundle->flip_addrs[planes_count].address);
&bundle->flip_addrs[planes_count].address,
false);

DRM_DEBUG_DRIVER("plane: id=%d dcc_en=%d\n",
new_plane_state->plane->index,
bundle->plane_infos[planes_count].dcc.enable);

bundle->surface_updates[planes_count].plane_info =
&bundle->plane_infos[planes_count];
Expand Down Expand Up @@ -7138,7 +7157,8 @@ dm_determine_update_type_for_commit(struct amdgpu_display_manager *dm,
ret = fill_dc_plane_info_and_addr(
dm->adev, new_plane_state, tiling_flags,
&plane_info,
&flip_addr.address);
&flip_addr.address,
false);
if (ret)
goto cleanup;

Expand Down
2 changes: 1 addition & 1 deletion drivers/gpu/drm/drm_edid.c
Original file line number Diff line number Diff line change
Expand Up @@ -4743,7 +4743,7 @@ static struct drm_display_mode *drm_mode_displayid_detailed(struct drm_device *d
struct drm_display_mode *mode;
unsigned pixel_clock = (timings->pixel_clock[0] |
(timings->pixel_clock[1] << 8) |
(timings->pixel_clock[2] << 16));
(timings->pixel_clock[2] << 16)) + 1;
unsigned hactive = (timings->hactive[0] | timings->hactive[1] << 8) + 1;
unsigned hblank = (timings->hblank[0] | timings->hblank[1] << 8) + 1;
unsigned hsync = (timings->hsync[0] | (timings->hsync[1] & 0x7f) << 8) + 1;
Expand Down
10 changes: 5 additions & 5 deletions drivers/gpu/drm/qxl/qxl_cmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -480,9 +480,10 @@ int qxl_hw_surface_alloc(struct qxl_device *qdev,
return ret;

ret = qxl_release_reserve_list(release, true);
if (ret)
if (ret) {
qxl_release_free(qdev, release);
return ret;

}
cmd = (struct qxl_surface_cmd *)qxl_release_map(qdev, release);
cmd->type = QXL_SURFACE_CMD_CREATE;
cmd->flags = QXL_SURF_FLAG_KEEP_DATA;
Expand All @@ -499,8 +500,8 @@ int qxl_hw_surface_alloc(struct qxl_device *qdev,
/* no need to add a release to the fence for this surface bo,
since it is only released when we ask to destroy the surface
and it would never signal otherwise */
qxl_push_command_ring_release(qdev, release, QXL_CMD_SURFACE, false);
qxl_release_fence_buffer_objects(release);
qxl_push_command_ring_release(qdev, release, QXL_CMD_SURFACE, false);

surf->hw_surf_alloc = true;
spin_lock(&qdev->surf_id_idr_lock);
Expand Down Expand Up @@ -542,9 +543,8 @@ int qxl_hw_surface_dealloc(struct qxl_device *qdev,
cmd->surface_id = id;
qxl_release_unmap(qdev, release, &cmd->release_info);

qxl_push_command_ring_release(qdev, release, QXL_CMD_SURFACE, false);

qxl_release_fence_buffer_objects(release);
qxl_push_command_ring_release(qdev, release, QXL_CMD_SURFACE, false);

return 0;
}
Expand Down
6 changes: 3 additions & 3 deletions drivers/gpu/drm/qxl/qxl_display.c
Original file line number Diff line number Diff line change
Expand Up @@ -523,8 +523,8 @@ static int qxl_primary_apply_cursor(struct drm_plane *plane)
cmd->u.set.visible = 1;
qxl_release_unmap(qdev, release, &cmd->release_info);

qxl_push_cursor_ring_release(qdev, release, QXL_CMD_CURSOR, false);
qxl_release_fence_buffer_objects(release);
qxl_push_cursor_ring_release(qdev, release, QXL_CMD_CURSOR, false);

return ret;

Expand Down Expand Up @@ -665,8 +665,8 @@ static void qxl_cursor_atomic_update(struct drm_plane *plane,
cmd->u.position.y = plane->state->crtc_y + fb->hot_y;

qxl_release_unmap(qdev, release, &cmd->release_info);
qxl_push_cursor_ring_release(qdev, release, QXL_CMD_CURSOR, false);
qxl_release_fence_buffer_objects(release);
qxl_push_cursor_ring_release(qdev, release, QXL_CMD_CURSOR, false);

if (old_cursor_bo != NULL)
qxl_bo_unpin(old_cursor_bo);
Expand Down Expand Up @@ -713,8 +713,8 @@ static void qxl_cursor_atomic_disable(struct drm_plane *plane,
cmd->type = QXL_CURSOR_HIDE;
qxl_release_unmap(qdev, release, &cmd->release_info);

qxl_push_cursor_ring_release(qdev, release, QXL_CMD_CURSOR, false);
qxl_release_fence_buffer_objects(release);
qxl_push_cursor_ring_release(qdev, release, QXL_CMD_CURSOR, false);
}

static void qxl_update_dumb_head(struct qxl_device *qdev,
Expand Down
7 changes: 4 additions & 3 deletions drivers/gpu/drm/qxl/qxl_draw.c
Original file line number Diff line number Diff line change
Expand Up @@ -209,9 +209,10 @@ void qxl_draw_dirty_fb(struct qxl_device *qdev,
goto out_release_backoff;

rects = drawable_set_clipping(qdev, num_clips, clips_bo);
if (!rects)
if (!rects) {
ret = -EINVAL;
goto out_release_backoff;

}
drawable = (struct qxl_drawable *)qxl_release_map(qdev, release);

drawable->clip.type = SPICE_CLIP_TYPE_RECTS;
Expand Down Expand Up @@ -242,8 +243,8 @@ void qxl_draw_dirty_fb(struct qxl_device *qdev,
}
qxl_bo_kunmap(clips_bo);

qxl_push_command_ring_release(qdev, release, QXL_CMD_DRAW, false);
qxl_release_fence_buffer_objects(release);
qxl_push_command_ring_release(qdev, release, QXL_CMD_DRAW, false);

out_release_backoff:
if (ret)
Expand Down
5 changes: 1 addition & 4 deletions drivers/gpu/drm/qxl/qxl_ioctl.c
Original file line number Diff line number Diff line change
Expand Up @@ -261,11 +261,8 @@ static int qxl_process_single_command(struct qxl_device *qdev,
apply_surf_reloc(qdev, &reloc_info[i]);
}

qxl_release_fence_buffer_objects(release);
ret = qxl_push_command_ring_release(qdev, release, cmd->type, true);
if (ret)
qxl_release_backoff_reserve_list(release);
else
qxl_release_fence_buffer_objects(release);

out_free_bos:
out_free_release:
Expand Down
43 changes: 34 additions & 9 deletions drivers/hv/vmbus_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -978,6 +978,9 @@ static int vmbus_resume(struct device *child_device)

return drv->resume(dev);
}
#else
#define vmbus_suspend NULL
#define vmbus_resume NULL
#endif /* CONFIG_PM_SLEEP */

/*
Expand All @@ -995,11 +998,22 @@ static void vmbus_device_release(struct device *device)
}

/*
* Note: we must use SET_NOIRQ_SYSTEM_SLEEP_PM_OPS rather than
* SET_SYSTEM_SLEEP_PM_OPS: see the comment before vmbus_bus_pm.
* Note: we must use the "noirq" ops: see the comment before vmbus_bus_pm.
*
* suspend_noirq/resume_noirq are set to NULL to support Suspend-to-Idle: we
* shouldn't suspend the vmbus devices upon Suspend-to-Idle, otherwise there
* is no way to wake up a Generation-2 VM.
*
* The other 4 ops are for hibernation.
*/

static const struct dev_pm_ops vmbus_pm = {
SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(vmbus_suspend, vmbus_resume)
.suspend_noirq = NULL,
.resume_noirq = NULL,
.freeze_noirq = vmbus_suspend,
.thaw_noirq = vmbus_resume,
.poweroff_noirq = vmbus_suspend,
.restore_noirq = vmbus_resume,
};

/* The one and only one */
Expand Down Expand Up @@ -2280,6 +2294,9 @@ static int vmbus_bus_resume(struct device *dev)

return 0;
}
#else
#define vmbus_bus_suspend NULL
#define vmbus_bus_resume NULL
#endif /* CONFIG_PM_SLEEP */

static const struct acpi_device_id vmbus_acpi_device_ids[] = {
Expand All @@ -2290,16 +2307,24 @@ static const struct acpi_device_id vmbus_acpi_device_ids[] = {
MODULE_DEVICE_TABLE(acpi, vmbus_acpi_device_ids);

/*
* Note: we must use SET_NOIRQ_SYSTEM_SLEEP_PM_OPS rather than
* SET_SYSTEM_SLEEP_PM_OPS, otherwise NIC SR-IOV can not work, because the
* "pci_dev_pm_ops" uses the "noirq" callbacks: in the resume path, the
* pci "noirq" restore callback runs before "non-noirq" callbacks (see
* Note: we must use the "no_irq" ops, otherwise hibernation can not work with
* PCI device assignment, because "pci_dev_pm_ops" uses the "noirq" ops: in
* the resume path, the pci "noirq" restore op runs before "non-noirq" op (see
* resume_target_kernel() -> dpm_resume_start(), and hibernation_restore() ->
* dpm_resume_end()). This means vmbus_bus_resume() and the pci-hyperv's
* resume callback must also run via the "noirq" callbacks.
* resume callback must also run via the "noirq" ops.
*
* Set suspend_noirq/resume_noirq to NULL for Suspend-to-Idle: see the comment
* earlier in this file before vmbus_pm.
*/

static const struct dev_pm_ops vmbus_bus_pm = {
SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(vmbus_bus_suspend, vmbus_bus_resume)
.suspend_noirq = NULL,
.resume_noirq = NULL,
.freeze_noirq = vmbus_bus_suspend,
.thaw_noirq = vmbus_bus_resume,
.poweroff_noirq = vmbus_bus_suspend,
.restore_noirq = vmbus_bus_resume
};

static struct acpi_driver vmbus_acpi_driver = {
Expand Down
Loading