linux/drivers
Kai-Heng Feng 271ea70729 igc: Report speed and duplex as unknown when device is runtime suspended
commit 2e99dedc73f004f650b197c9b269c15c7e01ad15 upstream.

Similar to commit 165ae7a8fe ("igb: Report speed and duplex as unknown
when device is runtime suspended"), if we try to read speed and duplex
sysfs while the device is runtime suspended, igc will complain and
stops working:

[  123.449883] igc 0000:03:00.0 enp3s0: PCIe link lost, device now detached
[  123.450052] BUG: kernel NULL pointer dereference, address: 0000000000000008
[  123.450056] #PF: supervisor read access in kernel mode
[  123.450058] #PF: error_code(0x0000) - not-present page
[  123.450059] PGD 0 P4D 0
[  123.450064] Oops: 0000 [#1] SMP NOPTI
[  123.450068] CPU: 0 PID: 2525 Comm: udevadm Tainted: G     U  W  OE     5.10.0-1002-oem #2+rkl2-Ubuntu
[  123.450078] RIP: 0010:igc_rd32+0x1c/0x90 [igc]
[  123.450080] Code: c0 5d c3 b8 fd ff ff ff c3 0f 1f 44 00 00 0f 1f 44 00 00 55 89 f0 48 89 e5 41 56 41 55 41 54 49 89 c4 53 48 8b 57 08 48 01 d0 <44> 8b 28 41 83 fd ff 74 0c 5b 44 89 e8 41 5c 41 5d 4

[  123.450083] RSP: 0018:ffffb0d100d6fcc0 EFLAGS: 00010202
[  123.450085] RAX: 0000000000000008 RBX: ffffb0d100d6fd30 RCX: 0000000000000000
[  123.450087] RDX: 0000000000000000 RSI: 0000000000000008 RDI: ffff945a12716c10
[  123.450089] RBP: ffffb0d100d6fce0 R08: ffff945a12716550 R09: ffff945a09874000
[  123.450090] R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000008
[  123.450092] R13: ffff945a12716000 R14: ffff945a037da280 R15: ffff945a037da290
[  123.450094] FS:  00007f3b34c868c0(0000) GS:ffff945b89200000(0000) knlGS:0000000000000000
[  123.450096] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[  123.450098] CR2: 0000000000000008 CR3: 00000001144de006 CR4: 0000000000770ef0
[  123.450100] PKRU: 55555554
[  123.450101] Call Trace:
[  123.450111]  igc_ethtool_get_link_ksettings+0xd6/0x1b0 [igc]
[  123.450118]  __ethtool_get_link_ksettings+0x71/0xb0
[  123.450123]  duplex_show+0x74/0xc0
[  123.450129]  dev_attr_show+0x1d/0x40
[  123.450134]  sysfs_kf_seq_show+0xa1/0x100
[  123.450137]  kernfs_seq_show+0x27/0x30
[  123.450142]  seq_read+0xb7/0x400
[  123.450148]  ? common_file_perm+0x72/0x170
[  123.450151]  kernfs_fop_read+0x35/0x1b0
[  123.450155]  vfs_read+0xb5/0x1b0
[  123.450157]  ksys_read+0x67/0xe0
[  123.450160]  __x64_sys_read+0x1a/0x20
[  123.450164]  do_syscall_64+0x38/0x90
[  123.450168]  entry_SYSCALL_64_after_hwframe+0x44/0xa9
[  123.450170] RIP: 0033:0x7f3b351fe142
[  123.450173] Code: c0 e9 c2 fe ff ff 50 48 8d 3d 3a ca 0a 00 e8 f5 19 02 00 0f 1f 44 00 00 f3 0f 1e fa 64 8b 04 25 18 00 00 00 85 c0 75 10 0f 05 <48> 3d 00 f0 ff ff 77 56 c3 0f 1f 44 00 00 48 83 ec 28 48 89 54 24
[  123.450174] RSP: 002b:00007fffef2ec138 EFLAGS: 00000246 ORIG_RAX: 0000000000000000
[  123.450177] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f3b351fe142
[  123.450179] RDX: 0000000000001001 RSI: 00005644c047f070 RDI: 0000000000000003
[  123.450180] RBP: 00007fffef2ec340 R08: 00005644c047f070 R09: 00007f3b352d9320
[  123.450182] R10: 00005644c047c010 R11: 0000000000000246 R12: 00005644c047cbf0
[  123.450184] R13: 00005644c047e6d0 R14: 0000000000000003 R15: 00007fffef2ec140
[  123.450189] Modules linked in: rfcomm ccm cmac algif_hash algif_skcipher af_alg bnep toshiba_acpi industrialio toshiba_haps hp_accel lis3lv02d btusb btrtl btbcm btintel bluetooth ecdh_generic ecc joydev input_leds nls_iso8859_1 snd_sof_pci snd_sof_intel_byt snd_sof_intel_ipc snd_sof_intel_hda_common snd_soc_hdac_hda snd_hda_codec_hdmi snd_sof_xtensa_dsp snd_sof_intel_hda snd_sof snd_hda_ext_core snd_soc_acpi_intel_match snd_soc_acpi snd_hda_codec_realtek snd_hda_codec_generic ledtrig_audio snd_hda_intel snd_intel_dspcfg soundwire_intel soundwire_generic_allocation soundwire_cadence snd_hda_codec snd_hda_core ath10k_pci snd_hwdep intel_rapl_msr intel_rapl_common ath10k_core soundwire_bus snd_soc_core x86_pkg_temp_thermal ath intel_powerclamp snd_compress ac97_bus snd_pcm_dmaengine mac80211 snd_pcm coretemp snd_seq_midi snd_seq_midi_event snd_rawmidi kvm_intel cfg80211 snd_seq snd_seq_device snd_timer mei_hdcp kvm libarc4 snd crct10dif_pclmul ghash_clmulni_intel aesni_intel
 mei_me dell_wmi
[  123.450266]  dell_smbios soundcore sparse_keymap dcdbas crypto_simd cryptd mei dell_uart_backlight glue_helper ee1004 wmi_bmof intel_wmi_thunderbolt dell_wmi_descriptor mac_hid efi_pstore acpi_pad acpi_tad intel_cstate sch_fq_codel parport_pc ppdev lp parport ip_tables x_tables autofs4 btrfs blake2b_generic raid10 raid456 async_raid6_recov async_memcpy async_pq async_xor async_tx xor raid6_pq libcrc32c raid1 raid0 multipath linear dm_mirror dm_region_hash dm_log hid_generic usbhid hid i915 i2c_algo_bit drm_kms_helper syscopyarea sysfillrect sysimgblt fb_sys_fops cec crc32_pclmul rc_core drm intel_lpss_pci i2c_i801 ahci igc intel_lpss i2c_smbus idma64 xhci_pci libahci virt_dma xhci_pci_renesas wmi video pinctrl_tigerlake
[  123.450335] CR2: 0000000000000008
[  123.450338] ---[ end trace 9f731e38b53c35cc ]---

The more generic approach will be wrap get_link_ksettings() with begin()
and complete() callbacks, and calls runtime resume and runtime suspend
routine respectively. However, igc is like igb, runtime resume routine
uses rtnl_lock() which upper ethtool layer also uses.

So to prevent a deadlock on rtnl, take a different approach, use
pm_runtime_suspended() to avoid reading register while device is runtime
suspended.

Fixes: 8c5ad0dae9 ("igc: Add ethtool support")
Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
Acked-by: Sasha Neftin <sasha.neftin@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2021-02-10 09:25:32 +01:00
..
accessibility
acpi ACPI: thermal: Do not call acpi_thermal_check() directly 2021-02-07 15:35:47 +01:00
amba
android binder: add flag to clear buffer on txn complete 2020-12-30 11:51:35 +01:00
ata ata: sata_nv: Fix retrieving of active qcs 2020-11-05 11:43:12 +01:00
atm atm: idt77252: call pci_disable_device() on error path 2021-01-12 20:16:11 +01:00
auxdisplay
base driver core: Extend device_is_dependent() 2021-01-27 11:47:51 +01:00
bcma
block xen-blkfront: allow discard-* nodes to be optional 2021-02-03 23:25:58 +01:00
bluetooth Bluetooth: revert: hci_h5: close serdev device and free hu in h5_close 2021-01-12 20:16:17 +01:00
bus bus: fsl-mc: fix error return code in fsl_mc_object_allocate() 2020-12-30 11:51:23 +01:00
cdrom
char virtio: virtio_console: fix DMA memory allocation for rproc serial 2020-11-18 19:20:29 +01:00
clk clk: tegra30: Add hda clock default rates to clock driver 2021-01-27 11:47:44 +01:00
clocksource clocksource/drivers/arm_arch_timer: Correct fault programming of CNTKCTL_EL1.EVNTI 2020-12-30 11:51:19 +01:00
connector
counter
cpufreq cpufreq: powernow-k8: pass policy rather than use cpufreq_cpu_get() 2021-01-17 14:05:35 +01:00
cpuidle cpuidle: Fixup IRQ state 2020-09-09 19:12:21 +02:00
crypto chtls: Fix chtls resources release sequence 2021-01-17 14:05:34 +01:00
dax device-dax/core: Fix memory leak when rmmod dax.ko 2020-12-30 11:51:46 +01:00
dca
devfreq PM / devfreq: tegra30: Fix integer overflow on CPU's freq max out 2020-10-01 13:17:14 +02:00
dio
dma dmaengine: xilinx_dma: fix mixed_enum_type coverity warning 2021-01-17 14:05:36 +01:00
dma-buf dmabuf: fix use-after-free of dmabuf's file->f_inode 2021-01-12 20:16:23 +01:00
edac EDAC/amd64: Fix PCI component registration 2020-12-30 11:51:36 +01:00
eisa
extcon extcon: max77693: Fix modalias string 2020-12-30 11:51:24 +01:00
firewire
firmware firmware: imx: select SOC_BUS to fix firmware build 2021-02-03 23:25:59 +01:00
fpga
fsi
gnss
gpio gpio: mvebu: fix pwm .get_state period calculation 2021-01-30 13:54:09 +01:00
gpu drm/amd/display: Revert "Fix EDID parsing after resume from suspend" 2021-02-10 09:25:30 +01:00
greybus
hid HID: wacom: Correct NULL dereference on AES pen proximity 2021-01-30 13:54:10 +01:00
hsi HSI: omap_ssi: Don't jump to free ID in ssi_add_controller() 2020-12-30 11:51:13 +01:00
hv Drivers: hv: vmbus: Allow cleanup of VMBUS_CONNECT_CPU if disconnected 2020-11-24 13:29:23 +01:00
hwmon hwmon: (pwm-fan) Ensure that calculation doesn't discard big period values 2021-01-19 18:26:15 +01:00
hwspinlock
hwtracing stm class: Fix module init return on allocation failure 2021-01-27 11:47:50 +01:00
i2c i2c: octeon: check correct size of maximum RECV_LEN packet 2021-01-27 11:47:47 +01:00
i3c i3c master: fix missing destroy_workqueue() on error in i3c_master_register 2021-01-06 14:48:40 +01:00
ide scsi: ide: Do not set the RQF_PREEMPT flag for sense requests 2021-01-12 20:16:09 +01:00
idle
iio iio: ad5504: Fix setting power-down state 2021-01-27 11:47:48 +01:00
infiniband RDMA/cxgb4: Fix the reported max_recv_sge value 2021-02-03 23:25:59 +01:00
input Input: xpad - sync supported devices with fork on GitHub 2021-02-10 09:25:32 +01:00
interconnect interconnect: qcom: qcs404: Remove GPU and display RPM IDs 2020-12-16 10:56:56 +01:00
iommu iommu/vt-d: Do not use flush-queue when caching-mode is on 2021-02-10 09:25:32 +01:00
ipack
irqchip irqchip/mips-cpu: Set IPI domain parent chip 2021-01-27 11:47:49 +01:00
isdn misdn: dsp: select CONFIG_BITREVERSE 2021-01-19 18:26:15 +01:00
leds leds: trigger: fix potential deadlock with libata 2021-02-03 23:25:58 +01:00
lightnvm lightnvm: fix memory leak when submit fails 2021-01-27 11:47:53 +01:00
macintosh
mailbox mailbox: avoid timer start from callback 2020-10-29 09:57:53 +01:00
mcb
md md: Set prev_flush_start and flush_bio in an atomic way 2021-02-10 09:25:32 +01:00
media media: rc: ensure that uevent can be read directly after rc device register 2021-02-03 23:25:56 +01:00
memory memory: emif: Remove bogus debugfs error handling 2020-11-05 11:43:21 +01:00
memstick memstick: r592: Fix error return in r592_probe() 2020-12-30 11:51:18 +01:00
message scsi: mptfusion: Fix null pointer dereferences in mptscsih_remove() 2020-11-05 11:43:25 +01:00
mfd mfd: sprd: Add wakeup capability for PMIC IRQ 2020-11-18 19:20:26 +01:00
misc habanalabs: Fix memleak in hl_device_reset 2021-01-19 18:26:15 +01:00
mmc mmc: core: Limit retries when analyse of SDIO tuples fails 2021-02-10 09:25:30 +01:00
mtd Revert "mtd: spinand: Fix OOB read" 2021-01-09 13:44:54 +01:00
mux
net igc: Report speed and duplex as unknown when device is runtime suspended 2021-02-10 09:25:32 +01:00
nfc nfc: s3fwrn5: Release the nfc firmware 2020-12-30 11:51:26 +01:00
ntb NTB: hw: amd: fix an issue about leak system resources 2020-10-29 09:58:00 +01:00
nubus
nvdimm libnvdimm/dimm: Avoid race between probe and available_slots_show() 2021-02-10 09:25:30 +01:00
nvme nvme-pci: avoid the deepest sleep state on Kingston A2000 SSDs 2021-02-10 09:25:30 +01:00
nvmem nvmem: core: fix possibly memleak when use nvmem_cell_info_to_nvmem_cell() 2020-10-29 09:57:42 +01:00
of of/address: Fix of_node memory leak in of_dma_is_coherent 2020-11-18 19:20:28 +01:00
opp opp: Reduce the size of critical section in _opp_table_kref_release() 2020-11-18 19:20:21 +01:00
oprofile
parisc
parport
pci PCI: Fix pci_slot_release() NULL pointer dereference 2020-12-30 11:51:47 +01:00
pcmcia
perf drivers/perf: thunderx2_pmu: Fix memory resource error handling 2020-10-29 09:57:30 +01:00
phy phy: cpcap-usb: Fix warning for missing regulator_disable 2021-02-07 15:35:48 +01:00
pinctrl pinctrl: ingenic: Fix JZ4760 support 2021-01-27 11:47:52 +01:00
platform platform/x86: intel-vbtn: Support for tablet mode on Dell Inspiron 7352 2021-02-07 15:35:48 +01:00
pnp
power power: supply: bq24190_charger: fix reference leak 2020-12-30 11:51:14 +01:00
powercap powercap: restrict energy meter to root access 2020-11-10 21:13:20 +01:00
pps
ps3 powerpc/ps3: use dma_mapping_error() 2020-12-30 11:51:26 +01:00
ptp
pwm pwm: lp3943: Dynamically allocate PWM chip base 2020-12-30 11:51:28 +01:00
rapidio rapidio: fix the missed put_device() for rio_mport_add_riodev 2020-10-29 09:57:53 +01:00
ras
regulator regulator: bd718x7: Add enable times 2021-01-19 18:26:14 +01:00
remoteproc remoteproc: qcom: Fix potential NULL dereference in adsp_init_mmio() 2020-12-30 11:51:24 +01:00
reset
rpmsg rpmsg: glink: Use complete_all for open states 2020-11-05 11:43:20 +01:00
rtc rtc: pl031: fix resource leak in pl031_probe 2021-01-06 14:48:39 +01:00
s390 s390/vfio-ap: No need to disable IRQ after queue reset 2021-02-03 23:25:57 +01:00
sbus
scsi scsi: ibmvfc: Set default timeout to avoid crash during migration 2021-02-07 15:35:48 +01:00
sfi
sh
siox
slimbus slimbus: qcom-ngd-ctrl: Avoid sending power requests without QMI 2020-12-30 11:51:13 +01:00
soc drivers: soc: atmel: add null entry at the end of at91_soc_allowed_list[] 2021-02-03 23:25:57 +01:00
soundwire soundwire: bus: disable pm_runtime in sdw_slave_delete 2020-10-01 13:17:36 +02:00
spi spi: cadence: cache reference clock rate during probe 2021-01-23 15:58:00 +01:00
spmi
ssb
staging exfat: Month timestamp metadata accidentally incremented 2021-01-17 14:05:34 +01:00
target scsi: target: Fix XCOPY NAA identifier lookup 2021-01-12 20:16:25 +01:00
tc
tee tee: optee: replace might_sleep with cond_resched 2021-02-03 23:25:58 +01:00
thermal thermal/drivers/cpufreq_cooling: Update cpufreq_state only if state has changed 2021-01-06 14:48:35 +01:00
thunderbolt thunderbolt: Fix use-after-free in remove_unplugged_switch() 2020-12-11 13:23:29 +01:00
tty serial: mvebu-uart: fix tx lost characters at power off 2021-01-27 11:47:50 +01:00
uio uio: Fix use-after-free in uio_unregister_device() 2020-11-18 19:20:29 +01:00
usb xhci: fix bounce buffer usage for non-sg list case 2021-02-10 09:25:30 +01:00
vfio vfio iommu: Add dma available capability 2021-01-17 14:05:30 +01:00
vhost vhost_net: fix ubuf refcount incorrectly when sendmsg fails 2021-01-12 20:16:16 +01:00
video video: hyperv_fb: Fix the mmap() regression for v5.4.y and older 2021-01-12 20:16:17 +01:00
virt drivers/virt/fsl_hypervisor: Fix error handling path 2020-10-29 09:57:38 +01:00
virtio virtio_ring: Fix two use after free bugs 2020-12-30 11:51:29 +01:00
visorbus
vlynq
vme
w1 w1: mxc_w1: Fix timeout resolution problem leading to bus error 2020-11-05 11:43:25 +01:00
watchdog watchdog: coh901327: add COMMON_CLK dependency 2020-12-30 11:51:28 +01:00
xen xen: Fix XenStore initialisation for XS_LOCAL 2021-02-03 23:25:58 +01:00
zorro
Kconfig
Makefile