This is the start of the stable review cycle for the 4.15.6 release.
There are 45 patches in this series, all will be posted as a response
to this one. If anyone has any issues with these being applied, please
let me know.
Responses should be made by Sun Feb 25 17:06:43 UTC 2018.
Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.15.6-rc1…
or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-4.15.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <gregkh(a)linuxfoundation.org>
Linux 4.15.6-rc1
Michal Hocko <mhocko(a)suse.com>
vmalloc: fix __GFP_HIGHMEM usage for vmalloc_32 on 32b systems
Tomas Winkler <tomas.winkler(a)intel.com>
mei: me: add cannon point device ids for 4th device
Alexander Usyskin <alexander.usyskin(a)intel.com>
mei: me: add cannon point device ids
Kamil Konieczny <k.konieczny(a)partner.samsung.com>
crypto: s5p-sss - Fix kernel Oops in AES-ECB mode
Shuah Khan <shuah(a)kernel.org>
usbip: keep usbip_device sockfd state in sync with tcp_socket
Zhengjun Xing <zhengjun.xing(a)linux.intel.com>
xhci: fix xhci debugfs errors in xhci_stop
Zhengjun Xing <zhengjun.xing(a)linux.intel.com>
xhci: xhci debugfs device nodes weren't removed after device plugged out
Zhengjun Xing <zhengjun.xing(a)linux.intel.com>
xhci: Fix xhci debugfs devices node disappearance after hibernation
Zhengjun Xing <zhengjun.xing(a)linux.intel.com>
xhci: Fix NULL pointer in xhci debugfs
Alexandru Ardelean <alexandru.ardelean(a)analog.com>
staging: iio: ad5933: switch buffer mode to software
Alexandru Ardelean <alexandru.ardelean(a)analog.com>
staging: iio: adc: ad7192: fix external frequency setting
Arnd Bergmann <arnd(a)arndb.de>
staging: fsl-mc: fix build testing on x86
Todd Kjos <tkjos(a)android.com>
binder: replace "%p" with "%pK"
Eric Biggers <ebiggers(a)google.com>
binder: check for binder_thread allocation failure in binder_poll()
Ben Hutchings <ben(a)decadent.org.uk>
staging: android: ashmem: Fix a race condition in pin ioctls
Martijn Coenen <maco(a)android.com>
ANDROID: binder: synchronize_rcu() when using POLLFREE.
Todd Kjos <tkjos(a)android.com>
ANDROID: binder: remove WARN() for redundant txn error
Paolo Abeni <pabeni(a)redhat.com>
dn_getsockoptdecnet: move nf_{get/set}sockopt outside sock lock
Arnd Bergmann <arnd(a)arndb.de>
arm64: dts: add #cooling-cells to CPU nodes
Arnd Bergmann <arnd(a)arndb.de>
ARM: 8743/1: bL_switcher: add MODULE_LICENSE tag
Arnd Bergmann <arnd(a)arndb.de>
video: fbdev/mmp: add MODULE_LICENSE
Arnd Bergmann <arnd(a)arndb.de>
ASoC: ux500: add MODULE_LICENSE tag
Jesse Chan <jc(a)linux.com>
soc: qcom: rmtfs_mem: add missing MODULE_DESCRIPTION/AUTHOR/LICENSE
Eric Dumazet <edumazet(a)google.com>
net_sched: gen_estimator: fix lockdep splat
Willem de Bruijn <willemb(a)google.com>
net: avoid skb_warn_bad_offload on IS_ERR
Sowmini Varadhan <sowmini.varadhan(a)oracle.com>
rds: tcp: atomically purge entries from rds_tcp_conn_list during netns delete
Sowmini Varadhan <sowmini.varadhan(a)oracle.com>
rds: tcp: correctly sequence cleanup on netns deletion.
Cong Wang <xiyou.wangcong(a)gmail.com>
netfilter: xt_RATEEST: acquire xt_rateest_mutex for hash insert
Cong Wang <xiyou.wangcong(a)gmail.com>
netfilter: xt_cgroup: initialize info->priv in cgroup_mt_check_v1()
Paolo Abeni <pabeni(a)redhat.com>
netfilter: on sockopt() acquire sock lock only in the required scope
Dmitry Vyukov <dvyukov(a)google.com>
netfilter: ipt_CLUSTERIP: fix out-of-bounds accesses in clusterip_tg_check()
Eric Dumazet <edumazet(a)google.com>
netfilter: x_tables: avoid out-of-bounds reads in xt_request_find_{match|target}
Dmitry Vyukov <dvyukov(a)google.com>
netfilter: x_tables: fix int overflow in xt_alloc_table_info()
Dmitry Vyukov <dvyukov(a)google.com>
kcov: detect double association with a single task
Wanpeng Li <wanpeng.li(a)hotmail.com>
KVM: x86: fix escape of guest dr6 to the host
Douglas Gilbert <dgilbert(a)interlog.com>
blk_rq_map_user_iov: fix error override
Laura Abbott <labbott(a)redhat.com>
staging: android: ion: Switch from WARN to pr_warn
Laura Abbott <labbott(a)redhat.com>
staging: android: ion: Add __GFP_NOWARN for system contig heap
Eric Biggers <ebiggers(a)google.com>
crypto: x86/twofish-3way - Fix %rbp usage
Andrey Konovalov <andreyknvl(a)google.com>
media: pvrusb2: properly check endpoint types
Paul Moore <paul(a)paul-moore.com>
selinux: skip bounded transition processing if the policy isn't loaded
Paul Moore <paul(a)paul-moore.com>
selinux: ensure the context is NUL terminated in security_context_to_sid_core()
Jason Wang <jasowang(a)redhat.com>
ptr_ring: try vmalloc() when kmalloc() fails
Jason Wang <jasowang(a)redhat.com>
ptr_ring: fail early if queue occupies more than KMALLOC_MAX_SIZE
Eric Dumazet <edumazet(a)google.com>
tun: fix tun_napi_alloc_frags() frag allocator
-------------
Diffstat:
Makefile | 4 +-
arch/arm/common/bL_switcher_dummy_if.c | 4 +
arch/arm64/boot/dts/mediatek/mt8173.dtsi | 2 +
arch/x86/crypto/twofish-x86_64-asm_64-3way.S | 112 +++++++++++++-----------
arch/x86/kvm/x86.c | 6 ++
block/blk-map.c | 4 +-
drivers/android/binder.c | 29 ++++--
drivers/crypto/s5p-sss.c | 12 ++-
drivers/media/usb/pvrusb2/pvrusb2-hdw.c | 12 +++
drivers/misc/mei/hw-me-regs.h | 5 ++
drivers/misc/mei/pci-me.c | 5 ++
drivers/net/tun.c | 16 ++--
drivers/soc/qcom/rmtfs_mem.c | 4 +
drivers/staging/android/ashmem.c | 19 ++--
drivers/staging/android/ion/ion-ioctl.c | 4 +-
drivers/staging/android/ion/ion_system_heap.c | 2 +-
drivers/staging/fsl-mc/bus/Kconfig | 2 +-
drivers/staging/iio/adc/ad7192.c | 27 ++++--
drivers/staging/iio/impedance-analyzer/ad5933.c | 4 +-
drivers/usb/host/xhci-debugfs.c | 4 +-
drivers/usb/host/xhci.c | 10 +--
drivers/usb/usbip/stub_dev.c | 3 +
drivers/usb/usbip/vhci_hcd.c | 2 +
drivers/video/fbdev/mmp/core.c | 5 ++
include/linux/ptr_ring.h | 15 ++--
kernel/kcov.c | 4 +-
mm/vmalloc.c | 10 ++-
net/core/dev.c | 2 +-
net/core/gen_estimator.c | 4 +
net/decnet/af_decnet.c | 62 +++++++------
net/ipv4/ip_sockglue.c | 14 +--
net/ipv4/netfilter/ipt_CLUSTERIP.c | 16 +++-
net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c | 6 +-
net/ipv6/ipv6_sockglue.c | 17 ++--
net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c | 18 ++--
net/netfilter/x_tables.c | 9 +-
net/netfilter/xt_RATEEST.c | 22 +++--
net/netfilter/xt_cgroup.c | 1 +
net/rds/connection.c | 3 +-
net/rds/rds.h | 6 +-
net/rds/tcp.c | 13 ++-
net/rds/tcp.h | 1 +
security/selinux/ss/services.c | 21 ++---
sound/soc/ux500/mop500.c | 4 +
sound/soc/ux500/ux500_pcm.c | 5 ++
45 files changed, 348 insertions(+), 202 deletions(-)
In commit c713fb071edc ("rtlwifi: rtl8821ae: Fix connection lost problem
correctly") a problem in rtl8821ae that caused loss of signal was fixed.
That same problem has now been reported for rtl8723be. Accordingly,
the ASPM L1 latency has been increased from 0 to 7 to fix the instability.
Signed-off-by: Larry Finger <Larry.Finger(a)lwfinger.net>
Cc: Stable <stable(a)vger.kernel.org>
---
Kalle,
This patch should be sent to 4.16.
Thanks,
Larry
---
drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c
index f9ccd13c79f9..e7bbbc95cdb1 100644
--- a/drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c
+++ b/drivers/net/wireless/realtek/rtlwifi/rtl8723be/hw.c
@@ -1125,7 +1125,8 @@ static void _rtl8723be_enable_aspm_back_door(struct ieee80211_hw *hw)
/* Configuration Space offset 0x70f BIT7 is used to control L0S */
tmp8 = _rtl8723be_dbi_read(rtlpriv, 0x70f);
- _rtl8723be_dbi_write(rtlpriv, 0x70f, tmp8 | BIT(7));
+ _rtl8723be_dbi_write(rtlpriv, 0x70f, tmp8 | BIT(7) |
+ ASPM_L1_LATENCY << 3);
/* Configuration Space offset 0x719 Bit3 is for L1
* BIT4 is for clock request
--
2.16.2
On Sat, Feb 24, 2018 at 11:41:01AM +0000, Harsh Shandilya wrote:
> On Sat 24 Feb, 2018, 12:01 AM Greg Kroah-Hartman, <
> gregkh(a)linuxfoundation.org> wrote:
>
> > This is the start of the stable review cycle for the 3.18.96 release.
> > There are 58 patches in this series, all will be posted as a response
> > to this one. If anyone has any issues with these being applied, please
> > let me know.
> >
> > Responses should be made by Sun Feb 25 17:01:41 UTC 2018.
> > Anything received after that time might be too late.
> >
> > The whole patch series can be found in one patch at:
> >
> > https://www.kernel.org/pub/linux/kernel/v3.x/stable-review/patch-3.18.96-rc…
> > or in the git tree and branch at:
> > git://
> > git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
> > linux-3.18.y
> > and the diffstat can be found below.
> >
>
> Clean merge into the msm-3.18 CAF tree, no regressions noticed on the
> OnePlus 3T. Thanks for the update :)
Great, thanks for testing and letting me know.
greg k-h
This is the start of the stable review cycle for the 3.18.96 release.
There are 58 patches in this series, all will be posted as a response
to this one. If anyone has any issues with these being applied, please
let me know.
Responses should be made by Sun Feb 25 17:01:41 UTC 2018.
Anything received after that time might be too late.
The whole patch series can be found in one patch at:
https://www.kernel.org/pub/linux/kernel/v3.x/stable-review/patch-3.18.96-rc…
or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-3.18.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <gregkh(a)linuxfoundation.org>
Linux 3.18.96-rc1
Kamil Konieczny <k.konieczny(a)partner.samsung.com>
crypto: s5p-sss - Fix kernel Oops in AES-ECB mode
Wanpeng Li <wanpeng.li(a)hotmail.com>
KVM: async_pf: Fix #DF due to inject "Page not Present" and "Page Ready" exceptions simultaneously
Jia-Ju Bai <baijiaju1990(a)163.com>
hippi: Fix a Fix a possible sleep-in-atomic bug in rr_close
Jan Beulich <JBeulich(a)suse.com>
xen: XEN_ACPI_PROCESSOR is Dom0-only
Karol Herbst <kherbst(a)redhat.com>
x86/mm/kmmio: Fix mmiotrace for page unaligned addresses
Dave Young <dyoung(a)redhat.com>
mm/early_ioremap: Fix boot hang with earlyprintk=efi,keep
Tobias Jordan <Tobias.Jordan(a)elektrobit.com>
dmaengine: jz4740: disable/unprepare clk if probe fails
Steffen Klassert <steffen.klassert(a)secunet.com>
xfrm: Fix stack-out-of-bounds with misconfigured transport mode policies.
Takuo Koguchi <takuo.koguchi(a)gmail.com>
spi: sun4i: disable clocks in the remove function
Eric Biggers <ebiggers3(a)gmail.com>
509: fix printing uninitialized stack memory when OID is empty
Nikolay Borisov <nborisov(a)suse.com>
btrfs: Fix possible off-by-one in btrfs_search_path_in_tree
Nogah Frankel <nogahf(a)mellanox.com>
net_sched: red: Avoid illegal values
Nogah Frankel <nogahf(a)mellanox.com>
net_sched: red: Avoid devision by zero
Zumeng Chen <zumeng.chen(a)gmail.com>
gianfar: fix a flooded alignment reports because of padding issue.
Stefan Haberland <sth(a)linux.vnet.ibm.com>
s390/dasd: prevent prefix I/O error
Ravi Bangoria <ravi.bangoria(a)linux.vnet.ibm.com>
powerpc/perf: Fix oops when grouping different pmu events
Greg Ungerer <gerg(a)linux-m68k.org>
m68k: add missing SOFTIRQENTRY_TEXT linker section
Will Deacon <will.deacon(a)arm.com>
scripts/kernel-doc: Don't fail with status != 0 if error encountered with -none
Mauro Carvalho Chehab <mchehab(a)s-opensource.com>
media: s5k6aa: describe some function parameters
Satheesh Rajendran <sathnaga(a)linux.vnet.ibm.com>
perf bench numa: Fixup discontiguous/sparse numa nodes
Jiri Olsa <jolsa(a)kernel.org>
perf top: Fix window dimensions change handling
Peter Ujfalusi <peter.ujfalusi(a)ti.com>
ARM: dts: am4372: Correct the interrupts_properties of McASP
Keerthy <j-keerthy(a)ti.com>
ARM: AM33xx: PRM: Remove am33xx_pwrdm_read_prev_pwrst function
Randy Dunlap <rdunlap(a)infradead.org>
usb: build drivers/usb/common/ when USB_SUPPORT is set
Shuah Khan <shuahkh(a)osg.samsung.com>
usbip: keep usbip_device sockfd state in sync with tcp_socket
Paolo Abeni <pabeni(a)redhat.com>
dn_getsockoptdecnet: move nf_{get/set}sockopt outside sock lock
Arnd Bergmann <arnd(a)arndb.de>
video: fbdev/mmp: add MODULE_LICENSE
Arnd Bergmann <arnd(a)arndb.de>
ASoC: ux500: add MODULE_LICENSE tag
Paul Moore <paul(a)paul-moore.com>
selinux: ensure the context is NUL terminated in security_context_to_sid_core()
David Howells <dhowells(a)redhat.com>
Provide a function to create a NUL-terminated string from unterminated data
Willem de Bruijn <willemb(a)google.com>
net: avoid skb_warn_bad_offload on IS_ERR
Cong Wang <xiyou.wangcong(a)gmail.com>
netfilter: xt_RATEEST: acquire xt_rateest_mutex for hash insert
Paolo Abeni <pabeni(a)redhat.com>
netfilter: on sockopt() acquire sock lock only in the required scope
Dmitry Vyukov <dvyukov(a)google.com>
netfilter: ipt_CLUSTERIP: fix out-of-bounds accesses in clusterip_tg_check()
Eric Dumazet <edumazet(a)google.com>
netfilter: x_tables: avoid out-of-bounds reads in xt_request_find_{match|target}
Dmitry Vyukov <dvyukov(a)google.com>
netfilter: x_tables: fix int overflow in xt_alloc_table_info()
Laura Abbott <labbott(a)redhat.com>
staging: android: ion: Add __GFP_NOWARN for system contig heap
Eric Biggers <ebiggers(a)google.com>
crypto: x86/twofish-3way - Fix %rbp usage
Paul Moore <paul(a)paul-moore.com>
selinux: skip bounded transition processing if the policy isn't loaded
Cong Wang <xiyou.wangcong(a)gmail.com>
xfrm: check id proto in validate_tmpl()
Tetsuo Handa <penguin-kernel(a)I-love.SAKURA.ne.jp>
mm,vmscan: Make unregister_shrinker() no-op if register_shrinker() failed.
Arnd Bergmann <arnd(a)arndb.de>
media: r820t: fix r820t_write_reg for KASAN
Arnd Bergmann <arnd(a)arndb.de>
ARM: dts: s5pv210: add interrupt-parent for ohci
Takashi Iwai <tiwai(a)suse.de>
ALSA: seq: Fix racy pool initializations
Liu Bo <bo.li.liu(a)oracle.com>
Btrfs: fix crash due to not cleaning up tree log block's dirty bits
Liu Bo <bo.li.liu(a)oracle.com>
Btrfs: fix deadlock in run_delalloc_nocow
Nicolas Pitre <nicolas.pitre(a)linaro.org>
console/dummy: leave .con_font_get set to NULL
Johan Hovold <johan(a)kernel.org>
video: fbdev: atmel_lcdfb: fix display-timings lookup
Ernesto A. Fernández <ernesto.mnd.fernandez(a)gmail.com>
ext4: correct documentation for grpid mount option
Zhouyi Zhou <zhouzhouyi(a)gmail.com>
ext4: save error to disk in __ext4_grp_locked_error()
Julia Lawall <Julia.Lawall(a)lip6.fr>
drm/radeon: adjust tested variable
Takashi Iwai <tiwai(a)suse.de>
ALSA: seq: Fix regression by incorrect ioctl_mutex usages
Viresh Kumar <viresh.kumar(a)linaro.org>
arm: spear13xx: Fix spics gpio controller's warning
Viresh Kumar <viresh.kumar(a)linaro.org>
arm: spear13xx: Fix dmas cells
Viresh Kumar <viresh.kumar(a)linaro.org>
arm: spear600: Add missing interrupt-parent of rtc
Eugene Syromiatnikov <esyr(a)redhat.com>
s390: fix handling of -1 in set{,fs}[gu]id16 syscalls
Bjorn Andersson <bjorn.andersson(a)linaro.org>
PM / devfreq: Propagate error from devfreq_add_device()
Jack Morgenstein <jackm(a)dev.mellanox.co.il>
IB/mlx4: Fix incorrectly releasing steerable UD QPs when have only ETH ports
-------------
Diffstat:
Documentation/devicetree/bindings/dma/snps-dma.txt | 2 +-
Documentation/filesystems/ext4.txt | 2 +-
Makefile | 4 +-
arch/arm/boot/dts/am4372.dtsi | 6 +-
arch/arm/boot/dts/s5pv210.dtsi | 1 +
arch/arm/boot/dts/spear1310-evb.dts | 2 +-
arch/arm/boot/dts/spear1340.dtsi | 4 +-
arch/arm/boot/dts/spear13xx.dtsi | 6 +-
arch/arm/boot/dts/spear600.dtsi | 1 +
arch/arm/mach-omap2/prm33xx.c | 12 ---
arch/m68k/kernel/vmlinux-nommu.lds | 2 +
arch/m68k/kernel/vmlinux-std.lds | 2 +
arch/m68k/kernel/vmlinux-sun3.lds | 2 +
arch/powerpc/perf/core-book3s.c | 4 +-
arch/s390/kernel/compat_linux.c | 8 +-
arch/x86/crypto/twofish-x86_64-asm_64-3way.S | 112 +++++++++++----------
arch/x86/kvm/x86.c | 34 +++++--
arch/x86/mm/ioremap.c | 4 +-
arch/x86/mm/kmmio.c | 12 ++-
drivers/Makefile | 1 +
drivers/crypto/s5p-sss.c | 13 ++-
drivers/devfreq/devfreq.c | 2 +-
drivers/dma/dma-jz4740.c | 4 +-
drivers/gpu/drm/radeon/radeon_uvd.c | 2 +-
drivers/infiniband/hw/mlx4/main.c | 13 +--
drivers/media/i2c/s5k6aa.c | 5 +
drivers/media/tuners/r820t.c | 13 ++-
drivers/net/ethernet/freescale/gianfar.c | 6 +-
drivers/net/ethernet/mellanox/mlx4/qp.c | 3 +
drivers/net/hippi/rrunner.c | 2 +-
drivers/s390/block/dasd_eckd.c | 16 +--
drivers/spi/spi-sun4i.c | 2 +-
drivers/staging/android/ion/ion_system_heap.c | 2 +-
drivers/usb/usbip/stub_dev.c | 3 +
drivers/usb/usbip/vhci_hcd.c | 2 +
drivers/video/console/dummycon.c | 1 -
drivers/video/fbdev/atmel_lcdfb.c | 8 +-
drivers/video/fbdev/mmp/core.c | 5 +
drivers/xen/Kconfig | 2 +-
fs/btrfs/inode.c | 5 +-
fs/btrfs/ioctl.c | 2 +-
fs/btrfs/tree-log.c | 9 ++
fs/ext4/super.c | 1 +
include/linux/string.h | 1 +
include/net/red.h | 13 ++-
lib/oid_registry.c | 8 +-
mm/early_ioremap.c | 2 +-
mm/util.c | 24 +++++
mm/vmscan.c | 3 +
net/core/dev.c | 2 +-
net/decnet/af_decnet.c | 62 ++++++------
net/ipv4/ip_sockglue.c | 14 +--
net/ipv4/netfilter/ipt_CLUSTERIP.c | 16 ++-
net/ipv4/netfilter/nf_conntrack_l3proto_ipv4.c | 6 +-
net/ipv6/ipv6_sockglue.c | 17 +---
net/ipv6/netfilter/nf_conntrack_l3proto_ipv6.c | 18 ++--
net/netfilter/x_tables.c | 10 +-
net/netfilter/xt_RATEEST.c | 22 +++-
net/sched/sch_choke.c | 3 +
net/sched/sch_gred.c | 3 +
net/sched/sch_red.c | 2 +
net/sched/sch_sfq.c | 3 +
net/xfrm/xfrm_user.c | 24 +++++
scripts/kernel-doc | 2 +-
security/selinux/ss/services.c | 21 ++--
sound/core/seq/seq_clientmgr.c | 23 +++--
sound/soc/ux500/mop500.c | 4 +
sound/soc/ux500/ux500_pcm.c | 5 +
tools/perf/bench/numa.c | 56 ++++++++++-
tools/perf/builtin-top.c | 15 ++-
70 files changed, 485 insertions(+), 236 deletions(-)
This is a note to let you know that I've just added the patch titled
net: dst_cache_per_cpu_dst_set() can be static
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=sum…
The filename of the patch is:
net-dst_cache_per_cpu_dst_set-can-be-static.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree,
please let <stable(a)vger.kernel.org> know about it.
>From b73f96fcb49ec90c2f837719893e7b25fcdf08d8 Mon Sep 17 00:00:00 2001
From: Wu Fengguang <fengguang.wu(a)intel.com>
Date: Fri, 18 Mar 2016 23:27:28 +0800
Subject: net: dst_cache_per_cpu_dst_set() can be static
From: Wu Fengguang <fengguang.wu(a)intel.com>
commit b73f96fcb49ec90c2f837719893e7b25fcdf08d8 upstream.
Signed-off-by: Fengguang Wu <fengguang.wu(a)intel.com>
Signed-off-by: David S. Miller <davem(a)davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh(a)linuxfoundation.org>
---
net/core/dst_cache.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
--- a/net/core/dst_cache.c
+++ b/net/core/dst_cache.c
@@ -28,8 +28,8 @@ struct dst_cache_pcpu {
};
};
-void dst_cache_per_cpu_dst_set(struct dst_cache_pcpu *dst_cache,
- struct dst_entry *dst, u32 cookie)
+static void dst_cache_per_cpu_dst_set(struct dst_cache_pcpu *dst_cache,
+ struct dst_entry *dst, u32 cookie)
{
dst_release(dst_cache->dst);
if (dst)
@@ -39,8 +39,8 @@ void dst_cache_per_cpu_dst_set(struct ds
dst_cache->dst = dst;
}
-struct dst_entry *dst_cache_per_cpu_get(struct dst_cache *dst_cache,
- struct dst_cache_pcpu *idst)
+static struct dst_entry *dst_cache_per_cpu_get(struct dst_cache *dst_cache,
+ struct dst_cache_pcpu *idst)
{
struct dst_entry *dst;
Patches currently in stable-queue which might be from fengguang.wu(a)intel.com are
queue-4.4/net-dst_cache_per_cpu_dst_set-can-be-static.patch
queue-4.4/video-use-bool-instead-int-pointer-for-get_opt_bool-argument.patch
queue-4.4/staging-wilc1000-fix-kbuild-test-robot-error.patch
queue-4.4/serial-8250_mid-fix-broken-dma-dependency.patch
Guests on new hypersiors might set KVM_ASYNC_PF_DELIVERY_AS_PF_VMEXIT
bit when enabling async_PF, but this bit is reserved on old hypervisors,
which results in a failure upon migration.
To avoid breaking different cases, we are checking for CPUID feature bit
before enabling the feature and nothing else.
Fixes: 52a5c155cf79 ("KVM: async_pf: Let guest support delivery of async_pf from guest mode")
Cc: <stable(a)vger.kernel.org>
Signed-off-by: Radim Krčmář <rkrcmar(a)redhat.com>
---
v2:
* added documentation [Paolo]
* retained compatibility recent kernels [Paolo]
---
Documentation/virtual/kvm/cpuid.txt | 4 ++++
Documentation/virtual/kvm/msr.txt | 3 ++-
arch/x86/include/uapi/asm/kvm_para.h | 1 +
arch/x86/kernel/kvm.c | 8 ++++----
arch/x86/kvm/cpuid.c | 3 ++-
5 files changed, 13 insertions(+), 6 deletions(-)
diff --git a/Documentation/virtual/kvm/cpuid.txt b/Documentation/virtual/kvm/cpuid.txt
index dcab6dc11e3b..87a7506f31c2 100644
--- a/Documentation/virtual/kvm/cpuid.txt
+++ b/Documentation/virtual/kvm/cpuid.txt
@@ -58,6 +58,10 @@ KVM_FEATURE_PV_TLB_FLUSH || 9 || guest checks this feature bit
|| || before enabling paravirtualized
|| || tlb flush.
------------------------------------------------------------------------------
+KVM_FEATURE_ASYNC_PF_VMEXIT || 10 || paravirtualized async PF VM exit
+ || || can be enabled by setting bit 2
+ || || when writing to msr 0x4b564d02
+------------------------------------------------------------------------------
KVM_FEATURE_CLOCKSOURCE_STABLE_BIT || 24 || host will warn if no guest-side
|| || per-cpu warps are expected in
|| || kvmclock.
diff --git a/Documentation/virtual/kvm/msr.txt b/Documentation/virtual/kvm/msr.txt
index 1ebecc115dc6..f3f0d57ced8e 100644
--- a/Documentation/virtual/kvm/msr.txt
+++ b/Documentation/virtual/kvm/msr.txt
@@ -170,7 +170,8 @@ MSR_KVM_ASYNC_PF_EN: 0x4b564d02
when asynchronous page faults are enabled on the vcpu 0 when
disabled. Bit 1 is 1 if asynchronous page faults can be injected
when vcpu is in cpl == 0. Bit 2 is 1 if asynchronous page faults
- are delivered to L1 as #PF vmexits.
+ are delivered to L1 as #PF vmexits. Bit 2 can be set only if
+ KVM_FEATURE_ASYNC_PF_VMEXIT is present in CPUID.
First 4 byte of 64 byte memory location will be written to by
the hypervisor at the time of asynchronous page fault (APF)
diff --git a/arch/x86/include/uapi/asm/kvm_para.h b/arch/x86/include/uapi/asm/kvm_para.h
index 7a2ade4aa235..6cfa9c8cb7d6 100644
--- a/arch/x86/include/uapi/asm/kvm_para.h
+++ b/arch/x86/include/uapi/asm/kvm_para.h
@@ -26,6 +26,7 @@
#define KVM_FEATURE_PV_EOI 6
#define KVM_FEATURE_PV_UNHALT 7
#define KVM_FEATURE_PV_TLB_FLUSH 9
+#define KVM_FEATURE_ASYNC_PF_VMEXIT 10
/* The last 8 bits are used to indicate how to interpret the flags field
* in pvclock structure. If no bits are set, all flags are ignored.
diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
index 4e37d1a851a6..971babe964d2 100644
--- a/arch/x86/kernel/kvm.c
+++ b/arch/x86/kernel/kvm.c
@@ -341,10 +341,10 @@ static void kvm_guest_cpu_init(void)
#endif
pa |= KVM_ASYNC_PF_ENABLED;
- /* Async page fault support for L1 hypervisor is optional */
- if (wrmsr_safe(MSR_KVM_ASYNC_PF_EN,
- (pa | KVM_ASYNC_PF_DELIVERY_AS_PF_VMEXIT) & 0xffffffff, pa >> 32) < 0)
- wrmsrl(MSR_KVM_ASYNC_PF_EN, pa);
+ if (kvm_para_has_feature(KVM_FEATURE_ASYNC_PF_VMEXIT))
+ pa |= KVM_ASYNC_PF_DELIVERY_AS_PF_VMEXIT;
+
+ wrmsrl(MSR_KVM_ASYNC_PF_EN, pa);
__this_cpu_write(apf_reason.enabled, 1);
printk(KERN_INFO"KVM setup async PF for cpu %d\n",
smp_processor_id());
diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c
index 20e491b94f44..7fc04a176c57 100644
--- a/arch/x86/kvm/cpuid.c
+++ b/arch/x86/kvm/cpuid.c
@@ -604,7 +604,8 @@ static inline int __do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function,
(1 << KVM_FEATURE_PV_EOI) |
(1 << KVM_FEATURE_CLOCKSOURCE_STABLE_BIT) |
(1 << KVM_FEATURE_PV_UNHALT) |
- (1 << KVM_FEATURE_PV_TLB_FLUSH);
+ (1 << KVM_FEATURE_PV_TLB_FLUSH) |
+ (1 << KVM_FEATURE_ASYNC_PF_VMEXIT);
if (sched_info_on())
entry->eax |= (1 << KVM_FEATURE_STEAL_TIME);
--
2.15.1
On Feb 22, 2018, Bart Van Assche <Bart.VanAssche(a)wdc.com> wrote:
> Alexandre, can you try patch "[PATCH v2] Avoid that ATA error handling can
> trigger a kernel hang or oops"
> (https://www.mail-archive.com/linux-scsi@vger.kernel.org/msg71189.html)?
Thanks. I confirm that applying it on top of 4.15.4 seems to make the
problem go away on all affected machines. I write 'seems' just because
I can't quite prove the oops won't happen any more, but I'm pretty sure
if it were to, it would have already ;-) Thanks, again!
--
Alexandre Oliva, freedom fighter http://FSFLA.org/~lxoliva/
You must be the change you wish to see in the world. -- Gandhi
Be Free! -- http://FSFLA.org/ FSF Latin America board member
Free Software Evangelist|Red Hat Brasil GNU Toolchain Engineer
From: Arnd Bergmann <arnd(a)arndb.de>
In banked-sr.c, we use a top-level '__asm__(".arch_extension virt")'
statement to allow compilation of a multi-CPU kernel for ARMv6
and older ARMv7-A that don't normally support access to the banked
registers.
This is considered to be a programming error by the gcc developers
and will no longer work in gcc-8, where we now get a build error:
/tmp/cc4Qy7GR.s:34: Error: Banked registers are not available with this architecture. -- `mrs r3,SP_usr'
/tmp/cc4Qy7GR.s:41: Error: Banked registers are not available with this architecture. -- `mrs r3,ELR_hyp'
/tmp/cc4Qy7GR.s:55: Error: Banked registers are not available with this architecture. -- `mrs r3,SP_svc'
/tmp/cc4Qy7GR.s:62: Error: Banked registers are not available with this architecture. -- `mrs r3,LR_svc'
/tmp/cc4Qy7GR.s:69: Error: Banked registers are not available with this architecture. -- `mrs r3,SPSR_svc'
/tmp/cc4Qy7GR.s:76: Error: Banked registers are not available with this architecture. -- `mrs r3,SP_abt'
Passign the '-march-armv7ve' flag to gcc works, and is ok here, because
we know the functions won't ever be called on pre-ARMv7VE machines.
Unfortunately, older compiler versions (4.8 and earlier) do not understand
that flag, so we still need to keep the asm around.
Backporting to stable kernels (4.6+) is needed to allow those to be built
with future compilers as well.
Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84129
Fixes: 33280b4cd1dc ("ARM: KVM: Add banked registers save/restore")
Cc: stable(a)vger.kernel.org
Signed-off-by: Arnd Bergmann <arnd(a)arndb.de>
Signed-off-by: Christoffer Dall <christoffer.dall(a)linaro.org>
---
arch/arm/kvm/hyp/Makefile | 5 +++++
arch/arm/kvm/hyp/banked-sr.c | 4 ++++
2 files changed, 9 insertions(+)
diff --git a/arch/arm/kvm/hyp/Makefile b/arch/arm/kvm/hyp/Makefile
index 5638ce0c9524..63d6b404d88e 100644
--- a/arch/arm/kvm/hyp/Makefile
+++ b/arch/arm/kvm/hyp/Makefile
@@ -7,6 +7,8 @@ ccflags-y += -fno-stack-protector -DDISABLE_BRANCH_PROFILING
KVM=../../../../virt/kvm
+CFLAGS_ARMV7VE :=$(call cc-option, -march=armv7ve)
+
obj-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/hyp/vgic-v2-sr.o
obj-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/hyp/vgic-v3-sr.o
obj-$(CONFIG_KVM_ARM_HOST) += $(KVM)/arm/hyp/timer-sr.o
@@ -15,7 +17,10 @@ obj-$(CONFIG_KVM_ARM_HOST) += tlb.o
obj-$(CONFIG_KVM_ARM_HOST) += cp15-sr.o
obj-$(CONFIG_KVM_ARM_HOST) += vfp.o
obj-$(CONFIG_KVM_ARM_HOST) += banked-sr.o
+CFLAGS_banked-sr.o += $(CFLAGS_ARMV7VE)
+
obj-$(CONFIG_KVM_ARM_HOST) += entry.o
obj-$(CONFIG_KVM_ARM_HOST) += hyp-entry.o
obj-$(CONFIG_KVM_ARM_HOST) += switch.o
+CFLAGS_switch.o += $(CFLAGS_ARMV7VE)
obj-$(CONFIG_KVM_ARM_HOST) += s2-setup.o
diff --git a/arch/arm/kvm/hyp/banked-sr.c b/arch/arm/kvm/hyp/banked-sr.c
index 111bda8cdebd..be4b8b0a40ad 100644
--- a/arch/arm/kvm/hyp/banked-sr.c
+++ b/arch/arm/kvm/hyp/banked-sr.c
@@ -20,6 +20,10 @@
#include <asm/kvm_hyp.h>
+/*
+ * gcc before 4.9 doesn't understand -march=armv7ve, so we have to
+ * trick the assembler.
+ */
__asm__(".arch_extension virt");
void __hyp_text __banked_save_state(struct kvm_cpu_context *ctxt)
--
2.14.2
When introducing support for irqchip in userspace we needed a way to
mask the timer signal to prevent the guest continuously exiting due to a
screaming timer.
We did this by disabling the corresponding percpu interrupt on the
host interrupt controller, because we cannot rely on the host system
having a GIC, and therefore cannot make any assumptions about having an
active state to hide the timer signal.
Unfortunately, when introducing this feature, it became entirely
possible that a VCPU which belongs to a VM that has a userspace irqchip
can disable the vtimer irq on the host on some physical CPU, and then go
away without ever enabling the vtimer irq on that physical CPU again.
This means that using irqchips in userspace on a system that also
supports running VMs with an in-kernel GIC can prevent forward progress
from in-kernel GIC VMs.
Later on, when we started taking virtual timer interrupts in the arch
timer code, we would also leave this timer state active for userspace
irqchip VMs, because we leave it up to a VGIC-enabled guest to
deactivate the hardware IRQ using the HW bit in the LR.
Both issues are solved by only using the enable/disable trick on systems
that do not have a host GIC which supports the active state, because all
VMs on such systems must use irqchips in userspace. Systems that have a
working GIC with support for an active state use the active state to
mask the timer signal for both userspace and in-kernel irqchips.
Cc: Alexander Graf <agraf(a)suse.de>
Reviewed-by: Marc Zyngier <marc.zyngier(a)arm.com>
Cc: <stable(a)vger.kernel.org> # v4.12+
Fixes: d9e139778376 ("KVM: arm/arm64: Support arch timers with a userspace gic")
Signed-off-by: Christoffer Dall <christoffer.dall(a)linaro.org>
---
virt/kvm/arm/arch_timer.c | 116 +++++++++++++++++++++++++---------------------
1 file changed, 64 insertions(+), 52 deletions(-)
diff --git a/virt/kvm/arm/arch_timer.c b/virt/kvm/arm/arch_timer.c
index 70268c0bec79..70f4c30918eb 100644
--- a/virt/kvm/arm/arch_timer.c
+++ b/virt/kvm/arm/arch_timer.c
@@ -36,6 +36,8 @@ static struct timecounter *timecounter;
static unsigned int host_vtimer_irq;
static u32 host_vtimer_irq_flags;
+static DEFINE_STATIC_KEY_FALSE(has_gic_active_state);
+
static const struct kvm_irq_level default_ptimer_irq = {
.irq = 30,
.level = 1,
@@ -56,6 +58,12 @@ u64 kvm_phys_timer_read(void)
return timecounter->cc->read(timecounter->cc);
}
+static inline bool userspace_irqchip(struct kvm *kvm)
+{
+ return static_branch_unlikely(&userspace_irqchip_in_use) &&
+ unlikely(!irqchip_in_kernel(kvm));
+}
+
static void soft_timer_start(struct hrtimer *hrt, u64 ns)
{
hrtimer_start(hrt, ktime_add_ns(ktime_get(), ns),
@@ -69,25 +77,6 @@ static void soft_timer_cancel(struct hrtimer *hrt, struct work_struct *work)
cancel_work_sync(work);
}
-static void kvm_vtimer_update_mask_user(struct kvm_vcpu *vcpu)
-{
- struct arch_timer_context *vtimer = vcpu_vtimer(vcpu);
-
- /*
- * When using a userspace irqchip with the architected timers, we must
- * prevent continuously exiting from the guest, and therefore mask the
- * physical interrupt by disabling it on the host interrupt controller
- * when the virtual level is high, such that the guest can make
- * forward progress. Once we detect the output level being
- * de-asserted, we unmask the interrupt again so that we exit from the
- * guest when the timer fires.
- */
- if (vtimer->irq.level)
- disable_percpu_irq(host_vtimer_irq);
- else
- enable_percpu_irq(host_vtimer_irq, 0);
-}
-
static irqreturn_t kvm_arch_timer_handler(int irq, void *dev_id)
{
struct kvm_vcpu *vcpu = *(struct kvm_vcpu **)dev_id;
@@ -106,9 +95,9 @@ static irqreturn_t kvm_arch_timer_handler(int irq, void *dev_id)
if (kvm_timer_should_fire(vtimer))
kvm_timer_update_irq(vcpu, true, vtimer);
- if (static_branch_unlikely(&userspace_irqchip_in_use) &&
- unlikely(!irqchip_in_kernel(vcpu->kvm)))
- kvm_vtimer_update_mask_user(vcpu);
+ if (userspace_irqchip(vcpu->kvm) &&
+ !static_branch_unlikely(&has_gic_active_state))
+ disable_percpu_irq(host_vtimer_irq);
return IRQ_HANDLED;
}
@@ -290,8 +279,7 @@ static void kvm_timer_update_irq(struct kvm_vcpu *vcpu, bool new_level,
trace_kvm_timer_update_irq(vcpu->vcpu_id, timer_ctx->irq.irq,
timer_ctx->irq.level);
- if (!static_branch_unlikely(&userspace_irqchip_in_use) ||
- likely(irqchip_in_kernel(vcpu->kvm))) {
+ if (!userspace_irqchip(vcpu->kvm)) {
ret = kvm_vgic_inject_irq(vcpu->kvm, vcpu->vcpu_id,
timer_ctx->irq.irq,
timer_ctx->irq.level,
@@ -350,12 +338,6 @@ static void kvm_timer_update_state(struct kvm_vcpu *vcpu)
phys_timer_emulate(vcpu);
}
-static void __timer_snapshot_state(struct arch_timer_context *timer)
-{
- timer->cnt_ctl = read_sysreg_el0(cntv_ctl);
- timer->cnt_cval = read_sysreg_el0(cntv_cval);
-}
-
static void vtimer_save_state(struct kvm_vcpu *vcpu)
{
struct arch_timer_cpu *timer = &vcpu->arch.timer_cpu;
@@ -367,8 +349,10 @@ static void vtimer_save_state(struct kvm_vcpu *vcpu)
if (!vtimer->loaded)
goto out;
- if (timer->enabled)
- __timer_snapshot_state(vtimer);
+ if (timer->enabled) {
+ vtimer->cnt_ctl = read_sysreg_el0(cntv_ctl);
+ vtimer->cnt_cval = read_sysreg_el0(cntv_cval);
+ }
/* Disable the virtual timer */
write_sysreg_el0(0, cntv_ctl);
@@ -460,23 +444,43 @@ static void set_cntvoff(u64 cntvoff)
kvm_call_hyp(__kvm_timer_set_cntvoff, low, high);
}
-static void kvm_timer_vcpu_load_vgic(struct kvm_vcpu *vcpu)
+static inline void set_vtimer_irq_phys_active(struct kvm_vcpu *vcpu, bool active)
+{
+ int r;
+ r = irq_set_irqchip_state(host_vtimer_irq, IRQCHIP_STATE_ACTIVE, active);
+ WARN_ON(r);
+}
+
+static void kvm_timer_vcpu_load_gic(struct kvm_vcpu *vcpu)
{
struct arch_timer_context *vtimer = vcpu_vtimer(vcpu);
bool phys_active;
- int ret;
- phys_active = kvm_vgic_map_is_active(vcpu, vtimer->irq.irq);
-
- ret = irq_set_irqchip_state(host_vtimer_irq,
- IRQCHIP_STATE_ACTIVE,
- phys_active);
- WARN_ON(ret);
+ if (irqchip_in_kernel(vcpu->kvm))
+ phys_active = kvm_vgic_map_is_active(vcpu, vtimer->irq.irq);
+ else
+ phys_active = vtimer->irq.level;
+ set_vtimer_irq_phys_active(vcpu, phys_active);
}
-static void kvm_timer_vcpu_load_user(struct kvm_vcpu *vcpu)
+static void kvm_timer_vcpu_load_nogic(struct kvm_vcpu *vcpu)
{
- kvm_vtimer_update_mask_user(vcpu);
+ struct arch_timer_context *vtimer = vcpu_vtimer(vcpu);
+
+ /*
+ * When using a userspace irqchip with the architected timers and a
+ * host interrupt controller that doesn't support an active state, we
+ * must still prevent continuously exiting from the guest, and
+ * therefore mask the physical interrupt by disabling it on the host
+ * interrupt controller when the virtual level is high, such that the
+ * guest can make forward progress. Once we detect the output level
+ * being de-asserted, we unmask the interrupt again so that we exit
+ * from the guest when the timer fires.
+ */
+ if (vtimer->irq.level)
+ disable_percpu_irq(host_vtimer_irq);
+ else
+ enable_percpu_irq(host_vtimer_irq, host_vtimer_irq_flags);
}
void kvm_timer_vcpu_load(struct kvm_vcpu *vcpu)
@@ -487,10 +491,10 @@ void kvm_timer_vcpu_load(struct kvm_vcpu *vcpu)
if (unlikely(!timer->enabled))
return;
- if (unlikely(!irqchip_in_kernel(vcpu->kvm)))
- kvm_timer_vcpu_load_user(vcpu);
+ if (static_branch_likely(&has_gic_active_state))
+ kvm_timer_vcpu_load_gic(vcpu);
else
- kvm_timer_vcpu_load_vgic(vcpu);
+ kvm_timer_vcpu_load_nogic(vcpu);
set_cntvoff(vtimer->cntvoff);
@@ -555,18 +559,24 @@ static void unmask_vtimer_irq_user(struct kvm_vcpu *vcpu)
{
struct arch_timer_context *vtimer = vcpu_vtimer(vcpu);
- if (unlikely(!irqchip_in_kernel(vcpu->kvm))) {
- __timer_snapshot_state(vtimer);
- if (!kvm_timer_should_fire(vtimer)) {
- kvm_timer_update_irq(vcpu, false, vtimer);
- kvm_vtimer_update_mask_user(vcpu);
- }
+ if (!kvm_timer_should_fire(vtimer)) {
+ kvm_timer_update_irq(vcpu, false, vtimer);
+ if (static_branch_likely(&has_gic_active_state))
+ set_vtimer_irq_phys_active(vcpu, false);
+ else
+ enable_percpu_irq(host_vtimer_irq, host_vtimer_irq_flags);
}
}
void kvm_timer_sync_hwstate(struct kvm_vcpu *vcpu)
{
- unmask_vtimer_irq_user(vcpu);
+ struct arch_timer_cpu *timer = &vcpu->arch.timer_cpu;
+
+ if (unlikely(!timer->enabled))
+ return;
+
+ if (unlikely(!irqchip_in_kernel(vcpu->kvm)))
+ unmask_vtimer_irq_user(vcpu);
}
int kvm_timer_vcpu_reset(struct kvm_vcpu *vcpu)
@@ -753,6 +763,8 @@ int kvm_timer_hyp_init(bool has_gic)
kvm_err("kvm_arch_timer: error setting vcpu affinity\n");
goto out_free_irq;
}
+
+ static_branch_enable(&has_gic_active_state);
}
kvm_info("virtual timer IRQ%d\n", host_vtimer_irq);
--
2.14.2
Three tiny patches fixing bugs and optimizing the IBRS code. These
are all fairly obvious, but they escaped review. They should go in
through the x86/pti tree and should apply to both 4.9 and 4.14 trees.
Thanks!
Paolo
Paolo Bonzini (3):
KVM: x86: use native MSR ops for SPEC_CTRL
KVM: nVMX: fix wrong condition for SPEC_CTRL and PRED_CMD MSRs
KVM: VMX: mark RDMSR path as unlikely
arch/x86/kvm/svm.c | 9 +++++----
arch/x86/kvm/vmx.c | 15 ++++++++-------
2 files changed, 13 insertions(+), 11 deletions(-)
--
1.8.3.1
On some boards setting power_save to a non 0 value leads to clicking /
popping sounds when ever we enter/leave powersaving mode. Ideally we would
figure out how to avoid these sounds, but that is not always feasible.
This commit adds a blacklist for devices where powersaving is known to
cause problems and disables it on these devices.
Note I tried to put this blacklist in userspace first:
https://github.com/systemd/systemd/pull/8128
But the systemd maintainers rightfully pointed out that it would be
impossible to then later remove entries once we actually find a way to
make power-saving work on listed boards without issues. Having this list
in the kernel will allow removal of the blacklist entry in the same commit
which fixes the clicks / plops.
The blacklist only applies to the default power_save module-option value,
if a user explicitly sets the module-option then the blacklist is not
used.
BugLink: https://bugzilla.redhat.com/show_bug.cgi?id=1525104
BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=198611
Cc: stable(a)vger.kernel.org
Signed-off-by: Hans de Goede <hdegoede(a)redhat.com>
---
Changes in RFC v2:
-Only use the blacklist if the power_save module-option is not explicitly
set by the user
Changes in RFC v2:
-Fix logic to work on boards with more then 1 HDA device
---
sound/pci/hda/hda_intel.c | 33 +++++++++++++++++++++++++++++++--
1 file changed, 31 insertions(+), 2 deletions(-)
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index c71dcacea807..9d67b6b0ec95 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -181,7 +181,7 @@ static const struct kernel_param_ops param_ops_xint = {
};
#define param_check_xint param_check_int
-static int power_save = CONFIG_SND_HDA_POWER_SAVE_DEFAULT;
+static int power_save = -1;
module_param(power_save, xint, 0644);
MODULE_PARM_DESC(power_save, "Automatic power-saving timeout "
"(in second, 0 = disable).");
@@ -2186,6 +2186,22 @@ static int azx_probe(struct pci_dev *pci,
return err;
}
+/* On some boards setting power_save to a non 0 value leads to clicking /
+ * popping sounds when ever we enter/leave powersaving mode. Ideally we would
+ * figure out how to avoid these sounds, but that is not always feasible.
+ * So we keep a list of devices where we disable powersaving as its known
+ * to causes problems on these devices.
+ */
+static struct snd_pci_quirk power_save_blacklist[] = {
+ /* https://bugzilla.redhat.com/show_bug.cgi?id=1525104 */
+ SND_PCI_QUIRK(0x1849, 0x0c0c, "Asrock B85M-ITX", 0),
+ /* https://bugzilla.redhat.com/show_bug.cgi?id=1525104 */
+ SND_PCI_QUIRK(0x1043, 0x8733, "Asus Prime X370-Pro", 0),
+ /* https://bugzilla.kernel.org/show_bug.cgi?id=198611 */
+ SND_PCI_QUIRK(0x17aa, 0x2227, "Lenovo X1 Carbon 3rd Gen", 0),
+ {}
+};
+
/* number of codec slots for each chipset: 0 = default slots (i.e. 4) */
static unsigned int azx_max_codecs[AZX_NUM_DRIVERS] = {
[AZX_DRIVER_NVIDIA] = 8,
@@ -2197,7 +2213,9 @@ static int azx_probe_continue(struct azx *chip)
struct hda_intel *hda = container_of(chip, struct hda_intel, chip);
struct hdac_bus *bus = azx_bus(chip);
struct pci_dev *pci = chip->pci;
+ const struct snd_pci_quirk *q;
int dev = chip->dev_index;
+ int val;
int err;
hda->probe_continued = 1;
@@ -2278,7 +2296,18 @@ static int azx_probe_continue(struct azx *chip)
chip->running = 1;
azx_add_card_list(chip);
- snd_hda_set_power_save(&chip->bus, power_save * 1000);
+
+ val = power_save;
+ if (val == -1) {
+ val = CONFIG_SND_HDA_POWER_SAVE_DEFAULT;
+ q = snd_pci_quirk_lookup(chip->pci, power_save_blacklist);
+ if (q && val) {
+ dev_info(chip->card->dev, "device %04x:%04x is on the power_save blacklist, forcing power_save to 0\n",
+ q->subvendor, q->subdevice);
+ val = 0;
+ }
+ }
+ snd_hda_set_power_save(&chip->bus, val * 1000);
if (azx_has_pm_runtime(chip) || hda->use_vga_switcheroo)
pm_runtime_put_autosuspend(&pci->dev);
--
2.14.3