4.14.87-stable review
Greg Kroah-Hartman
maintainercover 4.14.87-stable review
This is the start of the stable review cycle for the 4.14.87 release. There are 55 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 Sat Dec 8 14:29:38 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.14.87-rc1.gz
or in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git linux-4.14.y
and the diffstat can be found below.
thanks,
greg k-h
-------------
Pseudo-Shortlog of commits:
Greg Kroah-Hartman <[email protected]>
Linux 4.14.87-rc1
Guoqing Jiang <[email protected]>
tipc: use destination length for copy string
Arnd Bergmann <[email protected]>
net: qed: use correct strncpy() size
Roman Gushchin <[email protected]>
mm: hide incomplete nr_indirectly_reclaimable in /proc/zoneinfo
Daniel Lezcano <[email protected]>
thermal/drivers/hisi: Remove costly sensor inspection
Daniel Lezcano <[email protected]>
thermal/drivers/hisi: Fix configuration register setting
Daniel Lezcano <[email protected]>
thermal/drivers/hisi: Encapsulate register writes into helpers
Daniel Lezcano <[email protected]>
thermal/drivers/hisi: Remove pointless lock
Daniel Lezcano <[email protected]>
thermal/drivers/hisi: Remove the multiple sensors support
Pavel Tikhomirov <[email protected]>
mm: cleancache: fix corruption on missed inode invalidation
Masahiro Yamada <[email protected]>
reset: remove remaining WARN_ON() in <linux/reset.h>
Masahiro Yamada <[email protected]>
reset: make device_reset_optional() really optional
Jan Kara <[email protected]>
udf: Allow mounting volumes with incorrect identification strings
Alexey Brodkin <[email protected]>
arc: [devboards] Add support of NFSv3 ACL
Kevin Hilman <[email protected]>
ARC: change defconfig defaults to ARCv2
Nikolay Borisov <[email protected]>
btrfs: Always try all copies when reading extent buffers
Qu Wenruo <[email protected]>
btrfs: tree-checker: Don't check max block group size as current max chunk size limit is unreliable
Adam Wong <[email protected]>
Input: elan_i2c - add support for ELAN0621 touchpad
Noah Westervelt <[email protected]>
Input: elan_i2c - add ACPI ID for Lenovo IdeaPad 330-15ARR
Patrick Gaskin <[email protected]>
Input: elan_i2c - add ELAN0620 to the ACPI table
Brian Norris <[email protected]>
Input: cros_ec_keyb - fix button/switch capability reports
Christian Hoff <[email protected]>
Input: matrix_keypad - check for errors from of_get_named_gpio()
Lyude Paul <[email protected]>
Input: synaptics - add PNP ID for ThinkPad P50 to SMBus
Cameron Gutman <[email protected]>
Input: xpad - quirk all PDP Xbox One gamepads
Johan Hovold <[email protected]>
drm/msm: fix OF child-node lookup
Wei Wang <[email protected]>
svm: Add mutex_lock to protect apic_access_page_done on AMD systems
Laura Abbott <[email protected]>
kgdboc: Fix warning with module build
Laura Abbott <[email protected]>
kgdboc: Fix restrict error
Takashi Iwai <[email protected]>
ALSA: trident: Suppress gcc string warning
Andrea Arcangeli <[email protected]>
userfaultfd: shmem/hugetlbfs: only allow to register VM_MAYWRITE vmas
Martin Wilck <[email protected]>
scsi: scsi_devinfo: cleanly zero-pad devinfo strings
Andrea Arcangeli <[email protected]>
userfaultfd: shmem: UFFDIO_COPY: set the page dirty if VM_WRITE is not set
Andrea Arcangeli <[email protected]>
userfaultfd: shmem: add i_size checks
Andrea Arcangeli <[email protected]>
userfaultfd: shmem: allocate anonymous memory for MAP_PRIVATE shmem
Andrea Arcangeli <[email protected]>
userfaultfd: use ENOENT instead of EFAULT if the atomic copy user fails
Lyude Paul <[email protected]>
drm/meson: Fix OOB memory accesses in meson_viu_set_osd_lut()
Lyude Paul <[email protected]>
drm/meson: Enable fast_io in meson_dw_hdmi_regmap_config
Sergio Correia <[email protected]>
drm: set is_master to 0 upon drm_new_set_master() failure
Sam Bobroff <[email protected]>
drm/ast: Fix incorrect free on ioregs
Michael Guralnik <[email protected]>
IB/mlx5: Avoid load failure due to unknown link width
Dmitry V. Levin <[email protected]>
mips: fix mips_get_syscall_arg o32 check
Mathias Kresin <[email protected]>
MIPS: ralink: Fix mt7620 nd_sd pinmux
Andrea Parri <[email protected]>
uprobes: Fix handle_swbp() vs. unregister() + register() race once more
Sagi Grimberg <[email protected]>
iser: set sector for ambiguous mr status errors
Arnd Bergmann <[email protected]>
kdb: use memmove instead of overlapping memcpy
Arnd Bergmann <[email protected]>
staging: rts5208: fix gcc-8 logic error warning
Arnd Bergmann <[email protected]>
scsi: bfa: convert to strlcpy/strlcat
Arnd Bergmann <[email protected]>
drm: gma500: fix logic error
Sultan Alsawaf <[email protected]>
ip_tunnel: Fix name string concatenate in __ip_tunnel_create()
Guenter Roeck <[email protected]>
kernfs: Replace strncpy with memcpy
Linus Torvalds <[email protected]>
unifdef: use memcpy instead of strncpy
Takashi Iwai <[email protected]>
ALSA: intel_hdmi: Use strlcpy() instead of strncpy()
Guenter Roeck <[email protected]>
kobject: Replace strncpy with memcpy
Linus Torvalds <[email protected]>
test_hexdump: use memcpy instead of strncpy
Stephen Rothwell <[email protected]>
disable stringop truncation warnings for now
Xiongfeng Wang <[email protected]>
Kbuild: suppress packed-not-aligned warning for default setting only
-------------
Diffstat:
Makefile | 7 +- arch/arc/Kconfig | 2 +- arch/arc/Makefile | 2 +- arch/arc/configs/axs101_defconfig | 2 + arch/arc/configs/axs103_defconfig | 1 + arch/arc/configs/axs103_smp_defconfig | 1 + arch/arc/configs/hsdk_defconfig | 1 + arch/arc/configs/nps_defconfig | 2 + arch/arc/configs/nsim_700_defconfig | 1 + arch/arc/configs/nsimosci_defconfig | 2 + arch/arc/configs/nsimosci_hs_defconfig | 1 + arch/arc/configs/nsimosci_hs_smp_defconfig | 1 + arch/arc/configs/tb10x_defconfig | 1 + arch/arc/configs/vdk_hs38_defconfig | 1 + arch/arc/configs/vdk_hs38_smp_defconfig | 1 + arch/mips/include/asm/syscall.h | 2 +- arch/mips/ralink/mt7620.c | 2 +- arch/x86/kvm/svm.c | 19 +- drivers/gpu/drm/ast/ast_main.c | 3 +- drivers/gpu/drm/drm_auth.c | 2 + drivers/gpu/drm/gma500/mdfld_intel_display.c | 2 +- drivers/gpu/drm/meson/meson_dw_hdmi.c | 1 + drivers/gpu/drm/meson/meson_viu.c | 12 +- drivers/gpu/drm/msm/adreno/adreno_device.c | 5 +- drivers/infiniband/hw/mlx5/main.c | 29 +-- drivers/infiniband/ulp/iser/iser_verbs.c | 7 +- drivers/input/joystick/xpad.c | 16 +- drivers/input/keyboard/cros_ec_keyb.c | 3 +- drivers/input/keyboard/matrix_keypad.c | 23 +- drivers/input/mouse/elan_i2c_core.c | 3 + drivers/input/mouse/synaptics.c | 1 + drivers/net/ethernet/qlogic/qed/qed_debug.c | 6 +- drivers/reset/core.c | 9 +- drivers/scsi/bfa/bfa_fcbuild.c | 8 +- drivers/scsi/bfa/bfa_fcs.c | 78 +++---- drivers/scsi/bfa/bfa_fcs_lport.c | 62 ++---- drivers/scsi/bfa/bfa_ioc.c | 2 +- drivers/scsi/bfa/bfa_svc.c | 4 +- drivers/scsi/bfa/bfad.c | 20 +- drivers/scsi/bfa/bfad_attr.c | 2 +- drivers/scsi/bfa/bfad_bsg.c | 6 +- drivers/scsi/scsi_devinfo.c | 22 +- drivers/staging/rts5208/sd.c | 6 - drivers/thermal/hisi_thermal.c | 318 ++++++++++++++------------- drivers/tty/serial/kgdboc.c | 43 ++-- fs/btrfs/disk-io.c | 10 +- fs/btrfs/tree-checker.c | 8 +- fs/kernfs/symlink.c | 2 +- fs/udf/super.c | 16 +- fs/udf/unicode.c | 14 +- fs/userfaultfd.c | 15 ++ include/linux/reset.h | 34 ++- kernel/debug/kdb/kdb_support.c | 4 +- kernel/events/uprobes.c | 12 +- lib/kobject.c | 2 +- lib/test_hexdump.c | 2 +- mm/hugetlb.c | 2 +- mm/shmem.c | 31 ++- mm/truncate.c | 8 +- mm/userfaultfd.c | 62 ++++-- mm/vmstat.c | 4 + net/ipv4/ip_tunnel.c | 4 +- net/tipc/subscr.c | 2 +- scripts/Makefile.extrawarn | 3 + scripts/unifdef.c | 4 +- sound/pci/trident/trident.c | 2 +- sound/x86/intel_hdmi_audio.c | 2 +- 67 files changed, 538 insertions(+), 447 deletions(-)
Greg Kroah-Hartman
maintainerPATCH 1/55 Kbuild: suppress packed-not-aligned warning for default setting only
4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Xiongfeng Wang <[email protected]>
commit 321cb0308a9e76841394b4bbab6a1107cfedbae0 upstream.
gcc-8 reports many -Wpacked-not-aligned warnings. The below are some examples.
./include/linux/ceph/msgr.h:67:1: warning: alignment 1 of 'struct ceph_entity_addr' is less than 8 [-Wpacked-not-aligned]
} __attribute__ ((packed));
./include/linux/ceph/msgr.h:67:1: warning: alignment 1 of 'struct ceph_entity_addr' is less than 8 [-Wpacked-not-aligned]
} __attribute__ ((packed));
./include/linux/ceph/msgr.h:67:1: warning: alignment 1 of 'struct ceph_entity_addr' is less than 8 [-Wpacked-not-aligned]
} __attribute__ ((packed));
This patch suppresses this kind of warnings for default setting.
--- scripts/Makefile.extrawarn | 3 +++ 1 file changed, 3 insertions(+)
scripts/Makefile.extrawarn +3 -0
@@ -11,6 +11,8 @@ # are not supported by all versions of the compiler # ========================================================================== +KBUILD_CFLAGS += $(call cc-disable-warning, packed-not-aligned) + ifeq ("$(origin W)", "command line") export KBUILD_ENABLE_EXTRA_GCC_CHECKS := $(W) endif
@@ -26,6 +28,7 @@ warning-1 += -Wold-style-definition warning-1 += $(call cc-option, -Wmissing-include-dirs) warning-1 += $(call cc-option, -Wunused-but-set-variable) warning-1 += $(call cc-option, -Wunused-const-variable) +warning-1 += $(call cc-option, -Wpacked-not-aligned) warning-1 += $(call cc-disable-warning, missing-field-initializers) warning-1 += $(call cc-disable-warning, sign-compare)
Greg Kroah-Hartman
maintainerPATCH 2/55 disable stringop truncation warnings for now
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Stephen Rothwell <[email protected]>
commit 217c3e0196758662aa0429863b09d1c13da1c5d6 upstream.
They are too noisy
--- Makefile | 3 +++ 1 file changed, 3 insertions(+)
Makefile +3 -0
@@ -803,6 +803,9 @@ KBUILD_CFLAGS += $(call cc-option,-Wdecl # disable pointer signed / unsigned warnings in gcc 4.0 KBUILD_CFLAGS += $(call cc-disable-warning, pointer-sign) +# disable stringop warnings in gcc 8+ +KBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation) + # disable invalid "can't wrap" optimizations for signed / pointers KBUILD_CFLAGS += $(call cc-option,-fno-strict-overflow)
Greg Kroah-Hartman
maintainerPATCH 3/55 test_hexdump: use memcpy instead of strncpy
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Linus Torvalds <[email protected]>
commit b1286ed7158e9b62787508066283ab0b8850b518 upstream.
New versions of gcc reasonably warn about the odd pattern of
strncpy(p, q, strlen(q));
which really doesn't make sense: the strncpy() ends up being just a slow and odd way to write memcpy() in this case.
Apparently there was a patch for this floating around earlier, but it got lost.
--- lib/test_hexdump.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
lib/test_hexdump.c +1 -1
@@ -81,7 +81,7 @@ static void __init test_hexdump_prepare_const char *q = *result++;size_t amount =strlen (q); -strncpy (p, q, amount); +memcpy (p, q, amount); p += amount; *p++ =' ' ;
Greg Kroah-Hartman
maintainerPATCH 4/55 kobject: Replace strncpy with memcpy
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Guenter Roeck <[email protected]>
commit 77d2a24b6107bd9b3bf2403a65c1428a9da83dd0 upstream.
gcc 8.1.0 complains:
lib/kobject.c:128:3: warning:
'strncpy' output truncated before terminating nul copying as many bytes from a string as its length [-Wstringop-truncation]lib/kobject.c: In function 'kobject_get_path':lib/kobject.c:125:13: note: length computed here
Using strncpy() is indeed less than perfect since the length of data to be copied has already been determined with strlen(). Replace strncpy() with memcpy() to address the warning and optimize the code a little.
--- lib/kobject.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
lib/kobject.c +1 -1
@@ -127,7 +127,7 @@ static void fill_kobj_path(struct kobjecint cur =strlen (kobject_name (parent));/* back up enough to print this name with '/' */ length -= cur; -strncpy (path + length,kobject_name (parent), cur); +memcpy (path + length,kobject_name (parent), cur); *(path + --length) ='/' ; }
Greg Kroah-Hartman
maintainerPATCH 5/55 ALSA: intel_hdmi: Use strlcpy() instead of strncpy()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Iwai <[email protected]>
commit c288248f5b26cd5563112fcdc077bf44964a942d upstream.
hdmi_lpe_audio_probe() copies the pcm name string via strncpy(), but as a gcc8 warning suggests, it misses a NUL terminator, and unlikely the expected result.
Use the proper one, strlcpy() instead.
--- sound/x86/intel_hdmi_audio.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/x86/intel_hdmi_audio.c +1 -1
@@ -1839,7 +1839,7 @@ static int hdmi_lpe_audio_probe(struct p/* setup private data which can be retrieved when required */ pcm->private_data = ctx; pcm->info_flags =0 ; -strncpy (pcm->name, card->shortname,strlen (card->shortname)); +strlcpy (pcm->name, card->shortname,strlen (card->shortname));/* setup the ops for playabck */ snd_pcm_set_ops (pcm,SNDRV_PCM_STREAM_PLAYBACK , &had_pcm_ops);
Greg Kroah-Hartman
maintainerPATCH 6/55 unifdef: use memcpy instead of strncpy
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Linus Torvalds <[email protected]>
commit 38c7b224ce22c25fed04007839edf974bd13439d upstream.
New versions of gcc reasonably warn about the odd pattern of
strncpy(p, q, strlen(q));
which really doesn't make sense: the strncpy() ends up being just a slow and odd way to write memcpy() in this case.
There was a comment about _why_ the code used strncpy - to avoid the terminating NUL byte, but memcpy does the same and avoids the warning.
--- scripts/unifdef.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
scripts/unifdef.c +2 -2
@@ -395,7 +395,7 @@ usage(void)* When we have processed a group that starts off with a known-false * #if/#elif sequence (which has therefore been deleted) followed by a * #elif that we don't understand and therefore must keep, we edit the -* latter into a #if to keep the nesting correct. We use strncpy() to +* latter into a #if to keep the nesting correct. We use memcpy() to * overwrite the 4 byte token "elif" with "if " without a '\0' byte. * * When we find a true #elif in a group, the following block will
@@ -450,7 +450,7 @@ static void Idrop (void) { Fdrop(); ignstatic void Itrue (void ) {Ftrue ();ignoreon (); }static void Ifalse (void ) {Ffalse ();ignoreon (); }/* modify this line */ -static void Mpass (void ) {strncpy (keyword,"if " ,4 );Pelif (); } +static void Mpass (void ) {memcpy (keyword,"if " ,4 );Pelif (); }static void Mtrue (void ) {keywordedit ("else" );state (IS_TRUE_MIDDLE ); }static void Melif (void ) {keywordedit ("endif" );state (IS_FALSE_TRAILER ); }static void Melse (void ) {keywordedit ("endif" );state (IS_FALSE_ELSE ); }
Greg Kroah-Hartman
maintainerPATCH 7/55 kernfs: Replace strncpy with memcpy
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Guenter Roeck <[email protected]>
commit 166126c1e54d927c2e8efa2702d420e0ce301fd9 upstream.
gcc 8.1.0 complains:
fs/kernfs/symlink.c:91:3: warning:
'strncpy' output truncated before terminating nul copying as many bytes from a string as its lengthfs/kernfs/symlink.c: In function 'kernfs_iop_get_link':fs/kernfs/symlink.c:88:14: note: length computed here
Using strncpy() is indeed less than perfect since the length of data to be copied has already been determined with strlen(). Replace strncpy() with memcpy() to address the warning and optimize the code a little.
--- fs/kernfs/symlink.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/kernfs/symlink.c +1 -1
@@ -88,7 +88,7 @@ static int kernfs_get_target_path(structint slen =strlen (kn->name); len -= slen; -strncpy (s + len, kn->name, slen); +memcpy (s + len, kn->name, slen);if (len) s[--len] ='/' ;
Greg Kroah-Hartman
maintainerPATCH 8/55 ip_tunnel: Fix name string concatenate in __ip_tunnel_create()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sultan Alsawaf <[email protected]>
commit 000ade8016400d93b4d7c89970d96b8c14773d45 upstream.
By passing a limit of 2 bytes to strncat, strncat is limited to writing fewer bytes than what it's supposed to append to the name here.
Since the bounds are checked on the line above this, just remove the string bounds checks entirely since they're unneeded.
--- net/ipv4/ip_tunnel.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
net/ipv4/ip_tunnel.c +2 -2
@@ -261,8 +261,8 @@ static struct net_device *__ip_tunnel_cr }else {if (strlen (ops->kind) > (IFNAMSIZ -3 )) goto failed; -strlcpy (name, ops->kind,IFNAMSIZ ); -strncat (name,"%d" ,2 ); +strcpy (name, ops->kind); +strcat (name,"%d" ); }ASSERT_RTNL ();
Greg Kroah-Hartman
maintainerPATCH 9/55 drm: gma500: fix logic error
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Arnd Bergmann <[email protected]>
commit 67a3b63a54cbe18944191f43d644686731cf30c7 upstream.
gcc-8 points out a condition that almost certainly doesn't do what the author had in mind:
drivers/gpu/drm/gma500/mdfld_intel_display.c: In function 'mdfldWaitForPipeEnable':drivers/gpu/drm/gma500/mdfld_intel_display.c:102:37: error: bitwise comparison always evaluates to false [-Werror=tautological-compare]
This changes it to a simple bit mask operation to check whether the bit is set.
--- drivers/gpu/drm/gma500/mdfld_intel_display.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/gma500/mdfld_intel_display.c +1 -1
@@ -99,7 +99,7 @@ void mdfldWaitForPipeEnable(struct drm_d/* Wait for for the pipe enable to take effect. */ for (count =0 ; count <COUNT_MAX ; count++) { temp =REG_READ (map->conf); -if ((temp &PIPEACONF_PIPE_STATE ) ==1 ) +if (temp &PIPEACONF_PIPE_STATE )break ; } }
Greg Kroah-Hartman
maintainerPATCH 10/55 scsi: bfa: convert to strlcpy/strlcat
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Arnd Bergmann <[email protected]>
commit 8c5a50e8e7ad812a62f7ccf28d9a5e74fddf3000 upstream.
The bfa driver has a number of real issues with string termination that gcc-8 now points out:
drivers/scsi/bfa/bfad_bsg.c: In function 'bfad_iocmd_port_get_attr':drivers/scsi/bfa/bfad_bsg.c:320:9: error: argument to 'sizeof' in 'strncpy' call is the same expression as the source; did you mean to use the size of the destination? [-Werror=sizeof-pointer-memaccess] drivers/scsi/bfa/bfa_fcs.c: In function 'bfa_fcs_fabric_psymb_init':drivers/scsi/bfa/bfa_fcs.c:775:9: error: argument to 'sizeof' in 'strncat' call is the same expression as the source; did you mean to use the size of the destination? [-Werror=sizeof-pointer-memaccess] drivers/scsi/bfa/bfa_fcs.c:781:9: error: argument to 'sizeof' in 'strncat' call is the same expression as the source; did you mean to use the size of the destination? [-Werror=sizeof-pointer-memaccess] drivers/scsi/bfa/bfa_fcs.c:788:9: error: argument to 'sizeof' in 'strncat' call is the same expression as the source; did you mean to use the size of the destination? [-Werror=sizeof-pointer-memaccess] drivers/scsi/bfa/bfa_fcs.c:801:10: error: argument to 'sizeof' in 'strncat' call is the same expression as the source; did you mean to use the size of the destination? [-Werror=sizeof-pointer-memaccess] drivers/scsi/bfa/bfa_fcs.c:808:10: error: argument to 'sizeof' in 'strncat' call is the same expression as the source; did you mean to use the size of the destination? [-Werror=sizeof-pointer-memaccess] drivers/scsi/bfa/bfa_fcs.c: In function 'bfa_fcs_fabric_nsymb_init':drivers/scsi/bfa/bfa_fcs.c:837:10: error: argument to 'sizeof' in 'strncat' call is the same expression as the source; did you mean to use the size of the destination? [-Werror=sizeof-pointer-memaccess] drivers/scsi/bfa/bfa_fcs.c:844:10: error: argument to 'sizeof' in 'strncat' call is the same expression as the source; did you mean to use the size of the destination? [-Werror=sizeof-pointer-memaccess] drivers/scsi/bfa/bfa_fcs.c:852:10: error: argument to 'sizeof' in 'strncat' call is the same expression as the source; did you mean to use the size of the destination? [-Werror=sizeof-pointer-memaccess] drivers/scsi/bfa/bfa_fcs.c: In function 'bfa_fcs_fabric_psymb_init':drivers/scsi/bfa/bfa_fcs.c:778:2: error: 'strncat' output may be truncated copying 10 bytes from a string of length 63 [-Werror=stringop-truncation] drivers/scsi/bfa/bfa_fcs.c:784:2: error: 'strncat' output may be truncated copying 30 bytes from a string of length 63 [-Werror=stringop-truncation] drivers/scsi/bfa/bfa_fcs.c:803:3: error: 'strncat' output may be truncated copying 44 bytes from a string of length 63 [-Werror=stringop-truncation] drivers/scsi/bfa/bfa_fcs.c:811:3: error: 'strncat' output may be truncated copying 16 bytes from a string of length 63 [-Werror=stringop-truncation] drivers/scsi/bfa/bfa_fcs.c: In function 'bfa_fcs_fabric_nsymb_init':drivers/scsi/bfa/bfa_fcs.c:840:2: error: 'strncat' output may be truncated copying 10 bytes from a string of length 63 [-Werror=stringop-truncation] drivers/scsi/bfa/bfa_fcs.c:847:2: error: 'strncat' output may be truncated copying 30 bytes from a string of length 63 [-Werror=stringop-truncation] drivers/scsi/bfa/bfa_fcs_lport.c: In function 'bfa_fcs_fdmi_get_hbaattr':drivers/scsi/bfa/bfa_fcs_lport.c:2657:10: error: argument to 'sizeof' in 'strncat' call is the same expression as the source; did you mean to use the size of the destination? [-Werror=sizeof-pointer-memaccess] drivers/scsi/bfa/bfa_fcs_lport.c:2659:11: error: argument to 'sizeof' in 'strncat' call is the same expression as the source; did you mean to use the size of the destination? [-Werror=sizeof-pointer-memaccess] drivers/scsi/bfa/bfa_fcs_lport.c: In function 'bfa_fcs_lport_ms_gmal_response':drivers/scsi/bfa/bfa_fcs_lport.c:3232:5: error: 'strncpy' output may be truncated copying 16 bytes from a string of length 247 [-Werror=stringop-truncation] drivers/scsi/bfa/bfa_fcs_lport.c: In function 'bfa_fcs_lport_ns_send_rspn_id':drivers/scsi/bfa/bfa_fcs_lport.c:4670:3: error: 'strncpy' output truncated before terminating nul copying as many bytes from a string as its length [-Werror=stringop-truncation] drivers/scsi/bfa/bfa_fcs_lport.c:4682:3: error: 'strncat' output truncated before terminating nul copying as many bytes from a string as its length [-Werror=stringop-truncation] drivers/scsi/bfa/bfa_fcs_lport.c: In function 'bfa_fcs_lport_ns_util_send_rspn_id':drivers/scsi/bfa/bfa_fcs_lport.c:5206:3: error: 'strncpy' output truncated before terminating nul copying as many bytes from a string as its length [-Werror=stringop-truncation] drivers/scsi/bfa/bfa_fcs_lport.c:5215:3: error: 'strncat' output truncated before terminating nul copying as many bytes from a string as its length [-Werror=stringop-truncation] drivers/scsi/bfa/bfa_fcs_lport.c: In function 'bfa_fcs_fdmi_get_portattr':drivers/scsi/bfa/bfa_fcs_lport.c:2751:2: error: 'strncpy' specified bound 128 equals destination size [-Werror=stringop-truncation]drivers/scsi/bfa/bfa_fcbuild.c: In function 'fc_rspnid_build':drivers/scsi/bfa/bfa_fcbuild.c:1254:2: error: 'strncpy' output truncated before terminating nul copying as many bytes from a string as its length [-Werror=stringop-truncation] drivers/scsi/bfa/bfa_fcbuild.c:1253:25: note: length computed heredrivers/scsi/bfa/bfa_fcbuild.c: In function 'fc_rsnn_nn_build':drivers/scsi/bfa/bfa_fcbuild.c:1275:2: error: 'strncpy' output truncated before terminating nul copying as many bytes from a string as its length [-Werror=stringop-truncation]
In most cases, this can be addressed by correctly calling strlcpy and strlcat instead of strncpy/strncat, with the size of the destination buffer as the last argument.
For consistency, I'm changing the other callers of strncpy() in this driver the same way.
--- drivers/scsi/bfa/bfa_fcbuild.c | 8 ++-- drivers/scsi/bfa/bfa_fcs.c | 78 +++++++++++++++++++-------------------- drivers/scsi/bfa/bfa_fcs_lport.c | 62 ++++++++++++------------------- drivers/scsi/bfa/bfa_ioc.c | 2 - drivers/scsi/bfa/bfa_svc.c | 4 +- drivers/scsi/bfa/bfad.c | 20 +++++----- drivers/scsi/bfa/bfad_attr.c | 2 - drivers/scsi/bfa/bfad_bsg.c | 6 +-- 8 files changed, 84 insertions(+), 98 deletions(-)
drivers/scsi/bfa/bfa_fcbuild.c +4 -4
@@ -1250,8 +1250,8 @@ fc_rspnid_build(struct fchs_s *fchs, voimemset (rspnid,0 ,sizeof (struct fcgs_rspnid_req_s )); rspnid->dap = s_id; - rspnid->spn_len = (u8 )strlen ((char *)name); -strncpy ((char *)rspnid->spn, (char *)name, rspnid->spn_len); +strlcpy (rspnid->spn, name,sizeof (rspnid->spn)); + rspnid->spn_len = (u8 )strlen (rspnid->spn);return sizeof (struct fcgs_rspnid_req_s ) +sizeof (struct ct_hdr_s ); }
@@ -1271,8 +1271,8 @@ fc_rsnn_nn_build(struct fchs_s *fchs, vomemset (rsnn_nn,0 ,sizeof (struct fcgs_rsnn_nn_req_s )); rsnn_nn->node_name = node_name; - rsnn_nn->snn_len = (u8 )strlen ((char *)name); -strncpy ((char *)rsnn_nn->snn, (char *)name, rsnn_nn->snn_len); +strlcpy (rsnn_nn->snn, name,sizeof (rsnn_nn->snn)); + rsnn_nn->snn_len = (u8 )strlen (rsnn_nn->snn);return sizeof (struct fcgs_rsnn_nn_req_s ) +sizeof (struct ct_hdr_s ); }
drivers/scsi/bfa/bfa_fcs.c +39 -39
112 lines not on this page · raw message
drivers/scsi/bfa/bfa_fcs_lport.c +24 -38
134 lines not on this page · raw message
drivers/scsi/bfa/bfa_ioc.c +1 -1
@@ -2803,7 +2803,7 @@ void bfa_ioc_get_adapter_manufacturer(struct bfa_ioc_s *ioc, char *manufacturer) { memset((void *)manufacturer, 0, BFA_ADAPTER_MFG_NAME_LEN); -strncpy (manufacturer,BFA_MFG_NAME ,BFA_ADAPTER_MFG_NAME_LEN ); +strlcpy (manufacturer,BFA_MFG_NAME ,BFA_ADAPTER_MFG_NAME_LEN ); }void
drivers/scsi/bfa/bfa_svc.c +2 -2
@@ -350,8 +350,8 @@ bfa_plog_str(struct bfa_plog_s *plog, en lp.eid = event; lp.log_type =BFA_PL_LOG_TYPE_STRING ; lp.misc = misc; -strncpy (lp.log_entry.string_log, log_str, -BFA_PL_STRING_LOG_SZ -1 ); +strlcpy (lp.log_entry.string_log, log_str, +BFA_PL_STRING_LOG_SZ ); lp.log_entry.string_log[BFA_PL_STRING_LOG_SZ -1 ] ='\0' ;bfa_plog_add (plog, &lp); }
drivers/scsi/bfa/bfad.c +10 -10
@@ -983,20 +983,20 @@ bfad_start_ops(struct bfad_s *bfad) {/* Fill the driver_info info to fcs*/ memset (&driver_info,0 ,sizeof (driver_info)); -strncpy (driver_info.version,BFAD_DRIVER_VERSION , -sizeof (driver_info.version) -1 ); +strlcpy (driver_info.version,BFAD_DRIVER_VERSION , +sizeof (driver_info.version));if (host_name) -strncpy (driver_info.host_machine_name, host_name, -sizeof (driver_info.host_machine_name) -1 ); +strlcpy (driver_info.host_machine_name, host_name, +sizeof (driver_info.host_machine_name));if (os_name) -strncpy (driver_info.host_os_name, os_name, -sizeof (driver_info.host_os_name) -1 ); +strlcpy (driver_info.host_os_name, os_name, +sizeof (driver_info.host_os_name));if (os_patch) -strncpy (driver_info.host_os_patch, os_patch, -sizeof (driver_info.host_os_patch) -1 ); +strlcpy (driver_info.host_os_patch, os_patch, +sizeof (driver_info.host_os_patch)); -strncpy (driver_info.os_device_name, bfad->pci_name, -sizeof (driver_info.os_device_name) -1 ); +strlcpy (driver_info.os_device_name, bfad->pci_name, +sizeof (driver_info.os_device_name));/* FCS driver info init */ spin_lock_irqsave (&bfad->bfad_lock, flags);
drivers/scsi/bfa/bfad_attr.c +1 -1
@@ -843,7 +843,7 @@ bfad_im_symbolic_name_show(struct devicechar symname[BFA_SYMNAME_MAXLEN ];bfa_fcs_lport_get_attr (&bfad->bfa_fcs.fabric.bport, &port_attr); -strncpy (symname, port_attr.port_cfg.sym_name.symname, +strlcpy (symname, port_attr.port_cfg.sym_name.symname,BFA_SYMNAME_MAXLEN );return snprintf (buf,PAGE_SIZE ,"%s\n" , symname); }
drivers/scsi/bfa/bfad_bsg.c +3 -3
@@ -127,7 +127,7 @@ bfad_iocmd_ioc_get_attr(struct bfad_s *b/* fill in driver attr info */ strcpy (iocmd->ioc_attr.driver_attr.driver,BFAD_DRIVER_NAME ); -strncpy (iocmd->ioc_attr.driver_attr.driver_ver, +strlcpy (iocmd->ioc_attr.driver_attr.driver_ver,BFAD_DRIVER_VERSION ,BFA_VERSION_LEN );strcpy (iocmd->ioc_attr.driver_attr.fw_ver, iocmd->ioc_attr.adapter_attr.fw_ver);
@@ -315,9 +315,9 @@ bfad_iocmd_port_get_attr(struct bfad_s * iocmd->attr.port_type = port_attr.port_type; iocmd->attr.loopback = port_attr.loopback; iocmd->attr.authfail = port_attr.authfail; -strncpy (iocmd->attr.port_symname.symname, +strlcpy (iocmd->attr.port_symname.symname, port_attr.port_cfg.sym_name.symname, -sizeof (port_attr.port_cfg.sym_name.symname)); +sizeof (iocmd->attr.port_symname.symname)); iocmd->status =BFA_STATUS_OK ;return 0 ;
Greg Kroah-Hartman
maintainerPATCH 11/55 staging: rts5208: fix gcc-8 logic error warning
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Arnd Bergmann <[email protected]>
commit 58930cced012adb01bc78b3687049b17ef44d0a3 upstream.
As gcc-8 points out, the bit mask check makes no sense here:
drivers/staging/rts5208/sd.c: In function 'ext_sd_send_cmd_get_rsp':drivers/staging/rts5208/sd.c:4130:25: error: bitwise comparison always evaluates to true [-Werror=tautological-compare]
However, the code is even more bogus, as we have already checked for the SD_RSP_TYPE_R0 case earlier in the function and returned success. As seen in the mmc/sd driver core, SD_RSP_TYPE_R0 means "no response" anyway, so checking for a particular response would not help either.
This just removes the nonsensical code to get rid of the warning.
--- drivers/staging/rts5208/sd.c | 6 ------ 1 file changed, 6 deletions(-)
drivers/staging/rts5208/sd.c +0 -6
@@ -4125,12 +4125,6 @@ RTY_SEND_CMD:rtsx_trace (chip);return STATUS_FAIL ; } - - }else if (rsp_type ==SD_RSP_TYPE_R0 ) { -if ((ptr[3 ] &0x1E ) !=0x03 ) { -rtsx_trace (chip); -return STATUS_FAIL ; - } } } }
Greg Kroah-Hartman
maintainerPATCH 12/55 kdb: use memmove instead of overlapping memcpy
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Arnd Bergmann <[email protected]>
commit 2cf2f0d5b91fd1b06a6ae260462fc7945ea84add upstream.
gcc discovered that the memcpy() arguments in kdbnearsym() overlap, so we should really use memmove(), which is defined to handle that correctly:
In function 'memcpy',
inlined from 'kdbnearsym' at /git/arm-soc/kernel/debug/kdb/kdb_support.c:132:4:
/git/arm-soc/include/linux/string.h:353:9: error: '__builtin_memcpy' accessing 792 bytes at offsets 0 and 8 overlaps 784 bytes at offset 8 [-Werror=restrict]
return __builtin_memcpy(p, q, size);
--- kernel/debug/kdb/kdb_support.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
kernel/debug/kdb/kdb_support.c +2 -2
@@ -129,13 +129,13 @@ int kdbnearsym(unsigned long addr, kdb_s }if (i >=ARRAY_SIZE (kdb_name_table)) {debug_kfree (kdb_name_table[0 ]); -memcpy (kdb_name_table, kdb_name_table+1 , +memmove (kdb_name_table, kdb_name_table+1 ,sizeof (kdb_name_table[0 ]) * (ARRAY_SIZE (kdb_name_table)-1 )); }else {debug_kfree (knt1); knt1 = kdb_name_table[i]; -memcpy (kdb_name_table+i, kdb_name_table+i+1 , +memmove (kdb_name_table+i, kdb_name_table+i+1 ,sizeof (kdb_name_table[0 ]) * (ARRAY_SIZE (kdb_name_table)-i-1 )); }
Greg Kroah-Hartman
maintainerPATCH 13/55 iser: set sector for ambiguous mr status errors
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sagi Grimberg <[email protected]>
commit 24c3456c8d5ee6fc1933ca40f7b4406130682668 upstream.
If for some reason we failed to query the mr status, we need to make sure to provide sufficient information for an ambiguous error (guard error on sector 0).
--- drivers/infiniband/ulp/iser/iser_verbs.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-)
drivers/infiniband/ulp/iser/iser_verbs.c +3 -4
@@ -1108,7 +1108,9 @@ u8 iser_check_task_pi_status(struct iscs IB_MR_CHECK_SIG_STATUS, &mr_status);if (ret) {pr_err ("ib_check_mr_status failed, ret %d\n" , ret); - goto err; +/* Not a lot we can do, return ambiguous guard error */ + *sector =0 ; +return 0x1 ; }if (mr_status.fail_status &IB_MR_CHECK_SIG_STATUS ) {
@@ -1136,9 +1138,6 @@ u8 iser_check_task_pi_status(struct iscs }return 0 ; -err: -/* Not alot we can do here, return ambiguous guard error */ -return 0x1 ; }void iser_err_comp (struct ib_wc *wc,const char *type)
Greg Kroah-Hartman
maintainerPATCH 14/55 uprobes: Fix handle_swbp() vs. unregister() + register() race once more
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andrea Parri <[email protected]>
commit 09d3f015d1e1b4fee7e9bbdcf54201d239393391 upstream.
Commit:
142b18ddc8143 ("uprobes: Fix handle_swbp() vs unregister() + register() race")
added the UPROBE_COPY_INSN flag, and corresponding smp_wmb() and smp_rmb() memory barriers, to ensure that handle_swbp() uses fully-initialized uprobes only.
However, the smp_rmb() is mis-placed: this barrier should be placed after handle_swbp() has tested for the flag, thus guaranteeing that (program-order) subsequent loads from the uprobe can see the initial stores performed by prepare_uprobe().
Move the smp_rmb() accordingly. Also amend the comments associated to the two memory barriers to indicate their actual locations.
--- kernel/events/uprobes.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-)
kernel/events/uprobes.c +10 -2
@@ -616,7 +616,7 @@ static int prepare_uprobe(struct uprobeBUG_ON ((uprobe->offset & ~PAGE_MASK ) +UPROBE_SWBP_INSN_SIZE >PAGE_SIZE ); -smp_wmb ();/* pairs with rmb() in find_active_uprobe() */ +smp_wmb ();/* pairs with the smp_rmb() in handle_swbp() */ set_bit (UPROBE_COPY_INSN , &uprobe->flags); out:
@@ -1910,10 +1910,18 @@ static void handle_swbp(struct pt_regs ** After we hit the bp, _unregister + _register can install the * new and not-yet-analyzed uprobe at the same address, restart. */ -smp_rmb ();/* pairs with wmb() in install_breakpoint() */ if (unlikely (!test_bit (UPROBE_COPY_INSN , &uprobe->flags))) goto out; +/* +* Pairs with the smp_wmb() in prepare_uprobe(). +* +* Guarantees that if we see the UPROBE_COPY_INSN bit set, then +* we must also see the stores to &uprobe->arch performed by the +* prepare_uprobe() call. +*/ +smp_rmb (); +/* Tracing handlers use ->utask to communicate with fetch methods */ if (!get_utask ()) goto out;
Greg Kroah-Hartman
maintainerPATCH 15/55 MIPS: ralink: Fix mt7620 nd_sd pinmux
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Mathias Kresin <[email protected]>
commit 7d35baa4e9ec4b717bc0e58a39cdb6a1c50f5465 upstream.
In case the nd_sd group is set to the sd-card function, Pins 45 + 46 are configured as GPIOs. If they are blocked by the sd function, they can't be used as GPIOs.
Patchwork: https://patchwork.linux-mips.org/patch/21220/
--- arch/mips/ralink/mt7620.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/mips/ralink/mt7620.c +1 -1
@@ -84,7 +84,7 @@ static struct rt2880_pmx_func pcie_rst_g };static struct rt2880_pmx_func nd_sd_grp[] = {FUNC ("nand" ,MT7620_GPIO_MODE_NAND ,45 ,15 ), -FUNC ("sd" ,MT7620_GPIO_MODE_SD ,45 ,15 ) +FUNC ("sd" ,MT7620_GPIO_MODE_SD ,47 ,13 ) };static struct rt2880_pmx_group mt7620a_pinmux_data[] = {
Greg Kroah-Hartman
maintainerPATCH 16/55 mips: fix mips_get_syscall_arg o32 check
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dmitry V. Levin <[email protected]>
commit c50cbd85cd7027d32ac5945bb60217936b4f7eaf upstream.
When checking for TIF_32BIT_REGS flag, mips_get_syscall_arg() should use the task specified as its argument instead of the current task.
This potentially affects all syscall_get_arguments() users who specify tasks different from the current.
Patchwork: https://patchwork.linux-mips.org/patch/21185/
--- arch/mips/include/asm/syscall.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/mips/include/asm/syscall.h +1 -1
@@ -51,7 +51,7 @@ static inline unsigned long mips_get_sys#ifdef CONFIG_64BIT case 4 :case 5 :case 6 :case 7 :#ifdef CONFIG_MIPS32_O32 -if (test_thread_flag (TIF_32BIT_REGS )) +if (test_tsk_thread_flag (task,TIF_32BIT_REGS ))return get_user (*arg, (int *)usp + n); else#endif
Greg Kroah-Hartman
maintainerPATCH 17/55 IB/mlx5: Avoid load failure due to unknown link width
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michael Guralnik <[email protected]>
commit db7a691a1551a748cb92d9c89c6b190ea87e28d5 upstream.
If the firmware reports a connection width that is not 1x, 4x, 8x or 12x it causes the driver to fail during initialization.
To prevent this failure every time a new width is introduced to the RDMA stack, we will set a default 4x width for these widths which ar unknown to the driver.
This is needed to allow to run old kernels with new firmware.
--- drivers/infiniband/hw/mlx5/main.c | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-)
drivers/infiniband/hw/mlx5/main.c +11 -18
@@ -869,31 +869,26 @@ enum mlx5_ib_width { MLX5_IB_WIDTH_12X = 1 << 4 }; -static int translate_active_width (struct ib_device *ibdev,u8 active_width, +static void translate_active_width (struct ib_device *ibdev,u8 active_width,u8 *ib_width) {struct mlx5_ib_dev *dev =to_mdev (ibdev); -int err =0 ; -if (active_width &MLX5_IB_WIDTH_1X ) { +if (active_width &MLX5_IB_WIDTH_1X ) *ib_width =IB_WIDTH_1X ; - }else if (active_width &MLX5_IB_WIDTH_2X ) { -mlx5_ib_dbg (dev,"active_width %d is not supported by IB spec\n" , - (int )active_width); - err = -EINVAL ; - }else if (active_width &MLX5_IB_WIDTH_4X ) { +else if (active_width &MLX5_IB_WIDTH_4X ) *ib_width =IB_WIDTH_4X ; - }else if (active_width &MLX5_IB_WIDTH_8X ) { +else if (active_width &MLX5_IB_WIDTH_8X ) *ib_width =IB_WIDTH_8X ; - }else if (active_width &MLX5_IB_WIDTH_12X ) { +else if (active_width &MLX5_IB_WIDTH_12X ) *ib_width =IB_WIDTH_12X ; - }else { -mlx5_ib_dbg (dev,"Invalid active_width %d\n" , +else { +mlx5_ib_dbg (dev,"Invalid active_width %d, setting width to default value: 4x\n" , (int )active_width); - err = -EINVAL ; + *ib_width =IB_WIDTH_4X ; } -return err; +return ; }static int mlx5_mtu_to_ib_mtu (int mtu)
@@ -1001,10 +996,8 @@ static int mlx5_query_hca_port(struct ibif (err) goto out; - err =translate_active_width (ibdev, ib_link_width_oper, - &props->active_width); -if (err) - goto out; +translate_active_width (ibdev, ib_link_width_oper, &props->active_width); + err =mlx5_query_port_ib_proto_oper (mdev, &props->active_speed, port);if (err) goto out;
Greg Kroah-Hartman
maintainerPATCH 18/55 drm/ast: Fix incorrect free on ioregs
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sam Bobroff <[email protected]>
commit dc25ab067645eabd037f1a23d49a666f9e0b8c68 upstream.
If the platform has no IO space, ioregs is placed next to the already allocated regs. In this case, it should not be separately freed.
This prevents a kernel warning from __vunmap "Trying to vfree() nonexistent vm area" when unloading the driver.
--- drivers/gpu/drm/ast/ast_main.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/gpu/drm/ast/ast_main.c +2 -1
@@ -583,7 +583,8 @@ void ast_driver_unload(struct drm_devicedrm_mode_config_cleanup (dev);ast_mm_fini (ast); -pci_iounmap (dev->pdev, ast->ioregs); +if (ast->ioregs != ast->regs +AST_IO_MM_OFFSET ) +pci_iounmap (dev->pdev, ast->ioregs);pci_iounmap (dev->pdev, ast->regs);kfree (ast); }
Greg Kroah-Hartman
maintainerPATCH 19/55 drm: set is_master to 0 upon drm_new_set_master() failure
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Sergio Correia <[email protected]>
commit 23a336b34258aba3b50ea6863cca4e81b5ef6384 upstream.
When drm_new_set_master() fails, set is_master to 0, to prevent a possible NULL pointer deref.
Here is a problematic flow: we check is_master in drm_is_current_master(), then proceed to call drm_lease_owner() passing master. If we do not restore is_master status when drm_new_set_master() fails, we may have a situation in which is_master will be 1 and master itself, NULL, leading to the deref of a NULL pointer in drm_lease_owner().
This fixes the following OOPS, observed on an ArchLinux running a 4.19.2 kernel:
[ 97.804282] BUG: unable to handle kernel NULL pointer dereference at 0000000000000080 [ 97.807224] PGD 0 P4D 0 [ 97.807224] Oops: 0000 [#1] PREEMPT SMP NOPTI [ 97.807224] CPU: 0 PID: 1348 Comm: xfwm4 Tainted: P OE 4.19.2-arch1-1-ARCH #1 [ 97.807224] Hardware name: To Be Filled By O.E.M. To Be Filled By O.E.M./AB350 Pro4, BIOS P5.10 10/16/2018 [ 97.807224] RIP: 0010:drm_lease_owner+0xd/0x20 [drm] [ 97.807224] Code: 83 c4 18 5b 5d c3 b8 ea ff ff ff eb e2 b8 ed ff ff ff eb db e8 b4 ca 68 fb 0f 1f 40 00 0f 1f 44 00 00 48 89 f8 eb 03 48 89 d0 <48> 8b 90 80 00 00 00 48 85 d2 75 f1 c3 66 0f 1f 44 00 00 0f 1f 44 [ 97.807224] RSP: 0018:ffffb8cf08e07bb0 EFLAGS: 00010202 [ 97.807224] RAX: 0000000000000000 RBX: ffff9cf0f2586c00 RCX: ffff9cf0f2586c88 [ 97.807224] RDX: ffff9cf0ddbd8000 RSI: 0000000000000000 RDI: 0000000000000000 [ 97.807224] RBP: ffff9cf1040e9800 R08: 0000000000000000 R09: 0000000000000000 [ 97.807224] R10: ffffdeb30fd5d680 R11: ffffdeb30f5d6808 R12: ffff9cf1040e9888 [ 97.807224] R13: 0000000000000000 R14: dead000000000200 R15: ffff9cf0f2586cc8 [ 97.807224] FS: 00007f4145513180(0000) GS:ffff9cf10ea00000(0000) knlGS:0000000000000000 [ 97.807224] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 97.807224] CR2: 0000000000000080 CR3: 00000003d7548000 CR4: 00000000003406f0 [ 97.807224] Call Trace: [ 97.807224] drm_is_current_master+0x1a/0x30 [drm] [ 97.807224] drm_master_release+0x3e/0x130 [drm] [ 97.807224] drm_file_free.part.0+0x2be/0x2d0 [drm] [ 97.807224] drm_open+0x1ba/0x1e0 [drm] [ 97.807224] drm_stub_open+0xaf/0xe0 [drm] [ 97.807224] chrdev_open+0xa3/0x1b0 [ 97.807224] ? cdev_put.part.0+0x20/0x20 [ 97.807224] do_dentry_open+0x132/0x340 [ 97.807224] path_openat+0x2d1/0x14e0 [ 97.807224] ? mem_cgroup_commit_charge+0x7a/0x520 [ 97.807224] do_filp_open+0x93/0x100 [ 97.807224] ? __check_object_size+0x102/0x189 [ 97.807224] ? _raw_spin_unlock+0x16/0x30 [ 97.807224] do_sys_open+0x186/0x210 [ 97.807224] do_syscall_64+0x5b/0x170 [ 97.807224] entry_SYSCALL_64_after_hwframe+0x44/0xa9 [ 97.807224] RIP: 0033:0x7f4147b07976 [ 97.807224] Code: 89 54 24 08 e8 7b f4 ff ff 8b 74 24 0c 48 8b 3c 24 41 89 c0 44 8b 54 24 08 b8 01 01 00 00 89 f2 48 89 fe bf 9c ff ff ff 0f 05 <48> 3d 00 f0 ff ff 77 30 44 89 c7 89 44 24 08 e8 a6 f4 ff ff 8b 44 [ 97.807224] RSP: 002b:00007ffcced96ca0 EFLAGS: 00000293 ORIG_RAX: 0000000000000101 [ 97.807224] RAX: ffffffffffffffda RBX: 00005619d5037f80 RCX: 00007f4147b07976 [ 97.807224] RDX: 0000000000000002 RSI: 00005619d46b969c RDI: 00000000ffffff9c [ 98.040039] RBP: 0000000000000024 R08: 0000000000000000 R09: 0000000000000000 [ 98.040039] R10: 0000000000000000 R11: 0000000000000293 R12: 0000000000000024 [ 98.040039] R13: 0000000000000012 R14: 00005619d5035950 R15: 0000000000000012 [ 98.040039] Modules linked in: nct6775 hwmon_vid algif_skcipher af_alg nls_iso8859_1 nls_cp437 vfat fat uvcvideo videobuf2_vmalloc videobuf2_memops videobuf2_v4l2 videobuf2_common arc4 videodev media snd_usb_audio snd_hda_codec_hdmi snd_usbmidi_lib snd_rawmidi snd_seq_device mousedev input_leds iwlmvm mac80211 snd_hda_codec_realtek snd_hda_codec_generic snd_hda_intel snd_hda_codec edac_mce_amd kvm_amd snd_hda_core kvm iwlwifi snd_hwdep r8169 wmi_bmof cfg80211 snd_pcm irqbypass snd_timer snd libphy soundcore pinctrl_amd rfkill pcspkr sp5100_tco evdev gpio_amdpt k10temp mac_hid i2c_piix4 wmi pcc_cpufreq acpi_cpufreq vboxnetflt(OE) vboxnetadp(OE) vboxpci(OE) vboxdrv(OE) msr sg crypto_user ip_tables x_tables ext4 crc32c_generic crc16 mbcache jbd2 fscrypto uas usb_storage dm_crypt hid_generic usbhid hid [ 98.040039] dm_mod raid1 md_mod sd_mod crct10dif_pclmul crc32_pclmul crc32c_intel ghash_clmulni_intel pcbc ahci libahci aesni_intel aes_x86_64 libata crypto_simd cryptd glue_helper ccp xhci_pci rng_core scsi_mod xhci_hcd nvidia_drm(POE) drm_kms_helper syscopyarea sysfillrect sysimgblt fb_sys_fops drm agpgart nvidia_uvm(POE) nvidia_modeset(POE) nvidia(POE) ipmi_devintf ipmi_msghandler [ 98.040039] CR2: 0000000000000080 [ 98.040039] ---[ end trace 3b65093b6fe62b2f ]--- [ 98.040039] RIP: 0010:drm_lease_owner+0xd/0x20 [drm] [ 98.040039] Code: 83 c4 18 5b 5d c3 b8 ea ff ff ff eb e2 b8 ed ff ff ff eb db e8 b4 ca 68 fb 0f 1f 40 00 0f 1f 44 00 00 48 89 f8 eb 03 48 89 d0 <48> 8b 90 80 00 00 00 48 85 d2 75 f1 c3 66 0f 1f 44 00 00 0f 1f 44 [ 98.040039] RSP: 0018:ffffb8cf08e07bb0 EFLAGS: 00010202 [ 98.040039] RAX: 0000000000000000 RBX: ffff9cf0f2586c00 RCX: ffff9cf0f2586c88 [ 98.040039] RDX: ffff9cf0ddbd8000 RSI: 0000000000000000 RDI: 0000000000000000 [ 98.040039] RBP: ffff9cf1040e9800 R08: 0000000000000000 R09: 0000000000000000 [ 98.040039] R10: ffffdeb30fd5d680 R11: ffffdeb30f5d6808 R12: ffff9cf1040e9888 [ 98.040039] R13: 0000000000000000 R14: dead000000000200 R15: ffff9cf0f2586cc8 [ 98.040039] FS: 00007f4145513180(0000) GS:ffff9cf10ea00000(0000) knlGS:0000000000000000 [ 98.040039] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 98.040039] CR2: 0000000000000080 CR3: 00000003d7548000 CR4: 00000000003406f0
--- drivers/gpu/drm/drm_auth.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/gpu/drm/drm_auth.c +2 -0
@@ -133,6 +133,7 @@ static int drm_new_set_master(struct drmlockdep_assert_held_once (&dev->master_mutex); +WARN_ON (fpriv->is_master); old_master = fpriv->master; fpriv->master =drm_master_create (dev);if (!fpriv->master) {
@@ -161,6 +162,7 @@ out_err:/* drop references and restore old master on failure */ drm_master_put (&fpriv->master); fpriv->master = old_master; + fpriv->is_master =0 ;return ret; }
Greg Kroah-Hartman
maintainerPATCH 20/55 drm/meson: Enable fast_io in meson_dw_hdmi_regmap_config
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lyude Paul <[email protected]>
commit 995b278e4723b26f8ebf0e7c119286d16c712747 upstream.
Seeing as we use this registermap in the context of our IRQ handlers, we need to be using spinlocks for reading/writing registers so that we can still read them from IRQ handlers without having to grab any mutexes and accidentally sleep. We don't currently do this, as pointed out by lockdep:
[ 18.403770] BUG: sleeping function called from invalid context at kernel/locking/mutex.c:908 [ 18.406744] in_atomic(): 1, irqs_disabled(): 128, pid: 68, name: kworker/u17:0 [ 18.413864] INFO: lockdep is turned off. [ 18.417675] irq event stamp: 12 [ 18.420778] hardirqs last enabled at (11): [<ffff000008a4f57c>] _raw_spin_unlock_irq+0x2c/0x60 [ 18.429510] hardirqs last disabled at (12): [<ffff000008a48914>] __schedule+0xc4/0xa60 [ 18.437345] softirqs last enabled at (0): [<ffff0000080b55e0>] copy_process.isra.4.part.5+0x4d8/0x1c50 [ 18.446684] softirqs last disabled at (0): [<0000000000000000>] (null) [ 18.453979] CPU: 0 PID: 68 Comm: kworker/u17:0 Tainted: G W O 4.20.0-rc3Lyude-Test+ #9 [ 18.469839] Hardware name: amlogic khadas-vim2/khadas-vim2, BIOS 2018.07-rc2-armbian 09/11/2018 [ 18.480037] Workqueue: hci0 hci_power_on [bluetooth] [ 18.487138] Call trace: [ 18.494192] dump_backtrace+0x0/0x1b8 [ 18.501280] show_stack+0x14/0x20 [ 18.508361] dump_stack+0xbc/0xf4 [ 18.515427] ___might_sleep+0x140/0x1d8 [ 18.522515] __might_sleep+0x50/0x88 [ 18.529582] __mutex_lock+0x60/0x870 [ 18.536621] mutex_lock_nested+0x1c/0x28 [ 18.543660] regmap_lock_mutex+0x10/0x18 [ 18.550696] regmap_read+0x38/0x70 [ 18.557727] dw_hdmi_hardirq+0x58/0x138 [dw_hdmi] [ 18.564804] __handle_irq_event_percpu+0xac/0x410 [ 18.571891] handle_irq_event_percpu+0x34/0x88 [ 18.578982] handle_irq_event+0x48/0x78 [ 18.586051] handle_fasteoi_irq+0xac/0x160 [ 18.593061] generic_handle_irq+0x24/0x38 [ 18.599989] __handle_domain_irq+0x60/0xb8 [ 18.606857] gic_handle_irq+0x50/0xa0 [ 18.613659] el1_irq+0xb4/0x130 [ 18.620394] debug_lockdep_rcu_enabled+0x2c/0x30 [ 18.627111] schedule+0x38/0xa0 [ 18.633781] schedule_timeout+0x3a8/0x510 [ 18.640389] wait_for_common+0x15c/0x180 [ 18.646905] wait_for_completion+0x14/0x20 [ 18.653319] mmc_wait_for_req_done+0x28/0x168 [ 18.659693] mmc_wait_for_req+0xa8/0xe8 [ 18.665978] mmc_wait_for_cmd+0x64/0x98 [ 18.672180] mmc_io_rw_direct_host+0x94/0x130 [ 18.678385] mmc_io_rw_direct+0x10/0x18 [ 18.684516] sdio_enable_func+0xe8/0x1d0 [ 18.690627] btsdio_open+0x24/0xc0 [btsdio] [ 18.696821] hci_dev_do_open+0x64/0x598 [bluetooth] [ 18.703025] hci_power_on+0x50/0x270 [bluetooth] [ 18.709163] process_one_work+0x2a0/0x6e0 [ 18.715252] worker_thread+0x40/0x448 [ 18.721310] kthread+0x12c/0x130 [ 18.727326] ret_from_fork+0x10/0x1c [ 18.735555] ------------[ cut here ]------------ [ 18.741430] do not call blocking ops when !TASK_RUNNING; state=2 set at [<000000006265ec59>] wait_for_common+0x140/0x180 [ 18.752417] WARNING: CPU: 0 PID: 68 at kernel/sched/core.c:6096 __might_sleep+0x7c/0x88 [ 18.760553] Modules linked in: dm_mirror dm_region_hash dm_log dm_mod
btsdio bluetooth snd_soc_hdmi_codec dw_hdmi_i2s_audio ecdh_generic brcmfmac brcmutil cfg80211 rfkill ir_nec_decoder meson_dw_hdmi(O) dw_hdmi rc_geekbox meson_rng meson_ir ao_cec rng_core rc_core cec leds_pwm efivars nfsd ip_tables x_tables crc32_generic f2fs uas meson_gxbb_wdt pwm_meson efivarfs ipv6
[ 18.799469] CPU: 0 PID: 68 Comm: kworker/u17:0 Tainted: G W O 4.20.0-rc3Lyude-Test+ #9 [ 18.808858] Hardware name: amlogic khadas-vim2/khadas-vim2, BIOS 2018.07-rc2-armbian 09/11/2018 [ 18.818045] Workqueue: hci0 hci_power_on [bluetooth] [ 18.824088] pstate: 80000085 (Nzcv daIf -PAN -UAO) [ 18.829891] pc : __might_sleep+0x7c/0x88 [ 18.835722] lr : __might_sleep+0x7c/0x88 [ 18.841256] sp : ffff000008003cb0 [ 18.846751] x29: ffff000008003cb0 x28: 0000000000000000 [ 18.852269] x27: ffff00000938e000 x26: ffff800010283000 [ 18.857726] x25: ffff800010353280 x24: ffff00000868ef50 [ 18.863166] x23: 0000000000000000 x22: 0000000000000000 [ 18.868551] x21: 0000000000000000 x20: 000000000000038c [ 18.873850] x19: ffff000008cd08c0 x18: 0000000000000010 [ 18.879081] x17: ffff000008a68cb0 x16: 0000000000000000 [ 18.884197] x15: 0000000000aaaaaa x14: 0e200e200e200e20 [ 18.889239] x13: 0000000000000001 x12: 00000000ffffffff [ 18.894261] x11: ffff000008adfa48 x10: 0000000000000001 [ 18.899517] x9 : ffff0000092a0158 x8 : 0000000000000000 [ 18.904674] x7 : ffff00000812136c x6 : 0000000000000000 [ 18.909895] x5 : 0000000000000000 x4 : 0000000000000001 [ 18.915080] x3 : 0000000000000007 x2 : 0000000000000007 [ 18.920269] x1 : 99ab8e9ebb6c8500 x0 : 0000000000000000 [ 18.925443] Call trace: [ 18.929904] __might_sleep+0x7c/0x88 [ 18.934311] __mutex_lock+0x60/0x870 [ 18.938687] mutex_lock_nested+0x1c/0x28 [ 18.943076] regmap_lock_mutex+0x10/0x18 [ 18.947453] regmap_read+0x38/0x70 [ 18.951842] dw_hdmi_hardirq+0x58/0x138 [dw_hdmi] [ 18.956269] __handle_irq_event_percpu+0xac/0x410 [ 18.960712] handle_irq_event_percpu+0x34/0x88 [ 18.965176] handle_irq_event+0x48/0x78 [ 18.969612] handle_fasteoi_irq+0xac/0x160 [ 18.974058] generic_handle_irq+0x24/0x38 [ 18.978501] __handle_domain_irq+0x60/0xb8 [ 18.982938] gic_handle_irq+0x50/0xa0 [ 18.987351] el1_irq+0xb4/0x130 [ 18.991734] debug_lockdep_rcu_enabled+0x2c/0x30 [ 18.996180] schedule+0x38/0xa0 [ 19.000609] schedule_timeout+0x3a8/0x510 [ 19.005064] wait_for_common+0x15c/0x180 [ 19.009513] wait_for_completion+0x14/0x20 [ 19.013951] mmc_wait_for_req_done+0x28/0x168 [ 19.018402] mmc_wait_for_req+0xa8/0xe8 [ 19.022809] mmc_wait_for_cmd+0x64/0x98 [ 19.027177] mmc_io_rw_direct_host+0x94/0x130 [ 19.031563] mmc_io_rw_direct+0x10/0x18 [ 19.035922] sdio_enable_func+0xe8/0x1d0 [ 19.040294] btsdio_open+0x24/0xc0 [btsdio] [ 19.044742] hci_dev_do_open+0x64/0x598 [bluetooth] [ 19.049228] hci_power_on+0x50/0x270 [bluetooth] [ 19.053687] process_one_work+0x2a0/0x6e0 [ 19.058143] worker_thread+0x40/0x448 [ 19.062608] kthread+0x12c/0x130 [ 19.067064] ret_from_fork+0x10/0x1c [ 19.071513] irq event stamp: 12 [ 19.075937] hardirqs last enabled at (11): [<ffff000008a4f57c>] _raw_spin_unlock_irq+0x2c/0x60 [ 19.083560] hardirqs last disabled at (12): [<ffff000008a48914>] __schedule+0xc4/0xa60 [ 19.091401] softirqs last enabled at (0): [<ffff0000080b55e0>] copy_process.isra.4.part.5+0x4d8/0x1c50 [ 19.100801] softirqs last disabled at (0): [<0000000000000000>] (null) [ 19.108135] ---[ end trace 38c4920787b88c75 ]---
So, fix this by enabling the fast_io option in our regmap config so that regmap uses spinlocks for locking instead of mutexes.
--- drivers/gpu/drm/meson/meson_dw_hdmi.c | 1 + 1 file changed, 1 insertion(+)
drivers/gpu/drm/meson/meson_dw_hdmi.c +1 -0
@@ -697,6 +697,7 @@ static const struct regmap_config meson_ .reg_read = meson_dw_hdmi_reg_read, .reg_write = meson_dw_hdmi_reg_write, .max_register = 0x10000, + .fast_io = true, };static bool meson_hdmi_connector_is_available (struct device *dev)
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
Greg Kroah-Hartman
maintainerPATCH 21/55 drm/meson: Fix OOB memory accesses in meson_viu_set_osd_lut()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lyude Paul <[email protected]>
commit 97b2a3180a559a33852ac0cd77904166069484fd upstream.
Currently on driver bringup with KASAN enabled, meson triggers an OOB memory access as shown below:
[ 117.904528] ================================================================== [ 117.904560] BUG: KASAN: global-out-of-bounds in meson_viu_set_osd_lut+0x7a0/0x890 [ 117.904588] Read of size 4 at addr ffff20000a63ce24 by task systemd-udevd/498 [ 117.904601] [ 118.083372] CPU: 4 PID: 498 Comm: systemd-udevd Not tainted 4.20.0-rc3Lyude-Test+ #20 [ 118.091143] Hardware name: amlogic khadas-vim2/khadas-vim2, BIOS 2018.07-rc2-armbian 09/11/2018 [ 118.099768] Call trace: [ 118.102181] dump_backtrace+0x0/0x3e8 [ 118.105796] show_stack+0x14/0x20 [ 118.109083] dump_stack+0x130/0x1c4 [ 118.112539] print_address_description+0x60/0x25c [ 118.117214] kasan_report+0x1b4/0x368 [ 118.120851] __asan_report_load4_noabort+0x18/0x20 [ 118.125566] meson_viu_set_osd_lut+0x7a0/0x890 [ 118.129953] meson_viu_init+0x10c/0x290 [ 118.133741] meson_drv_bind_master+0x474/0x748 [ 118.138141] meson_drv_bind+0x10/0x18 [ 118.141760] try_to_bring_up_master+0x3d8/0x768 [ 118.146249] component_add+0x214/0x570 [ 118.149978] meson_dw_hdmi_probe+0x18/0x20 [meson_dw_hdmi] [ 118.155404] platform_drv_probe+0x98/0x138 [ 118.159455] really_probe+0x2a0/0xa70 [ 118.163070] driver_probe_device+0x1b4/0x2d8 [ 118.167299] __driver_attach+0x200/0x280 [ 118.171189] bus_for_each_dev+0x10c/0x1a8 [ 118.175144] driver_attach+0x38/0x50 [ 118.178681] bus_add_driver+0x330/0x608 [ 118.182471] driver_register+0x140/0x388 [ 118.186361] __platform_driver_register+0xc8/0x108 [ 118.191117] meson_dw_hdmi_platform_driver_init+0x1c/0x1000 [meson_dw_hdmi] [ 118.198022] do_one_initcall+0x12c/0x3bc [ 118.201883] do_init_module+0x1fc/0x638 [ 118.205673] load_module+0x4b4c/0x6808 [ 118.209387] __se_sys_init_module+0x2e8/0x3c0 [ 118.213699] __arm64_sys_init_module+0x68/0x98 [ 118.218100] el0_svc_common+0x104/0x210 [ 118.221893] el0_svc_handler+0x48/0xb8 [ 118.225594] el0_svc+0x8/0xc [ 118.228429] [ 118.229887] The buggy address belongs to the variable: [ 118.235007] eotf_33_linear_mapping+0x84/0xc0 [ 118.239301] [ 118.240752] Memory state around the buggy address: [ 118.245522] ffff20000a63cd00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 118.252695] ffff20000a63cd80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 118.259850] >ffff20000a63ce00: 00 00 00 00 04 fa fa fa fa fa fa fa 00 00 00 00 [ 118.267000] ^ [ 118.271222] ffff20000a63ce80: 00 fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00 [ 118.278393] ffff20000a63cf00: 00 00 00 00 00 00 00 00 00 00 00 00 04 fa fa fa [ 118.285542] ================================================================== [ 118.292699] Disabling lock debugging due to kernel taint
It seems that when looping through the OSD EOTF LUT maps, we use the same max iterator for OETF: 20. This is wrong though, since 20*2 is 40, which means that we'll stop out of bounds on the EOTF maps.
But, this whole thing is already confusing enough to read through as-is, so let's just replace all of the hardcoded sizes with OSD_(OETF/EOTF)_LUT_SIZE / 2.
--- drivers/gpu/drm/meson/meson_viu.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-)
drivers/gpu/drm/meson/meson_viu.c +6 -6
@@ -184,18 +184,18 @@ void meson_viu_set_osd_lut(struct meson_if (lut_sel ==VIU_LUT_OSD_OETF ) {writel (0 , priv->io_base +_REG (addr_port)); -for (i =0 ; i <20 ; i++) +for (i =0 ; i < (OSD_OETF_LUT_SIZE /2 ); i++)writel (r_map[i *2 ] | (r_map[i *2 +1 ] <<16 ), priv->io_base +_REG (data_port));writel (r_map[OSD_OETF_LUT_SIZE -1 ] | (g_map[0 ] <<16 ), priv->io_base +_REG (data_port)); -for (i =0 ; i <20 ; i++) +for (i =0 ; i < (OSD_OETF_LUT_SIZE /2 ); i++)writel (g_map[i *2 +1 ] | (g_map[i *2 +2 ] <<16 ), priv->io_base +_REG (data_port)); -for (i =0 ; i <20 ; i++) +for (i =0 ; i < (OSD_OETF_LUT_SIZE /2 ); i++)writel (b_map[i *2 ] | (b_map[i *2 +1 ] <<16 ), priv->io_base +_REG (data_port));
@@ -211,18 +211,18 @@ void meson_viu_set_osd_lut(struct meson_ }else if (lut_sel ==VIU_LUT_OSD_EOTF ) {writel (0 , priv->io_base +_REG (addr_port)); -for (i =0 ; i <20 ; i++) +for (i =0 ; i < (OSD_EOTF_LUT_SIZE /2 ); i++)writel (r_map[i *2 ] | (r_map[i *2 +1 ] <<16 ), priv->io_base +_REG (data_port));writel (r_map[OSD_EOTF_LUT_SIZE -1 ] | (g_map[0 ] <<16 ), priv->io_base +_REG (data_port)); -for (i =0 ; i <20 ; i++) +for (i =0 ; i < (OSD_EOTF_LUT_SIZE /2 ); i++)writel (g_map[i *2 +1 ] | (g_map[i *2 +2 ] <<16 ), priv->io_base +_REG (data_port)); -for (i =0 ; i <20 ; i++) +for (i =0 ; i < (OSD_EOTF_LUT_SIZE /2 ); i++)writel (b_map[i *2 ] | (b_map[i *2 +1 ] <<16 ), priv->io_base +_REG (data_port));
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
Greg Kroah-Hartman
maintainerPATCH 22/55 userfaultfd: use ENOENT instead of EFAULT if the atomic copy user fails
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andrea Arcangeli <[email protected]>
commit 9e368259ad988356c4c95150fafd1a06af095d98 upstream.
Patch series "userfaultfd shmem updates".
Jann found two bugs in the userfaultfd shmem MAP_SHARED backend: the lack of the VM_MAYWRITE check and the lack of i_size checks.
Then looking into the above we also fixed the MAP_PRIVATE case.
Hugh by source review also found a data loss source if UFFDIO_COPY is used on shmem MAP_SHARED PROT_READ mappings (the production usages incidentally run with PROT_READ|PROT_WRITE, so the data loss couldn't happen in those production usages like with QEMU).
The whole patchset is marked for stable.
We verified QEMU postcopy live migration with guest running on shmem MAP_PRIVATE run as well as before after the fix of shmem MAP_PRIVATE. Regardless if it's shmem or hugetlbfs or MAP_PRIVATE or MAP_SHARED, QEMU unconditionally invokes a punch hole if the guest mapping is filebacked and a MADV_DONTNEED too (needed to get rid of the MAP_PRIVATE COWs and for the anon backend).
This patch (of 5):
We internally used EFAULT to communicate with the caller, switch to ENOENT, so EFAULT can be used as a non internal retval.
--- mm/hugetlb.c | 2 +- mm/shmem.c | 2 +- mm/userfaultfd.c | 6 +++--- 3 files changed, 5 insertions(+), 5 deletions(-)
mm/hugetlb.c +1 -1
@@ -4037,7 +4037,7 @@ int hugetlb_mcopy_atomic_pte(struct mm_s/* fallback to copy_from_user outside mmap_sem */ if (unlikely (ret)) { - ret = -EFAULT ; + ret = -ENOENT ; *pagep = page;/* don't free the page */ goto out;
mm/shmem.c +1 -1
@@ -2266,7 +2266,7 @@ static int shmem_mfill_atomic_pte(struct *pagep = page;shmem_inode_unacct_blocks (inode,1 );/* don't free the page */ -return -EFAULT ; +return -ENOENT ; } }else {/* mfill_zeropage_atomic */ clear_highpage (page);
mm/userfaultfd.c +3 -3
@@ -49,7 +49,7 @@ static int mcopy_atomic_pte(struct mm_st/* fallback to copy_from_user outside mmap_sem */ if (unlikely (ret)) { - ret = -EFAULT ; + ret = -ENOENT ; *pagep = page;/* don't free the page */ goto out;
@@ -275,7 +275,7 @@ retry:cond_resched (); -if (unlikely (err == -EFAULT )) { +if (unlikely (err == -ENOENT )) {up_read (&dst_mm->mmap_sem);BUG_ON (!page);
@@ -521,7 +521,7 @@ retry: src_addr, &page, zeropage);cond_resched (); -if (unlikely (err == -EFAULT )) { +if (unlikely (err == -ENOENT )) {void *page_kaddr;up_read (&dst_mm->mmap_sem);
Greg Kroah-Hartman
maintainerPATCH 23/55 userfaultfd: shmem: allocate anonymous memory for MAP_PRIVATE shmem
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andrea Arcangeli <[email protected]>
commit 5b51072e97d587186c2f5390c8c9c1fb7e179505 upstream.
Userfaultfd did not create private memory when UFFDIO_COPY was invoked on a MAP_PRIVATE shmem mapping. Instead it wrote to the shmem file, even when that had not been opened for writing. Though, fortunately, that could only happen where there was a hole in the file.
Fix the shmem-backed implementation of UFFDIO_COPY to create private memory for MAP_PRIVATE mappings. The hugetlbfs-backed implementation was already correct.
This change is visible to userland, if userfaultfd has been used in unintended ways: so it introduces a small risk of incompatibility, but is necessary in order to respect file permissions.
An app that uses UFFDIO_COPY for anything like postcopy live migration won't notice the difference, and in fact it'll run faster because there will be no copy-on-write and memory waste in the tmpfs pagecache anymore.
Userfaults on MAP_PRIVATE shmem keep triggering only on file holes like before.
The real zeropage can also be built on a MAP_PRIVATE shmem mapping through UFFDIO_ZEROPAGE and that's safe because the zeropage pte is never dirty, in turn even an mprotect upgrading the vma permission from PROT_READ to PROT_READ|PROT_WRITE won't make the zeropage pte writable.
--- mm/userfaultfd.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-)
mm/userfaultfd.c +13 -2
@@ -381,7 +381,17 @@ static __always_inline ssize_t mfill_ato {ssize_t err; -if (vma_is_anonymous (dst_vma)) { +/* +* The normal page fault path for a shmem will invoke the +* fault, fill the hole in the file and COW it right away. The +* result generates plain anonymous memory. So when we are +* asked to fill an hole in a MAP_PRIVATE shmem mapping, we'll +* generate anonymous memory directly without actually filling +* the hole. For the MAP_PRIVATE case the robustness check +* only happens in the pagetable (to verify it's still none) +* and not in the radix tree. +*/ +if (!(dst_vma->vm_flags &VM_SHARED )) {if (!zeropage) err =mcopy_atomic_pte (dst_mm, dst_pmd, dst_vma, dst_addr, src_addr, page);
@@ -480,7 +490,8 @@ retry:* dst_vma. */ err = -ENOMEM ; -if (vma_is_anonymous (dst_vma) &&unlikely (anon_vma_prepare (dst_vma))) +if (!(dst_vma->vm_flags &VM_SHARED ) && +unlikely (anon_vma_prepare (dst_vma))) goto out_unlock;while (src_addr < src_start + len) {
Greg Kroah-Hartman
maintainerPATCH 24/55 userfaultfd: shmem: add i_size checks
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andrea Arcangeli <[email protected]>
commit e2a50c1f64145a04959df2442305d57307e5395a upstream.
With MAP_SHARED: recheck the i_size after taking the PT lock, to serialize against truncate with the PT lock. Delete the page from the pagecache if the i_size_read check fails.
With MAP_PRIVATE: check the i_size after the PT lock before mapping anonymous memory or zeropages into the MAP_PRIVATE shmem mapping.
A mostly irrelevant cleanup: like we do the delete_from_page_cache() pagecache removal after dropping the PT lock, the PT lock is a spinlock so drop it before the sleepable page lock.
--- mm/shmem.c | 18 ++++++++++++++++-- mm/userfaultfd.c | 26 ++++++++++++++++++++++++-- 2 files changed, 40 insertions(+), 4 deletions(-)
mm/shmem.c +16 -2
@@ -2244,6 +2244,7 @@ static int shmem_mfill_atomic_pte(structstruct page *page;pte_t _dst_pte, *dst_pte;int ret; +pgoff_t offset, max_off; ret = -ENOMEM ;if (!shmem_inode_acct_block (inode,1 ))
@@ -2281,6 +2282,12 @@ static int shmem_mfill_atomic_pte(struct__SetPageSwapBacked (page);__SetPageUptodate (page); + ret = -EFAULT ; + offset =linear_page_index (dst_vma, dst_addr); + max_off =DIV_ROUND_UP (i_size_read (inode),PAGE_SIZE ); +if (unlikely (offset >= max_off)) + goto out_release; + ret =mem_cgroup_try_charge (page, dst_mm, gfp, &memcg, false);if (ret) goto out_release;
@@ -2299,8 +2306,14 @@ static int shmem_mfill_atomic_pte(structif (dst_vma->vm_flags &VM_WRITE ) _dst_pte =pte_mkwrite (pte_mkdirty (_dst_pte)); - ret = -EEXIST ; dst_pte =pte_offset_map_lock (dst_mm, dst_pmd, dst_addr, &ptl); + + ret = -EFAULT ; + max_off =DIV_ROUND_UP (i_size_read (inode),PAGE_SIZE ); +if (unlikely (offset >= max_off)) + goto out_release_uncharge_unlock; + + ret = -EEXIST ;if (!pte_none (*dst_pte)) goto out_release_uncharge_unlock;
@@ -2318,13 +2331,14 @@ static int shmem_mfill_atomic_pte(struct/* No need to invalidate - it was non-present before */ update_mmu_cache (dst_vma, dst_addr, dst_pte); -unlock_page (page);pte_unmap_unlock (dst_pte, ptl); +unlock_page (page); ret =0 ; out:return ret; out_release_uncharge_unlock:pte_unmap_unlock (dst_pte, ptl); +delete_from_page_cache (page); out_release_uncharge:mem_cgroup_cancel_charge (page, memcg, false); out_release:
mm/userfaultfd.c +24 -2
@@ -34,6 +34,8 @@ static int mcopy_atomic_pte(struct mm_stvoid *page_kaddr;int ret;struct page *page; +pgoff_t offset, max_off; +struct inode *inode;if (!*pagep) { ret = -ENOMEM ;
@@ -74,8 +76,17 @@ static int mcopy_atomic_pte(struct mm_stif (dst_vma->vm_flags &VM_WRITE ) _dst_pte =pte_mkwrite (pte_mkdirty (_dst_pte)); - ret = -EEXIST ; dst_pte =pte_offset_map_lock (dst_mm, dst_pmd, dst_addr, &ptl); +if (dst_vma->vm_file) { +/* the shmem MAP_PRIVATE case requires checking the i_size */ + inode = dst_vma->vm_file->f_inode; + offset =linear_page_index (dst_vma, dst_addr); + max_off =DIV_ROUND_UP (i_size_read (inode),PAGE_SIZE ); + ret = -EFAULT ; +if (unlikely (offset >= max_off)) + goto out_release_uncharge_unlock; + } + ret = -EEXIST ;if (!pte_none (*dst_pte)) goto out_release_uncharge_unlock;
@@ -109,11 +120,22 @@ static int mfill_zeropage_pte(struct mm_pte_t _dst_pte, *dst_pte;spinlock_t *ptl;int ret; +pgoff_t offset, max_off; +struct inode *inode; _dst_pte =pte_mkspecial (pfn_pte (my_zero_pfn (dst_addr), dst_vma->vm_page_prot)); - ret = -EEXIST ; dst_pte =pte_offset_map_lock (dst_mm, dst_pmd, dst_addr, &ptl); +if (dst_vma->vm_file) { +/* the shmem MAP_PRIVATE case requires checking the i_size */ + inode = dst_vma->vm_file->f_inode; + offset =linear_page_index (dst_vma, dst_addr); + max_off =DIV_ROUND_UP (i_size_read (inode),PAGE_SIZE ); + ret = -EFAULT ; +if (unlikely (offset >= max_off)) + goto out_unlock; + } + ret = -EEXIST ;if (!pte_none (*dst_pte)) goto out_unlock;set_pte_at (dst_mm, dst_addr, dst_pte, _dst_pte);
Greg Kroah-Hartman
maintainerPATCH 25/55 userfaultfd: shmem: UFFDIO_COPY: set the page dirty if VM_WRITE is not set
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andrea Arcangeli <[email protected]>
commit dcf7fe9d89763a28e0f43975b422ff141fe79e43 upstream.
Set the page dirty if VM_WRITE is not set because in such case the pte won't be marked dirty and the page would be reclaimed without writepage (i.e. swapout in the shmem case).
This was found by source review. Most apps (certainly including QEMU) only use UFFDIO_COPY on PROT_READ|PROT_WRITE mappings or the app can't modify the memory in the first place. This is for correctness and it could help the non cooperative use case to avoid unexpected data loss.
--- mm/shmem.c | 11 +++++++++++ 1 file changed, 11 insertions(+)
mm/shmem.c +11 -0
@@ -2305,6 +2305,16 @@ static int shmem_mfill_atomic_pte(struct _dst_pte =mk_pte (page, dst_vma->vm_page_prot);if (dst_vma->vm_flags &VM_WRITE ) _dst_pte =pte_mkwrite (pte_mkdirty (_dst_pte)); +else { +/* +* We don't set the pte dirty if the vma has no +* VM_WRITE permission, so mark the page dirty or it +* could be freed from under us. We could do it +* unconditionally before unlock_page(), but doing it +* only if VM_WRITE is not set is faster. +*/ +set_page_dirty (page); + } dst_pte =pte_offset_map_lock (dst_mm, dst_pmd, dst_addr, &ptl);
@@ -2338,6 +2348,7 @@ out:return ret; out_release_uncharge_unlock:pte_unmap_unlock (dst_pte, ptl); +ClearPageDirty (page);delete_from_page_cache (page); out_release_uncharge:mem_cgroup_cancel_charge (page, memcg, false);
Greg Kroah-Hartman
maintainerPATCH 26/55 scsi: scsi_devinfo: cleanly zero-pad devinfo strings
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Martin Wilck <[email protected]>
commit 81df022b688d43d2a3667518b2f755d384397910 upstream.
Cleanly fill memory for "vendor" and "model" with 0-bytes for the "compatible" case rather than adding only a single 0 byte. This simplifies the devinfo code a a bit, and avoids mistakes in other places of the code (not in current upstream, but we had one such mistake in the SUSE kernel).
[mkp: applied by hand and added braces]
--- drivers/scsi/scsi_devinfo.c | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-)
drivers/scsi/scsi_devinfo.c +7 -15
@@ -34,7 +34,6 @@ struct scsi_dev_info_list_table { }; -static const char spaces[] =" " ;/* 16 of them */ static unsigned scsi_default_dev_flags;static LIST_HEAD (scsi_dev_info_list);static char scsi_dev_flags[256 ];
@@ -296,20 +295,13 @@ static void scsi_strcpy_devinfo(char *nasize_t from_length; from_length =strlen (from); -strncpy (to, from,min (to_length, from_length)); -if (from_length < to_length) { -if (compatible) { -/* -* NUL terminate the string if it is short. -*/ - to[from_length] ='\0' ; - }else { -/* -* space pad the string if it is short. -*/ -strncpy (&to[from_length], spaces, - to_length - from_length); - } +/* this zero-pads the destination */ +strncpy (to, from, to_length); +if (from_length < to_length && !compatible) { +/* +* space pad the string if it is short. +*/ +memset (&to[from_length],' ' , to_length - from_length); }if (from_length > to_length) printk(KERN_WARNING "%s: %s string '%s' is too long\n",
Greg Kroah-Hartman
maintainerPATCH 27/55 userfaultfd: shmem/hugetlbfs: only allow to register VM_MAYWRITE vmas
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Andrea Arcangeli <[email protected]>
commit 29ec90660d68bbdd69507c1c8b4e33aa299278b1 upstream.
After the VMA to register the uffd onto is found, check that it has VM_MAYWRITE set before allowing registration. This way we inherit all common code checks before allowing to fill file holes in shmem and hugetlbfs with UFFDIO_COPY.
The userfaultfd memory model is not applicable for readonly files unless it's a MAP_PRIVATE.
--- fs/userfaultfd.c | 15 +++++++++++++++ mm/userfaultfd.c | 15 ++++++--------- 2 files changed, 21 insertions(+), 9 deletions(-)
fs/userfaultfd.c +15 -0
@@ -1362,6 +1362,19 @@ static int userfaultfd_register(struct u ret = -EINVAL ;if (!vma_can_userfault (cur)) goto out_unlock; + +/* +* UFFDIO_COPY will fill file holes even without +* PROT_WRITE. This check enforces that if this is a +* MAP_SHARED, the process has write permission to the backing +* file. If VM_MAYWRITE is set it also enforces that on a +* MAP_SHARED vma: there is no F_WRITE_SEAL and no further +* F_WRITE_SEAL can be taken until the vma is destroyed. +*/ + ret = -EPERM ; +if (unlikely (!(cur->vm_flags &VM_MAYWRITE ))) + goto out_unlock; +/* * If this vma contains ending address, and huge pages * check alignment.
@@ -1407,6 +1420,7 @@ static int userfaultfd_register(struct uBUG_ON (!vma_can_userfault (vma));BUG_ON (vma->vm_userfaultfd_ctx.ctx && vma->vm_userfaultfd_ctx.ctx != ctx); +WARN_ON (!(vma->vm_flags &VM_MAYWRITE ));/* * Nothing to do: this vma is already registered into this
@@ -1553,6 +1567,7 @@ static int userfaultfd_unregister(structcond_resched ();BUG_ON (!vma_can_userfault (vma)); +WARN_ON (!(vma->vm_flags &VM_MAYWRITE ));/* * Nothing to do: this vma is already registered into this
mm/userfaultfd.c +6 -9
@@ -228,8 +228,9 @@ retry:if (!dst_vma || !is_vm_hugetlb_page (dst_vma)) goto out_unlock;/* -* Only allow __mcopy_atomic_hugetlb on userfaultfd -* registered ranges. +* Check the vma is registered in uffd, this is +* required to enforce the VM_MAYWRITE check done at +* uffd registration time. */ if (!dst_vma->vm_userfaultfd_ctx.ctx) goto out_unlock;
@@ -472,13 +473,9 @@ retry:if (!dst_vma) goto out_unlock;/* -* Be strict and only allow __mcopy_atomic on userfaultfd -* registered ranges to prevent userland errors going -* unnoticed. As far as the VM consistency is concerned, it -* would be perfectly safe to remove this check, but there's -* no useful usage for __mcopy_atomic ouside of userfaultfd -* registered ranges. This is after all why these are ioctls -* belonging to the userfaultfd and not syscalls. +* Check the vma is registered in uffd, this is required to +* enforce the VM_MAYWRITE check done at uffd registration +* time. */ if (!dst_vma->vm_userfaultfd_ctx.ctx) goto out_unlock;
Greg Kroah-Hartman
maintainerPATCH 28/55 ALSA: trident: Suppress gcc string warning
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Takashi Iwai <[email protected]>
commit d6b340d7cb33c816ef4abe8143764ec5ab14a5cc upstream.
The meddlesome gcc warns about the possible shortname string in
trident driver code:
sound/pci/trident/trident.c: In function ‘snd_trident_probe’:
sound/pci/trident/trident.c:126:2: warning: ‘strcat’ accessing 17 or more bytes at offsets 36 and 20 may overlap 1 byte at offset 36 [-Wrestrict] strcat(card->shortname, card->driver);
It happens since gcc calculates the possible string size from card->driver, but this can't be true since we did set the string just before that, and they are much shorter.
For shutting it up, use the exactly same string set to card->driver for strcat() to card->shortname, too.
--- sound/pci/trident/trident.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
sound/pci/trident/trident.c +1 -1
@@ -123,7 +123,7 @@ static int snd_trident_probe(struct pci_ }else {strcpy (card->shortname,"Trident " ); } -strcat (card->shortname, card->driver); +strcat (card->shortname, str);sprintf (card->longname,"%s PCI Audio at 0x%lx, irq %d" , card->shortname, trident->port, trident->irq);
Greg Kroah-Hartman
maintainerPATCH 29/55 kgdboc: Fix restrict error
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Laura Abbott <[email protected]>
commit 2dd453168643d9475028cd867c57e65956a0f7f9 upstream.
There's an error when compiled with restrict:
drivers/tty/serial/kgdboc.c: In function ‘configure_kgdboc’:drivers/tty/serial/kgdboc.c:137:2: error: ‘strcpy’ source argument is the same as destination [-Werror=restrict]
strcpy(config, opt);
^~~~~~~~~~~~~~~~~~~
As the error implies, this is from trying to use config as both source and destination. Drop the call to the function where config is the argument since nothing else happens in the function.
--- drivers/tty/serial/kgdboc.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/tty/serial/kgdboc.c +2 -4
@@ -162,15 +162,13 @@ static int configure_kgdboc(void) {struct tty_driver *p;int tty_line =0 ; -int err; +int err = -ENODEV ;char *cptr = config;struct console *cons; - err =kgdboc_option_setup (config); -if (err || !strlen (config) ||isspace (config[0 ])) +if (!strlen (config) ||isspace (config[0 ])) goto noconfig; - err = -ENODEV ; kgdboc_io_ops.is_console =0 ; kgdb_tty_driver =NULL ;
Greg Kroah-Hartman
maintainerPATCH 30/55 kgdboc: Fix warning with module build
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Laura Abbott <[email protected]>
commit 1cd25cbb2fedbc777f3a8c3cb1ba69b645aeaa64 upstream.
After 2dd453168643 ("kgdboc: Fix restrict error"), kgdboc_option_setup is now only used when built in, resulting in a warning when compiled as a module:
drivers/tty/serial/kgdboc.c:134:12: warning: 'kgdboc_option_setup' defined but not used [-Wunused-function]
static int kgdboc_option_setup(char *opt)
^~~~~~~~~~~~~~~~~~~
Move the function under the appropriate ifdef for builtin only.
--- drivers/tty/serial/kgdboc.c | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-)
drivers/tty/serial/kgdboc.c +19 -18
@@ -131,24 +131,6 @@ static void kgdboc_unregister_kbd(void)#define kgdboc_restore_input ()#endif /* ! CONFIG_KDB_KEYBOARD */ -static int kgdboc_option_setup (char *opt) -{ -if (!opt) { -pr_err ("kgdboc: config string not provided\n" ); -return -EINVAL ; - } - -if (strlen (opt) >=MAX_CONFIG_LEN ) { -printk (KERN_ERR "kgdboc: config string too long\n" ); -return -ENOSPC ; - } -strcpy (config, opt); - -return 0 ; -} - -__setup ("kgdboc=" , kgdboc_option_setup); -static void cleanup_kgdboc (void ) {if (kgdb_unregister_nmi_console ())
@@ -316,6 +298,25 @@ static struct kgdb_io kgdboc_io_ops = { };#ifdef CONFIG_KGDB_SERIAL_CONSOLE +static int kgdboc_option_setup (char *opt) +{ +if (!opt) { +pr_err ("config string not provided\n" ); +return -EINVAL ; + } + +if (strlen (opt) >=MAX_CONFIG_LEN ) { +pr_err ("config string too long\n" ); +return -ENOSPC ; + } +strcpy (config, opt); + +return 0 ; +} + +__setup ("kgdboc=" , kgdboc_option_setup); + +/* This is only available if kgdboc is a built in for early debugging */ static int __init kgdboc_early_init (char *opt) {
Greg Kroah-Hartman
maintainerPATCH 31/55 svm: Add mutex_lock to protect apic_access_page_done on AMD systems
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Wei Wang <[email protected]>
commit 30510387a5e45bfcf8190e03ec7aa15b295828e2 upstream.
There is a race condition when accessing kvm->arch.apic_access_page_done. Due to it, x86_set_memory_region will fail when creating the second vcpu for a svm guest.
Add a mutex_lock to serialize the accesses to apic_access_page_done. This lock is also used by vmx for the same purpose.
--- arch/x86/kvm/svm.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-)
arch/x86/kvm/svm.c +11 -8
@@ -1399,20 +1399,23 @@ static u64 *avic_get_physical_id_entry(sstatic int avic_init_access_page (struct kvm_vcpu *vcpu) {struct kvm *kvm = vcpu->kvm; -int ret; +int ret =0 ; +mutex_lock (&kvm->slots_lock);if (kvm->arch.apic_access_page_done) -return 0 ; + goto out; - ret =x86_set_memory_region (kvm, -APIC_ACCESS_PAGE_PRIVATE_MEMSLOT , -APIC_DEFAULT_PHYS_BASE , -PAGE_SIZE ); + ret =__x86_set_memory_region (kvm, +APIC_ACCESS_PAGE_PRIVATE_MEMSLOT , +APIC_DEFAULT_PHYS_BASE , +PAGE_SIZE );if (ret) -return ret; + goto out; kvm->arch.apic_access_page_done = true; -return 0 ; +out: +mutex_unlock (&kvm->slots_lock); +return ret; }static int avic_init_backing_page (struct kvm_vcpu *vcpu)
Greg Kroah-Hartman
maintainerPATCH 32/55 drm/msm: fix OF child-node lookup
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Johan Hovold <[email protected]>
commit f9a7082327e26f54067a49cac2316d31e0cc8ba7 upstream.
Use the new of_get_compatible_child() helper to lookup the legacy pwrlevels child node instead of using of_find_compatible_node(), which searches the entire tree from a given start node and thus can return an unrelated (i.e. non-child) node.
This also addresses a potential use-after-free (e.g. after probe deferral) as the tree-wide helper drops a reference to its first argument (i.e. the probed device's node).
While at it, also fix the related child-node reference leak.
--- drivers/gpu/drm/msm/adreno/adreno_device.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
drivers/gpu/drm/msm/adreno/adreno_device.c +3 -2
@@ -223,8 +223,7 @@ static int adreno_get_legacy_pwrlevels(sstruct device_node *child, *node;int ret; - node =of_find_compatible_node (dev->of_node,NULL , -"qcom,gpu-pwrlevels" ); + node =of_get_compatible_child (dev->of_node,"qcom,gpu-pwrlevels" );if (!node) {dev_err (dev,"Could not find the GPU powerlevels\n" );return -ENXIO ;
@@ -245,6 +244,8 @@ static int adreno_get_legacy_pwrlevels(sdev_pm_opp_add (dev, val,0 ); } +of_node_put (node); +return 0 ; }
Greg Kroah-Hartman
maintainerPATCH 33/55 Input: xpad - quirk all PDP Xbox One gamepads
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Cameron Gutman <[email protected]>
commit a6754fae1e66e9a40fed406290d7ca3f2b4d227c upstream.
Since we continue to find tons of new variants [0,1,2,3,4,5,6] that need the PDP quirk, let's just quirk all devices from PDP.
[0]: https://github.com/paroj/xpad/pull/104
[1]: https://github.com/paroj/xpad/pull/105
[2]: https://github.com/paroj/xpad/pull/108
[3]: https://github.com/paroj/xpad/pull/109
[4]: https://github.com/paroj/xpad/pull/112
[5]: https://github.com/paroj/xpad/pull/115
[6]: https://github.com/paroj/xpad/pull/116
--- drivers/input/joystick/xpad.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-)
drivers/input/joystick/xpad.c +6 -10
@@ -483,18 +483,18 @@ static const u8 xboxone_hori_init[] = { };/* -* This packet is required for some of the PDP pads to start +* This packet is required for most (all?) of the PDP pads to start * sending input reports. These pads include: (0x0e6f:0x02ab), -* (0x0e6f:0x02a4). +* (0x0e6f:0x02a4), (0x0e6f:0x02a6). */ static const u8 xboxone_pdp_init1[] = {0x0a ,0x20 ,0x00 ,0x03 ,0x00 ,0x01 ,0x14 };/* -* This packet is required for some of the PDP pads to start +* This packet is required for most (all?) of the PDP pads to start * sending input reports. These pads include: (0x0e6f:0x02ab), -* (0x0e6f:0x02a4). +* (0x0e6f:0x02a4), (0x0e6f:0x02a6). */ static const u8 xboxone_pdp_init2[] = {0x06 ,0x20 ,0x00 ,0x02 ,0x01 ,0x00
@@ -530,12 +530,8 @@ static const struct xboxone_init_packetXBOXONE_INIT_PKT (0x0e6f ,0x0165 , xboxone_hori_init),XBOXONE_INIT_PKT (0x0f0d ,0x0067 , xboxone_hori_init),XBOXONE_INIT_PKT (0x0000 ,0x0000 , xboxone_fw2015_init), -XBOXONE_INIT_PKT (0x0e6f ,0x02ab , xboxone_pdp_init1), -XBOXONE_INIT_PKT (0x0e6f ,0x02ab , xboxone_pdp_init2), -XBOXONE_INIT_PKT (0x0e6f ,0x02a4 , xboxone_pdp_init1), -XBOXONE_INIT_PKT (0x0e6f ,0x02a4 , xboxone_pdp_init2), -XBOXONE_INIT_PKT (0x0e6f ,0x02a6 , xboxone_pdp_init1), -XBOXONE_INIT_PKT (0x0e6f ,0x02a6 , xboxone_pdp_init2), +XBOXONE_INIT_PKT (0x0e6f ,0x0000 , xboxone_pdp_init1), +XBOXONE_INIT_PKT (0x0e6f ,0x0000 , xboxone_pdp_init2),XBOXONE_INIT_PKT (0x24c6 ,0x541a , xboxone_rumblebegin_init),XBOXONE_INIT_PKT (0x24c6 ,0x542a , xboxone_rumblebegin_init), XBOXONE_INIT_PKT(0x24c6, 0x543a, xboxone_rumblebegin_init),
Greg Kroah-Hartman
maintainerPATCH 34/55 Input: synaptics - add PNP ID for ThinkPad P50 to SMBus
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Lyude Paul <[email protected]>
commit 9df39bedbf292680655c6a947c77d6562c693d4a upstream.
Noticed the other day the trackpoint felt different on my P50, then realized it was because rmi4 wasn't loading for this machine automatically. Suspend/resume, hibernate, and everything else seem to work perfectly fine on here.
--- drivers/input/mouse/synaptics.c | 1 + 1 file changed, 1 insertion(+)
drivers/input/mouse/synaptics.c +1 -0
@@ -170,6 +170,7 @@ static const char * const smbus_pnp_ids["LEN0048" ,/* X1 Carbon 3 */ "LEN0046" ,/* X250 */ "LEN004a" ,/* W541 */ +"LEN005b" ,/* P50 */ "LEN0071" ,/* T480 */ "LEN0072" ,/* X1 Carbon Gen 5 (2017) - Elan/ALPS trackpoint */ "LEN0073", /* X1 Carbon G5 (Elantech) */
Greg Kroah-Hartman
maintainerPATCH 35/55 Input: matrix_keypad - check for errors from of_get_named_gpio()
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Christian Hoff <[email protected]>
commit d55bda1b3e7c5a87f10da54fdda866a9a9cef30b upstream.
"of_get_named_gpio()" returns a negative error value if it fails and drivers should check for this. This missing check was now added to the matrix_keypad driver.
In my case "of_get_named_gpio()" returned -EPROBE_DEFER because the referenced GPIOs belong to an I/O expander, which was not yet probed at the point in time when the matrix_keypad driver was loading. Because the driver did not check for errors from the "of_get_named_gpio()" routine, it was assuming that "-EPROBE_DEFER" is actually a GPIO number and continued as usual, which led to further errors like this later on:
WARNING: CPU: 3 PID: 167 at drivers/gpio/gpiolib.c:114 gpio_to_desc+0xc8/0xd0
invalid GPIO -517
Note that the "GPIO number" -517 in the error message above is actually "-EPROBE_DEFER".
As part of the patch a misleading error message "no platform data defined" was also removed. This does not lead to information loss because the other error paths in matrix_keypad_parse_dt() already print an error.
--- drivers/input/keyboard/matrix_keypad.c | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-)
drivers/input/keyboard/matrix_keypad.c +14 -9
@@ -407,7 +407,7 @@ matrix_keypad_parse_dt(struct device *destruct matrix_keypad_platform_data *pdata;struct device_node *np = dev->of_node;unsigned int *gpios; -int i, nrow, ncol; +int ret, i, nrow, ncol;if (!np) {dev_err (dev,"device lacks DT data\n" );
@@ -452,12 +452,19 @@ matrix_keypad_parse_dt(struct device *dereturn ERR_PTR (-ENOMEM ); } -for (i =0 ; i < pdata->num_row_gpios; i++) - gpios[i] =of_get_named_gpio (np,"row-gpios" , i); +for (i =0 ; i < nrow; i++) { + ret =of_get_named_gpio (np,"row-gpios" , i); +if (ret <0 ) +return ERR_PTR (ret); + gpios[i] = ret; + } -for (i =0 ; i < pdata->num_col_gpios; i++) - gpios[pdata->num_row_gpios + i] = -of_get_named_gpio (np,"col-gpios" , i); +for (i =0 ; i < ncol; i++) { + ret =of_get_named_gpio (np,"col-gpios" , i); +if (ret <0 ) +return ERR_PTR (ret); + gpios[nrow + i] = ret; + } pdata->row_gpios = gpios; pdata->col_gpios = &gpios[pdata->num_row_gpios];
@@ -484,10 +491,8 @@ static int matrix_keypad_probe(struct pl pdata =dev_get_platdata (&pdev->dev);if (!pdata) { pdata =matrix_keypad_parse_dt (&pdev->dev); -if (IS_ERR (pdata)) { -dev_err (&pdev->dev,"no platform data defined\n" ); +if (IS_ERR (pdata))return PTR_ERR (pdata); - } }else if (!pdata->keymap_data) {dev_err (&pdev->dev,"no keymap data defined\n" );return -EINVAL ;
Greg Kroah-Hartman
maintainerPATCH 36/55 Input: cros_ec_keyb - fix button/switch capability reports
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Brian Norris <[email protected]>
commit ac5722c1643a2fb75224c79b578214956d34f989 upstream.
The cros_ec_keyb_bs array lists buttons and switches together, expecting that its users will match the appropriate type and bit fields. But cros_ec_keyb_register_bs() only checks the 'bit' field, which causes misreported input capabilities in some cases. For example, tablets (e.g., Scarlet -- a.k.a. Acer Chromebook Tab 10) were reporting a SW_LID capability, because EC_MKBP_POWER_BUTTON and EC_MKBP_LID_OPEN happen to share the same bit.
(This has comedic effect on a tablet, in which a power-management daemon then thinks this "lid" is closed, and so puts the system to sleep as soon as it boots!)
To fix this, check both the 'ev_type' and 'bit' fields before reporting the capability.
Tested with a lid (Kevin / Samsung Chromebook Plus) and without a lid (Scarlet / Acer Chromebook Tab 10).
This error got introduced when porting the feature from the downstream Chromium OS kernel to be upstreamed.
--- drivers/input/keyboard/cros_ec_keyb.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
drivers/input/keyboard/cros_ec_keyb.c +2 -1
@@ -506,7 +506,8 @@ static int cros_ec_keyb_register_bs(strufor (i =0 ; i <ARRAY_SIZE (cros_ec_keyb_bs); i++) {const struct cros_ec_bs_map *map = &cros_ec_keyb_bs[i]; -if (buttons &BIT (map->bit)) +if ((map->ev_type ==EV_KEY && (buttons &BIT (map->bit))) || + (map->ev_type ==EV_SW && (switches &BIT (map->bit))))input_set_capability (idev, map->ev_type, map->code); }
Greg Kroah-Hartman
maintainerPATCH 37/55 Input: elan_i2c - add ELAN0620 to the ACPI table
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Patrick Gaskin <[email protected]>
commit 3ed64da3b790be7c63601e8ca6341b7dff74a660 upstream.
Add ELAN0620 to the ACPI table to support the elan touchpad in the Lenovo IdeaPad 130-15IKB.
--- drivers/input/mouse/elan_i2c_core.c | 1 + 1 file changed, 1 insertion(+)
drivers/input/mouse/elan_i2c_core.c +1 -0
@@ -1264,6 +1264,7 @@ static const struct acpi_device_id elan_ { "ELAN0618", 0 }, { "ELAN061C", 0 }, { "ELAN061D", 0 }, + { "ELAN0620", 0 }, { "ELAN0622", 0 }, { "ELAN1000", 0 }, { }
Greg Kroah-Hartman
maintainerPATCH 38/55 Input: elan_i2c - add ACPI ID for Lenovo IdeaPad 330-15ARR
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Noah Westervelt <[email protected]>
commit ad33429cd02565c28404bb16ae7a4c2bdfda6626 upstream.
Add ELAN061E to the ACPI table to support Elan touchpad found in Lenovo IdeaPad 330-15ARR.
--- drivers/input/mouse/elan_i2c_core.c | 1 + 1 file changed, 1 insertion(+)
drivers/input/mouse/elan_i2c_core.c +1 -0
@@ -1264,6 +1264,7 @@ static const struct acpi_device_id elan_ { "ELAN0618", 0 }, { "ELAN061C", 0 }, { "ELAN061D", 0 }, + { "ELAN061E", 0 }, { "ELAN0620", 0 }, { "ELAN0622", 0 }, { "ELAN1000", 0 },
Greg Kroah-Hartman
maintainerPATCH 39/55 Input: elan_i2c - add support for ELAN0621 touchpad
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Adam Wong <[email protected]>
commit bf87ade0dd7f8cf19dac4d3161d5e86abe0c062b upstream.
Added the ability to detect the ELAN0621 touchpad found in some Lenovo laptops.
--- drivers/input/mouse/elan_i2c_core.c | 1 + 1 file changed, 1 insertion(+)
drivers/input/mouse/elan_i2c_core.c +1 -0
@@ -1266,6 +1266,7 @@ static const struct acpi_device_id elan_ { "ELAN061D", 0 }, { "ELAN061E", 0 }, { "ELAN0620", 0 }, + { "ELAN0621", 0 }, { "ELAN0622", 0 }, { "ELAN1000", 0 }, { }
Greg Kroah-Hartman
maintainerPATCH 40/55 btrfs: tree-checker: Dont check max block group size as current max chunk size limit is unreliable
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Qu Wenruo <[email protected]>
commit 10950929e994c5ecee149ff0873388d3c98f12b5 upstream.
[BUG]
A completely valid btrfs will refuse to mount, with error message like:
BTRFS critical (device sdb2): corrupt leaf: root=2 block=239681536 slot=172 \
bg_start=12018974720 bg_len=10888413184, invalid block group size, \
have 10888413184 expect (0, 10737418240]This has been reported several times as the 4.19 kernel is now being used. The filesystem refuses to mount, but is otherwise ok and booting 4.18 is a workaround.
Btrfs check returns no error, and all kernels used on this fs is later than 2011, which should all have the 10G size limit commit.
[CAUSE]
For a 12 devices btrfs, we could allocate a chunk larger than 10G due to stripe stripe bump up.
__btrfs_alloc_chunk()
|- max_stripe_size = 1G
|- max_chunk_size = 10G
|- data_stripe = 11
|- if (1G * 11 > 10G) {
stripe_size = 976128930;
stripe_size = round_up(976128930, SZ_16M) = 989855744However the final stripe_size (989855744) * 11 = 10888413184, which is still larger than 10G.
[FIX]
For the comprehensive check, we need to do the full check at chunk read time, and rely on bg <-> chunk mapping to do the check.
We could just skip the length check for now.
--- fs/btrfs/tree-checker.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-)
fs/btrfs/tree-checker.c +3 -5
@@ -348,13 +348,11 @@ static int check_block_group_item(struct/* * Here we don't really care about alignment since extent allocator can -* handle it. We care more about the size, as if one block group is -* larger than maximum size, it's must be some obvious corruption. +* handle it. We care more about the size. */ -if (key->offset >BTRFS_MAX_DATA_CHUNK_SIZE || key->offset ==0 ) { +if (key->offset ==0 ) {block_group_err (fs_info, leaf, slot, -"invalid block group size, have %llu expect (0, %llu]" , - key->offset,BTRFS_MAX_DATA_CHUNK_SIZE ); +"invalid block group size 0" );return -EUCLEAN ; }
Greg Kroah-Hartman
maintainerPATCH 41/55 btrfs: Always try all copies when reading extent buffers
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Nikolay Borisov <[email protected]>
commit f8397d69daef06d358430d3054662fb597e37c00 upstream.
When a metadata read is served the endio routine btree_readpage_end_io_hook is called which eventually runs the tree-checker. If tree-checker fails to validate the read eb then it sets EXTENT_BUFFER_CORRUPT flag. This leads to btree_read_extent_buffer_pages wrongly assuming that all available copies of this extent buffer are wrong and failing prematurely. Fix this modify btree_read_extent_buffer_pages to read all copies of the data.
This failure was exhibitted in xfstests btrfs/124 which would spuriously fail its balance operations. The reason was that when balance was run following re-introduction of the missing raid1 disk __btrfs_map_block would map the read request to stripe 0, which corresponded to devid 2 (the disk which is being removed in the test):
item 2 key (FIRST_CHUNK_TREE CHUNK_ITEM 3553624064) itemoff 15975 itemsize 112 length 1073741824 owner 2 stripe_len 65536 type DATA|RAID1 io_align 65536 io_width 65536 sector_size 4096 num_stripes 2 sub_stripes 1 stripe 0 devid 2 offset 2156920832 dev_uuid 8466c350-ed0c-4c3b-b17d-6379b445d5c8 stripe 1 devid 1 offset 3553624064 dev_uuid 1265d8db-5596-477e-af03-df08eb38d2ca
This caused read requests for a checksum item that to be routed to the stale disk which triggered the aforementioned logic involving EXTENT_BUFFER_CORRUPT flag. This then triggered cascading failures of the balance operation.
--- fs/btrfs/disk-io.c | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-)
fs/btrfs/disk-io.c +1 -9
@@ -451,9 +451,9 @@ static int btree_read_extent_buffer_pageint mirror_num =0 ;int failed_mirror =0 ; -clear_bit (EXTENT_BUFFER_CORRUPT , &eb->bflags); io_tree = &BTRFS_I (fs_info->btree_inode)->io_tree;while (1 ) { +clear_bit (EXTENT_BUFFER_CORRUPT , &eb->bflags); ret =read_extent_buffer_pages (io_tree, eb,WAIT_COMPLETE , btree_get_extent, mirror_num);if (!ret) {
@@ -464,14 +464,6 @@ static int btree_read_extent_buffer_page ret = -EIO ; } -/* -* This buffer's crc is fine, but its contents are corrupted, so -* there is no reason to read the other copies, they won't be -* any less wrong. -*/ -if (test_bit (EXTENT_BUFFER_CORRUPT , &eb->bflags)) -break ; - num_copies =btrfs_num_copies (fs_info, eb->start, eb->len);if (num_copies ==1 )
Greg Kroah-Hartman
maintainerPATCH 42/55 ARC: change defconfig defaults to ARCv2
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Kevin Hilman <[email protected]>
commit b7cc40c32a8bfa6f2581a71747f6a7d491fe43ba upstream.
Change the default defconfig (used with 'make defconfig') to the ARCv2 nsim_hs_defconfig, and also switch the default Kconfig ISA selection to ARCv2.
This allows several default defconfigs (e.g. make defconfig, make allnoconfig, make tinyconfig) to all work with ARCv2 by default.
Note since we change default architecture from ARCompact to ARCv2 it's required to explicitly mention architecture type in ARCompact defconfigs otherwise ARCv2 will be implied and binaries will be generated for ARCv2.
--- arch/arc/Kconfig | 2 +- arch/arc/Makefile | 2 +- arch/arc/configs/axs101_defconfig | 1 + arch/arc/configs/nps_defconfig | 1 + arch/arc/configs/nsim_700_defconfig | 1 + arch/arc/configs/nsimosci_defconfig | 1 + arch/arc/configs/tb10x_defconfig | 1 + 7 files changed, 7 insertions(+), 2 deletions(-)
arch/arc/Kconfig +1 -1
@@ -109,7 +109,7 @@ endmenu choice prompt "ARC Instruction Set" - default ISA_ARCOMPACT + default ISA_ARCV2 config ISA_ARCOMPACT bool "ARCompact ISA"
arch/arc/Makefile +1 -1
@@ -6,7 +6,7 @@ # published by the Free Software Foundation. # -KBUILD_DEFCONFIG := nsim_700_defconfig +KBUILD_DEFCONFIG := nsim_hs_defconfig cflags-y += -fno-common -pipe -fno-builtin -mmedium-calls -D__linux__ cflags-$(CONFIG_ISA_ARCOMPACT) += -mA7
arch/arc/configs/axs101_defconfig +1 -0
@@ -15,6 +15,7 @@ CONFIG_PERF_EVENTS=y # CONFIG_VM_EVENT_COUNTERS is not set # CONFIG_SLUB_DEBUG is not set # CONFIG_COMPAT_BRK is not set +CONFIG_ISA_ARCOMPACT=y CONFIG_MODULES=y CONFIG_MODULE_FORCE_LOAD=y CONFIG_MODULE_UNLOAD=y
arch/arc/configs/nps_defconfig +1 -0
@@ -15,6 +15,7 @@ CONFIG_SYSCTL_SYSCALL=y CONFIG_EMBEDDED=y CONFIG_PERF_EVENTS=y # CONFIG_COMPAT_BRK is not set +CONFIG_ISA_ARCOMPACT=y CONFIG_KPROBES=y CONFIG_MODULES=y CONFIG_MODULE_FORCE_LOAD=y
arch/arc/configs/nsim_700_defconfig +1 -0
@@ -16,6 +16,7 @@ CONFIG_EMBEDDED=y CONFIG_PERF_EVENTS=y # CONFIG_SLUB_DEBUG is not set # CONFIG_COMPAT_BRK is not set +CONFIG_ISA_ARCOMPACT=y CONFIG_KPROBES=y CONFIG_MODULES=y # CONFIG_LBDAF is not set
arch/arc/configs/nsimosci_defconfig +1 -0
@@ -16,6 +16,7 @@ CONFIG_EMBEDDED=y CONFIG_PERF_EVENTS=y # CONFIG_SLUB_DEBUG is not set # CONFIG_COMPAT_BRK is not set +CONFIG_ISA_ARCOMPACT=y CONFIG_KPROBES=y CONFIG_MODULES=y # CONFIG_LBDAF is not set
arch/arc/configs/tb10x_defconfig +1 -0
@@ -19,6 +19,7 @@ CONFIG_KALLSYMS_ALL=y # CONFIG_AIO is not set CONFIG_EMBEDDED=y # CONFIG_COMPAT_BRK is not set +CONFIG_ISA_ARCOMPACT=y CONFIG_SLAB=y CONFIG_MODULES=y CONFIG_MODULE_FORCE_LOAD=y
Greg Kroah-Hartman
maintainerPATCH 43/55 arc: [devboards] Add support of NFSv3 ACL
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Alexey Brodkin <[email protected]>
commit 6b04114f6fae5e84d33404c2970b1949c032546e upstream.
By default NFSv3 doesn't support ACL (Access Control Lists) which might be quite convenient to have so that mounted NFS behaves exactly as any other local file-system.
In particular missing support of ACL makes umask useless. This among other thigs fixes Glibc's "nptl/tst-umask1".
--- arch/arc/configs/axs101_defconfig | 1 + arch/arc/configs/axs103_defconfig | 1 + arch/arc/configs/axs103_smp_defconfig | 1 + arch/arc/configs/hsdk_defconfig | 1 + arch/arc/configs/nps_defconfig | 1 + arch/arc/configs/nsimosci_defconfig | 1 + arch/arc/configs/nsimosci_hs_defconfig | 1 + arch/arc/configs/nsimosci_hs_smp_defconfig | 1 + arch/arc/configs/vdk_hs38_defconfig | 1 + arch/arc/configs/vdk_hs38_smp_defconfig | 1 + 10 files changed, 10 insertions(+)
arch/arc/configs/axs101_defconfig +1 -0
@@ -99,6 +99,7 @@ CONFIG_VFAT_FS=y CONFIG_NTFS_FS=y CONFIG_TMPFS=y CONFIG_NFS_FS=y +CONFIG_NFS_V3_ACL=y CONFIG_NLS_CODEPAGE_437=y CONFIG_NLS_ISO8859_1=y # CONFIG_ENABLE_WARN_DEPRECATED is not set
arch/arc/configs/axs103_defconfig +1 -0
@@ -97,6 +97,7 @@ CONFIG_VFAT_FS=y CONFIG_NTFS_FS=y CONFIG_TMPFS=y CONFIG_NFS_FS=y +CONFIG_NFS_V3_ACL=y CONFIG_NLS_CODEPAGE_437=y CONFIG_NLS_ISO8859_1=y # CONFIG_ENABLE_WARN_DEPRECATED is not set
arch/arc/configs/axs103_smp_defconfig +1 -0
@@ -100,6 +100,7 @@ CONFIG_VFAT_FS=y CONFIG_NTFS_FS=y CONFIG_TMPFS=y CONFIG_NFS_FS=y +CONFIG_NFS_V3_ACL=y CONFIG_NLS_CODEPAGE_437=y CONFIG_NLS_ISO8859_1=y # CONFIG_ENABLE_WARN_DEPRECATED is not set
arch/arc/configs/hsdk_defconfig +1 -0
@@ -66,6 +66,7 @@ CONFIG_EXT3_FS=y CONFIG_VFAT_FS=y CONFIG_TMPFS=y CONFIG_NFS_FS=y +CONFIG_NFS_V3_ACL=y CONFIG_NLS_CODEPAGE_437=y CONFIG_NLS_ISO8859_1=y # CONFIG_ENABLE_WARN_DEPRECATED is not set
arch/arc/configs/nps_defconfig +1 -0
@@ -75,6 +75,7 @@ CONFIG_PROC_KCORE=y CONFIG_TMPFS=y # CONFIG_MISC_FILESYSTEMS is not set CONFIG_NFS_FS=y +CONFIG_NFS_V3_ACL=y CONFIG_ROOT_NFS=y CONFIG_DEBUG_INFO=y # CONFIG_ENABLE_WARN_DEPRECATED is not set
arch/arc/configs/nsimosci_defconfig +1 -0
@@ -70,5 +70,6 @@ CONFIG_EXT2_FS_XATTR=y CONFIG_TMPFS=y # CONFIG_MISC_FILESYSTEMS is not set CONFIG_NFS_FS=y +CONFIG_NFS_V3_ACL=y # CONFIG_ENABLE_WARN_DEPRECATED is not set # CONFIG_ENABLE_MUST_CHECK is not set
arch/arc/configs/nsimosci_hs_defconfig +1 -0
@@ -68,5 +68,6 @@ CONFIG_EXT2_FS_XATTR=y CONFIG_TMPFS=y # CONFIG_MISC_FILESYSTEMS is not set CONFIG_NFS_FS=y +CONFIG_NFS_V3_ACL=y # CONFIG_ENABLE_WARN_DEPRECATED is not set # CONFIG_ENABLE_MUST_CHECK is not set
arch/arc/configs/nsimosci_hs_smp_defconfig +1 -0
@@ -79,6 +79,7 @@ CONFIG_EXT2_FS_XATTR=y CONFIG_TMPFS=y # CONFIG_MISC_FILESYSTEMS is not set CONFIG_NFS_FS=y +CONFIG_NFS_V3_ACL=y # CONFIG_ENABLE_WARN_DEPRECATED is not set # CONFIG_ENABLE_MUST_CHECK is not set CONFIG_FTRACE=y
arch/arc/configs/vdk_hs38_defconfig +1 -0
@@ -88,6 +88,7 @@ CONFIG_NTFS_FS=y CONFIG_TMPFS=y CONFIG_JFFS2_FS=y CONFIG_NFS_FS=y +CONFIG_NFS_V3_ACL=y CONFIG_NLS_CODEPAGE_437=y CONFIG_NLS_ISO8859_1=y # CONFIG_ENABLE_WARN_DEPRECATED is not set
arch/arc/configs/vdk_hs38_smp_defconfig +1 -0
@@ -92,6 +92,7 @@ CONFIG_NTFS_FS=y CONFIG_TMPFS=y CONFIG_JFFS2_FS=y CONFIG_NFS_FS=y +CONFIG_NFS_V3_ACL=y CONFIG_NLS_CODEPAGE_437=y CONFIG_NLS_ISO8859_1=y # CONFIG_ENABLE_WARN_DEPRECATED is not set
Greg Kroah-Hartman
maintainerPATCH 44/55 udf: Allow mounting volumes with incorrect identification strings
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jan Kara <[email protected]>
commit b54e41f5efcb4316b2f30b30c2535cc194270373 upstream.
Commit c26f6c615788 ("udf: Fix conversion of 'dstring' fields to UTF8") started to be more strict when checking whether converted strings are properly formatted. Sudip reports that there are DVDs where the volume identification string is actually too long - UDF reports:
[ 632.309320] UDF-fs: incorrect dstring lengths (32/32)
during mount and fails the mount. This is mostly harmless failure as we don't need volume identification (and even less volume set identification) for anything. So just truncate the volume identification string if it is too long and replace it with 'Invalid' if we just cannot convert it for other reasons. This keeps slightly incorrect media still mountable.
--- fs/udf/super.c | 16 ++++++++++------ fs/udf/unicode.c | 14 +++++++++++--- 2 files changed, 21 insertions(+), 9 deletions(-)
fs/udf/super.c +10 -6
@@ -922,16 +922,20 @@ static int udf_load_pvoldesc(struct supe } ret =udf_dstrCS0toUTF8 (outstr,31 , pvoldesc->volIdent,32 ); -if (ret <0 ) - goto out_bh; - -strncpy (UDF_SB (sb)->s_volume_ident, outstr, ret); +if (ret <0 ) { +strcpy (UDF_SB (sb)->s_volume_ident,"InvalidName" ); +pr_warn ("incorrect volume identification, setting to " +"'InvalidName'\n" ); + }else { +strncpy (UDF_SB (sb)->s_volume_ident, outstr, ret); + }udf_debug ("volIdent[] = '%s'\n" ,UDF_SB (sb)->s_volume_ident); ret =udf_dstrCS0toUTF8 (outstr,127 , pvoldesc->volSetIdent,128 ); -if (ret <0 ) +if (ret <0 ) { + ret =0 ; goto out_bh; - + } outstr[ret] =0 ;udf_debug ("volSetIdent[] = '%s'\n" , outstr);
fs/udf/unicode.c +11 -3
@@ -341,6 +341,11 @@ try_again:return u_len; } +/* +* Convert CS0 dstring to output charset. Warning: This function may truncate +* input string if it is too long as it is used for informational strings only +* and it is better to truncate the string than to refuse mounting a media. +*/ int udf_dstrCS0toUTF8 (uint8_t *utf_o,int o_len,const uint8_t *ocu_i,int i_len) {
@@ -349,9 +354,12 @@ int udf_dstrCS0toUTF8(uint8_t *utf_o, inif (i_len >0 ) { s_len = ocu_i[i_len -1 ];if (s_len >= i_len) { -pr_err ("incorrect dstring lengths (%d/%d)\n" , - s_len, i_len); -return -EINVAL ; +pr_warn ("incorrect dstring lengths (%d/%d)," +" truncating\n" , s_len, i_len); + s_len = i_len -1 ; +/* 2-byte encoding? Need to round properly... */ +if (ocu_i[0 ] ==16 ) + s_len -= (s_len -1 ) &2 ; } }
Greg Kroah-Hartman
maintainerPATCH 45/55 reset: make device_reset_optional() really optional
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Masahiro Yamada <[email protected]>
commit 1554bbd4ad401b7f0f916c0891874111c10befe5 upstream.
Commit bb475230b8e5 ("reset: make optional functions really optional") converted *_get_optional* functions, but device_reset_optional() was left behind. Convert it in the same way.
--- drivers/reset/core.c | 9 +++++---- include/linux/reset.h | 28 +++++++++++++--------------- 2 files changed, 18 insertions(+), 19 deletions(-)
drivers/reset/core.c +5 -4
@@ -566,17 +566,18 @@ EXPORT_SYMBOL_GPL(__devm_reset_control_g* device_reset - find reset controller associated with the device * and perform reset * @dev: device to be reset by the controller +* @optional: whether it is optional to reset the device * -* Convenience wrapper for reset_control_get() and reset_control_reset(). +* Convenience wrapper for __reset_control_get() and reset_control_reset(). * This is useful for the common case of devices with single, dedicated reset * lines. */ -int device_reset (struct device *dev) +int __device_reset (struct device *dev,bool optional) {struct reset_control *rstc;int ret; - rstc =reset_control_get (dev,NULL ); + rstc =__reset_control_get (dev,NULL ,0 ,0 , optional);if (IS_ERR (rstc))return PTR_ERR (rstc);
@@ -586,7 +587,7 @@ int device_reset(struct device *dev)return ret; } -EXPORT_SYMBOL_GPL (device_reset); +EXPORT_SYMBOL_GPL (__device_reset);/** * APIs to manage an array of reset controls.
include/linux/reset.h +13 -15
@@ -20,22 +20,16 @@ struct reset_control *__reset_control_ge int index, bool shared, bool optional);void reset_control_put (struct reset_control *rstc); +int __device_reset (struct device *dev,bool optional);struct reset_control *__devm_reset_control_get (struct device *dev,const char *id,int index,bool shared,bool optional); -int __must_check device_reset (struct device *dev); -struct reset_control *devm_reset_control_array_get (struct device *dev,bool shared,bool optional);struct reset_control *of_reset_control_array_get (struct device_node *np,bool shared,bool optional); -static inline int device_reset_optional (struct device *dev) -{ -return device_reset (dev); -} -#else static inline int reset_control_reset (struct reset_control *rstc)
@@ -62,15 +56,9 @@ static inline void reset_control_put(str { } -static inline int __must_check device_reset (struct device *dev) -{ -WARN_ON (1 ); -return -ENOTSUPP ; -} - -static inline int device_reset_optional (struct device *dev) +static inline int __device_reset (struct device *dev,bool optional) { -return -ENOTSUPP ; +return optional ?0 : -ENOTSUPP ; } static inline struct reset_control *__of_reset_control_get(
@@ -109,6 +97,16 @@ of_reset_control_array_get(struct device#endif /* CONFIG_RESET_CONTROLLER */ +static inline int __must_check device_reset (struct device *dev) +{ +return __device_reset (dev, false); +} + +static inline int device_reset_optional (struct device *dev) +{ +return __device_reset (dev, true); +} +/** * reset_control_get_exclusive - Lookup and obtain an exclusive reference * to a reset controller.
Greg Kroah-Hartman
maintainerPATCH 46/55 reset: remove remaining WARN_ON() in <linux/reset.h>
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Masahiro Yamada <[email protected]>
commit bb6c7768385b200063a14d6615cc1246c3d00760 upstream.
Commit bb475230b8e5 ("reset: make optional functions really optional") gave a new meaning to _get_optional variants.
The differentiation by WARN_ON() is not needed any more. We already have inconsistency about this; (devm_)reset_control_get_exclusive() has WARN_ON() check, but of_reset_control_get_exclusive() does not.
--- include/linux/reset.h | 6 ------ 1 file changed, 6 deletions(-)
include/linux/reset.h +0 -6
@@ -125,9 +125,6 @@ static inline int device_reset_optional(static inline struct reset_control *__must_check reset_control_get_exclusive (struct device *dev,const char *id) { -#ifndef CONFIG_RESET_CONTROLLER -WARN_ON (1 ); -#endif return __reset_control_get (dev, id,0 , false, false); }
@@ -273,9 +270,6 @@ static inline struct reset_control * __must_check devm_reset_control_get_exclusive(struct device *dev, const char *id) { -#ifndef CONFIG_RESET_CONTROLLER - WARN_ON(1); -#endif return __devm_reset_control_get(dev, id, 0, false, false); }
Greg Kroah-Hartman
maintainerPATCH 47/55 mm: cleancache: fix corruption on missed inode invalidation
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Pavel Tikhomirov <[email protected]>
commit 6ff38bd40230af35e446239396e5fc8ebd6a5248 upstream.
If all pages are deleted from the mapping by memory reclaim and also moved to the cleancache:
__delete_from_page_cache
(no shadow case)
unaccount_page_cache_page
cleancache_put_page
page_cache_delete
mapping->nrpages -= nr
(nrpages becomes 0)
We don't clean the cleancache for an inode after final file truncation (removal).
truncate_inode_pages_final
check (nrpages || nrexceptional) is false
no truncate_inode_pages
no cleancache_invalidate_inode(mapping)
These way when reading the new file created with same inode we may get these trash leftover pages from cleancache and see wrong data instead of the contents of the new file.
Fix it by always doing truncate_inode_pages which is already ready for nrpages == 0 && nrexceptional == 0 case and just invalidates inode.
--- mm/truncate.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
mm/truncate.c +6 -2
@@ -471,9 +471,13 @@ void truncate_inode_pages_final(struct a*/ spin_lock_irq (&mapping->tree_lock);spin_unlock_irq (&mapping->tree_lock); - -truncate_inode_pages (mapping,0 ); } + +/* +* Cleancache needs notification even if there are no pages or shadow +* entries. +*/ +truncate_inode_pages (mapping,0 ); }EXPORT_SYMBOL (truncate_inode_pages_final);
Greg Kroah-Hartman
maintainerPATCH 48/55 thermal/drivers/hisi: Remove the multiple sensors support
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Daniel Lezcano <[email protected]>
commit ff4ec2997df8fe7cc40513dbe5f86d9f88fb6be7 upstream.
By essence, the tsensor does not really support multiple sensor at the same time. It allows to set a sensor and use it to get the temperature, another sensor could be switched but with a delay of 3-5ms. It is difficult to read simultaneously several sensors without a big delay.
Today, just one sensor is used, it is not necessary to deal with multiple sensors in the code. Remove them and if it is needed in the future add them on top of a code which will be clean up in the meantime.
--- drivers/thermal/hisi_thermal.c | 75 ++++++++++------------------------------- 1 file changed, 19 insertions(+), 56 deletions(-)
drivers/thermal/hisi_thermal.c +19 -56
@@ -40,6 +40,7 @@#define HISI_TEMP_STEP (784)#define HISI_MAX_SENSORS 4 +#define HISI_DEFAULT_SENSOR 2struct hisi_thermal_sensor {struct hisi_thermal_data *thermal;
@@ -54,9 +55,8 @@ struct hisi_thermal_data {struct mutex thermal_lock;/* protects register data */ struct platform_device *pdev;struct clk *clk; -struct hisi_thermal_sensor sensors[HISI_MAX_SENSORS ]; - -int irq, irq_bind_sensor; +struct hisi_thermal_sensor sensors; +int irq;bool irq_enabled;void __iomem *regs;
@@ -133,7 +133,7 @@ static void hisi_thermal_enable_bind_irqmutex_lock (&data->thermal_lock); - sensor = &data->sensors[data->irq_bind_sensor]; + sensor = &data->sensors;/* setting the hdak time */ writel (0x0 , data->regs +TEMP0_CFG );
@@ -181,31 +181,8 @@ static int hisi_thermal_get_temp(void *_struct hisi_thermal_sensor *sensor = _sensor;struct hisi_thermal_data *data = sensor->thermal; -int sensor_id =-1 , i; -long max_temp =0 ; - *temp =hisi_thermal_get_sensor_temp (data, sensor); - sensor->sensor_temp = *temp; - -for (i =0 ; i <HISI_MAX_SENSORS ; i++) { -if (!data->sensors[i].tzd) -continue ; - -if (data->sensors[i].sensor_temp >= max_temp) { - max_temp = data->sensors[i].sensor_temp; - sensor_id = i; - } - } - -/* If no sensor has been enabled, then skip to enable irq */ -if (sensor_id ==-1 ) -return 0 ; - -mutex_lock (&data->thermal_lock); - data->irq_bind_sensor = sensor_id; -mutex_unlock (&data->thermal_lock); -dev_dbg (&data->pdev->dev,"id=%d, irq=%d, temp=%d, thres=%d\n" , sensor->id, data->irq_enabled, *temp, sensor->thres_temp);/*
@@ -218,7 +195,7 @@ static int hisi_thermal_get_temp(void *_return 0 ; } -if (max_temp < sensor->thres_temp) { +if (*temp < sensor->thres_temp) { data->irq_enabled = true;hisi_thermal_enable_bind_irq_sensor (data);enable_irq (data->irq);
@@ -245,22 +222,16 @@ static irqreturn_t hisi_thermal_alarm_ir {struct hisi_thermal_data *data = dev;struct hisi_thermal_sensor *sensor; -int i;mutex_lock (&data->thermal_lock); - sensor = &data->sensors[data->irq_bind_sensor]; + sensor = &data->sensors;dev_crit (&data->pdev->dev,"THERMAL ALARM: T > %d\n" , sensor->thres_temp);mutex_unlock (&data->thermal_lock); -for (i =0 ; i <HISI_MAX_SENSORS ; i++) { -if (!data->sensors[i].tzd) -continue ; - -thermal_zone_device_update (data->sensors[i].tzd, -THERMAL_EVENT_UNSPECIFIED ); - } +thermal_zone_device_update (data->sensors.tzd, +THERMAL_EVENT_UNSPECIFIED );return IRQ_HANDLED ; }
@@ -317,7 +288,6 @@ static int hisi_thermal_probe(struct pla {struct hisi_thermal_data *data;struct resource *res; -int i;int ret; data =devm_kzalloc (&pdev->dev,sizeof (*data),GFP_KERNEL );
@@ -359,14 +329,13 @@ static int hisi_thermal_probe(struct plahisi_thermal_enable_bind_irq_sensor (data); data->irq_enabled = true; -for (i =0 ; i <HISI_MAX_SENSORS ; ++i) { - ret =hisi_thermal_register_sensor (pdev, data, - &data->sensors[i], i); -if (ret) -dev_err (&pdev->dev, -"failed to register thermal sensor: %d\n" , ret); -else -hisi_thermal_toggle_sensor (&data->sensors[i], true); + ret =hisi_thermal_register_sensor (pdev, data, + &data->sensors, +HISI_DEFAULT_SENSOR ); +if (ret) { +dev_err (&pdev->dev,"failed to register thermal sensor: %d\n" , + ret); +return ret; } ret = devm_request_threaded_irq(&pdev->dev, data->irq,
@@ -378,6 +347,8 @@ static int hisi_thermal_probe(struct plareturn ret; } +hisi_thermal_toggle_sensor (&data->sensors, true); +enable_irq (data->irq);return 0 ;
@@ -386,17 +357,9 @@ static int hisi_thermal_probe(struct plastatic int hisi_thermal_remove (struct platform_device *pdev) {struct hisi_thermal_data *data =platform_get_drvdata (pdev); -int i; - -for (i =0 ; i <HISI_MAX_SENSORS ; i++) { -struct hisi_thermal_sensor *sensor = &data->sensors[i]; - -if (!sensor->tzd) -continue ; - -hisi_thermal_toggle_sensor (sensor, false); - } +struct hisi_thermal_sensor *sensor = &data->sensors; +hisi_thermal_toggle_sensor (sensor, false);hisi_thermal_disable_sensor (data);clk_disable_unprepare (data->clk);
Greg Kroah-Hartman
maintainerPATCH 49/55 thermal/drivers/hisi: Remove pointless lock
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Daniel Lezcano <[email protected]>
commit 2d4fa7b4c6f8080ced2e8237c9f46fb1fc110d64 upstream.
The threaded interrupt inspect the sensors structure to look in the temp threshold field, but this field is read-only in all the code, except in the probe function before the threaded interrupt is set. In other words there is not race window in the threaded interrupt when reading the field value.
--- drivers/thermal/hisi_thermal.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-)
drivers/thermal/hisi_thermal.c +1 -5
@@ -221,14 +221,10 @@ static irqreturn_t hisi_thermal_alarm_irstatic irqreturn_t hisi_thermal_alarm_irq_thread (int irq,void *dev) {struct hisi_thermal_data *data = dev; -struct hisi_thermal_sensor *sensor; - -mutex_lock (&data->thermal_lock); - sensor = &data->sensors; +struct hisi_thermal_sensor *sensor = &data->sensors;dev_crit (&data->pdev->dev,"THERMAL ALARM: T > %d\n" , sensor->thres_temp); -mutex_unlock (&data->thermal_lock);thermal_zone_device_update (data->sensors.tzd,THERMAL_EVENT_UNSPECIFIED );
Greg Kroah-Hartman
maintainerPATCH 50/55 thermal/drivers/hisi: Encapsulate register writes into helpers
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Daniel Lezcano <[email protected]>
commit 1e11b014271ceccb5ea04ae58f4829ac8209a86d upstream.
Hopefully, the function name can help to clarify the semantic of the operations when writing in the register.
--- drivers/thermal/hisi_thermal.c | 92 +++++++++++++++++++++++++++++++---------- 1 file changed, 70 insertions(+), 22 deletions(-)
drivers/thermal/hisi_thermal.c +70 -22
@@ -26,6 +26,7 @@#include "thermal_core.h" +#define TEMP0_LAG (0x0)#define TEMP0_TH (0x4)#define TEMP0_RST_TH (0x8)#define TEMP0_CFG (0xC)
@@ -96,6 +97,56 @@ static inline long hisi_thermal_round_te hisi_thermal_temp_to_step(temp)); } +static inline void hisi_thermal_set_lag (void __iomem *addr,int value) +{ +writel (value, addr +TEMP0_LAG ); +} + +static inline void hisi_thermal_alarm_clear (void __iomem *addr,int value) +{ +writel (value, addr +TEMP0_INT_CLR ); +} + +static inline void hisi_thermal_alarm_enable (void __iomem *addr,int value) +{ +writel (value, addr +TEMP0_INT_EN ); +} + +static inline void hisi_thermal_alarm_set (void __iomem *addr,int temp) +{ +writel (hisi_thermal_temp_to_step (temp) |0x0FFFFFF00 , addr +TEMP0_TH ); +} + +static inline void hisi_thermal_reset_set (void __iomem *addr,int temp) +{ +writel (hisi_thermal_temp_to_step (temp), addr +TEMP0_RST_TH ); +} + +static inline void hisi_thermal_reset_enable (void __iomem *addr,int value) +{ +writel (value, addr +TEMP0_RST_MSK ); +} + +static inline void hisi_thermal_enable (void __iomem *addr,int value) +{ +writel (value, addr +TEMP0_EN ); +} + +static inline void hisi_thermal_sensor_select (void __iomem *addr,int sensor) +{ +writel ((sensor <<12 ), addr +TEMP0_CFG ); +} + +static inline int hisi_thermal_get_temperature (void __iomem *addr) +{ +return hisi_thermal_step_to_temp (readl (addr +TEMP0_VALUE )); +} + +static inline void hisi_thermal_hdak_set (void __iomem *addr,int value) +{ +writel (value, addr +TEMP0_CFG ); +} +static long hisi_thermal_get_sensor_temp (struct hisi_thermal_data *data,struct hisi_thermal_sensor *sensor) {
@@ -104,22 +155,21 @@ static long hisi_thermal_get_sensor_tempmutex_lock (&data->thermal_lock);/* disable interrupt */ -writel (0x0 , data->regs +TEMP0_INT_EN ); -writel (0x1 , data->regs +TEMP0_INT_CLR ); +hisi_thermal_alarm_enable (data->regs,0 ); +hisi_thermal_alarm_clear (data->regs,1 );/* disable module firstly */ -writel (0x0 , data->regs +TEMP0_EN ); +hisi_thermal_enable (data->regs,0 );/* select sensor id */ -writel ((sensor->id <<12 ), data->regs +TEMP0_CFG ); +hisi_thermal_sensor_select (data->regs, sensor->id);/* enable module */ -writel (0x1 , data->regs +TEMP0_EN ); +hisi_thermal_enable (data->regs,1 );usleep_range (3000 ,5000 ); - val =readl (data->regs +TEMP0_VALUE ); - val =hisi_thermal_step_to_temp (val); + val =hisi_thermal_get_temperature (data->regs);mutex_unlock (&data->thermal_lock);
@@ -136,28 +186,26 @@ static void hisi_thermal_enable_bind_irq sensor = &data->sensors;/* setting the hdak time */ -writel (0x0 , data->regs +TEMP0_CFG ); +hisi_thermal_hdak_set (data->regs,0 );/* disable module firstly */ -writel (0x0 , data->regs +TEMP0_RST_MSK ); -writel (0x0 , data->regs +TEMP0_EN ); +hisi_thermal_reset_enable (data->regs,0 ); +hisi_thermal_enable (data->regs,0 );/* select sensor id */ -writel ((sensor->id <<12 ), data->regs +TEMP0_CFG ); +hisi_thermal_sensor_select (data->regs, sensor->id);/* enable for interrupt */ -writel (hisi_thermal_temp_to_step (sensor->thres_temp) |0x0FFFFFF00 , - data->regs +TEMP0_TH ); +hisi_thermal_alarm_set (data->regs, sensor->thres_temp); -writel (hisi_thermal_temp_to_step (HISI_TEMP_RESET ), - data->regs +TEMP0_RST_TH ); +hisi_thermal_reset_set (data->regs,HISI_TEMP_RESET );/* enable module */ -writel (0x1 , data->regs +TEMP0_RST_MSK ); -writel (0x1 , data->regs +TEMP0_EN ); +hisi_thermal_reset_enable (data->regs,1 ); +hisi_thermal_enable (data->regs,1 ); -writel (0x0 , data->regs +TEMP0_INT_CLR ); -writel (0x1 , data->regs +TEMP0_INT_EN ); +hisi_thermal_alarm_clear (data->regs,0 ); +hisi_thermal_alarm_enable (data->regs,1 );usleep_range (3000 ,5000 );
@@ -169,9 +217,9 @@ static void hisi_thermal_disable_sensor(mutex_lock (&data->thermal_lock);/* disable sensor module */ -writel (0x0 , data->regs +TEMP0_INT_EN ); -writel (0x0 , data->regs +TEMP0_RST_MSK ); -writel (0x0 , data->regs +TEMP0_EN ); +hisi_thermal_enable (data->regs,0 ); +hisi_thermal_alarm_enable (data->regs,0 ); +hisi_thermal_reset_enable (data->regs,0 );mutex_unlock (&data->thermal_lock); }
Greg Kroah-Hartman
maintainerPATCH 51/55 thermal/drivers/hisi: Fix configuration register setting
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Daniel Lezcano <[email protected]>
commit b424315a287c70eeb5f920f84c92492bd2f5658e upstream.
The TEMP0_CFG configuration register contains different field to set up the temperature controller. However in the code, nothing prevents a setup to overwrite the previous one: eg. writing the hdak value overwrites the sensor selection, the sensor selection overwrites the hdak value.
In order to prevent such thing, use a regmap-like mechanism by reading the value before, set the corresponding bits and write the result.
--- drivers/thermal/hisi_thermal.c | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-)
drivers/thermal/hisi_thermal.c +29 -5
@@ -30,6 +30,8 @@#define TEMP0_TH (0x4)#define TEMP0_RST_TH (0x8)#define TEMP0_CFG (0xC) +#define TEMP0_CFG_SS_MSK (0xF000) +#define TEMP0_CFG_HDAK_MSK (0x30)#define TEMP0_EN (0x10)#define TEMP0_INT_EN (0x14)#define TEMP0_INT_CLR (0x18)
@@ -132,19 +134,41 @@ static inline void hisi_thermal_enable(vwritel (value, addr +TEMP0_EN ); } -static inline void hisi_thermal_sensor_select (void __iomem *addr,int sensor) +static inline int hisi_thermal_get_temperature (void __iomem *addr) { -writel ((sensor <<12 ), addr +TEMP0_CFG ); +return hisi_thermal_step_to_temp (readl (addr +TEMP0_VALUE )); } -static inline int hisi_thermal_get_temperature (void __iomem *addr) +/* +* Temperature configuration register - Sensor selection +* +* Bits [19:12] +* +* 0x0: local sensor (default) +* 0x1: remote sensor 1 (ACPU cluster 1) +* 0x2: remote sensor 2 (ACPU cluster 0) +* 0x3: remote sensor 3 (G3D) +*/ +static inline void hisi_thermal_sensor_select (void __iomem *addr,int sensor) { -return hisi_thermal_step_to_temp (readl (addr +TEMP0_VALUE )); +writel ((readl (addr +TEMP0_CFG ) & ~TEMP0_CFG_SS_MSK ) | + (sensor <<12 ), addr +TEMP0_CFG ); } +/* +* Temperature configuration register - Hdak conversion polling interval +* +* Bits [5:4] +* +* 0x0 : 0.768 ms +* 0x1 : 6.144 ms +* 0x2 : 49.152 ms +* 0x3 : 393.216 ms +*/ static inline void hisi_thermal_hdak_set (void __iomem *addr,int value) { -writel (value, addr +TEMP0_CFG ); +writel ((readl (addr +TEMP0_CFG ) & ~TEMP0_CFG_HDAK_MSK ) | + (value <<4 ), addr +TEMP0_CFG ); } static long hisi_thermal_get_sensor_temp(struct hisi_thermal_data *data,
Greg Kroah-Hartman
maintainerPATCH 52/55 thermal/drivers/hisi: Remove costly sensor inspection
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Daniel Lezcano <[email protected]>
commit 10d7e9a9181f4637640f388d334c6740c1b5d0e8 upstream.
The sensor is all setup, bind, resetted, acked, etc... every single second.
That was the way to workaround a problem with the interrupt bouncing again and again.
With the following changes, we fix all in one:
- Do the setup, one time, at probe time
- Add the IRQF_ONESHOT, ack the interrupt in the threaded handler
- Remove the interrupt handler
- Set the correct value for the LAG register
- Remove all the irq_enabled stuff in the code as the interruption handling is fixed
- Remove the 3ms delay
- Reorder the initialization routine to be in the right order
It ends up to a nicer code and more efficient, the 3-5ms delay is removed from the get_temp() path.
--- drivers/thermal/hisi_thermal.c | 205 ++++++++++++++++++----------------------- 1 file changed, 94 insertions(+), 111 deletions(-)
drivers/thermal/hisi_thermal.c +94 -111
@@ -41,6 +41,7 @@#define HISI_TEMP_BASE (-60000)#define HISI_TEMP_RESET (100000)#define HISI_TEMP_STEP (784) +#define HISI_TEMP_LAG (3500)#define HISI_MAX_SENSORS 4#define HISI_DEFAULT_SENSOR 2
@@ -60,8 +61,6 @@ struct hisi_thermal_data {struct clk *clk;struct hisi_thermal_sensor sensors;int irq; -bool irq_enabled; -void __iomem *regs; };
@@ -99,9 +98,40 @@ static inline long hisi_thermal_round_te hisi_thermal_temp_to_step(temp)); } +/* +* The lag register contains 5 bits encoding the temperature in steps. +* +* Each time the temperature crosses the threshold boundary, an +* interrupt is raised. It could be when the temperature is going +* above the threshold or below. However, if the temperature is +* fluctuating around this value due to the load, we can receive +* several interrupts which may not desired. +* +* We can setup a temperature representing the delta between the +* threshold and the current temperature when the temperature is +* decreasing. +* +* For instance: the lag register is 5°C, the threshold is 65°C, when +* the temperature reaches 65°C an interrupt is raised and when the +* temperature decrease to 65°C - 5°C another interrupt is raised. +* +* A very short lag can lead to an interrupt storm, a long lag +* increase the latency to react to the temperature changes. In our +* case, that is not really a problem as we are polling the +* temperature. +* +* [0:4] : lag register +* +* The temperature is coded in steps, cf. HISI_TEMP_STEP. +* +* Min : 0x00 : 0.0 °C +* Max : 0x1F : 24.3 °C +* +* The 'value' parameter is in milliCelsius. +*/ static inline void hisi_thermal_set_lag (void __iomem *addr,int value) { -writel (value, addr +TEMP0_LAG ); +writel ((value /HISI_TEMP_STEP ) &0x1F , addr +TEMP0_LAG ); }static inline void hisi_thermal_alarm_clear (void __iomem *addr,int value)
@@ -171,71 +201,6 @@ static inline void hisi_thermal_hdak_set (value << 4), addr + TEMP0_CFG); } -static long hisi_thermal_get_sensor_temp (struct hisi_thermal_data *data, -struct hisi_thermal_sensor *sensor) -{ -long val; - -mutex_lock (&data->thermal_lock); - -/* disable interrupt */ -hisi_thermal_alarm_enable (data->regs,0 ); -hisi_thermal_alarm_clear (data->regs,1 ); - -/* disable module firstly */ -hisi_thermal_enable (data->regs,0 ); - -/* select sensor id */ -hisi_thermal_sensor_select (data->regs, sensor->id); - -/* enable module */ -hisi_thermal_enable (data->regs,1 ); - -usleep_range (3000 ,5000 ); - - val =hisi_thermal_get_temperature (data->regs); - -mutex_unlock (&data->thermal_lock); - -return val; -} - -static void hisi_thermal_enable_bind_irq_sensor - (struct hisi_thermal_data *data) -{ -struct hisi_thermal_sensor *sensor; - -mutex_lock (&data->thermal_lock); - - sensor = &data->sensors; - -/* setting the hdak time */ -hisi_thermal_hdak_set (data->regs,0 ); - -/* disable module firstly */ -hisi_thermal_reset_enable (data->regs,0 ); -hisi_thermal_enable (data->regs,0 ); - -/* select sensor id */ -hisi_thermal_sensor_select (data->regs, sensor->id); - -/* enable for interrupt */ -hisi_thermal_alarm_set (data->regs, sensor->thres_temp); - -hisi_thermal_reset_set (data->regs,HISI_TEMP_RESET ); - -/* enable module */ -hisi_thermal_reset_enable (data->regs,1 ); -hisi_thermal_enable (data->regs,1 ); - -hisi_thermal_alarm_clear (data->regs,0 ); -hisi_thermal_alarm_enable (data->regs,1 ); - -usleep_range (3000 ,5000 ); - -mutex_unlock (&data->thermal_lock); -} -static void hisi_thermal_disable_sensor (struct hisi_thermal_data *data) {mutex_lock (&data->thermal_lock);
@@ -253,25 +218,10 @@ static int hisi_thermal_get_temp(void *_struct hisi_thermal_sensor *sensor = _sensor;struct hisi_thermal_data *data = sensor->thermal; - *temp =hisi_thermal_get_sensor_temp (data, sensor); + *temp =hisi_thermal_get_temperature (data->regs); -dev_dbg (&data->pdev->dev,"id=%d, irq=%d, temp=%d, thres=%d\n" , - sensor->id, data->irq_enabled, *temp, sensor->thres_temp); -/* -* Bind irq to sensor for two cases: -* Reenable alarm IRQ if temperature below threshold; -* if irq has been enabled, always set it; -*/ -if (data->irq_enabled) { -hisi_thermal_enable_bind_irq_sensor (data); -return 0 ; - } - -if (*temp < sensor->thres_temp) { - data->irq_enabled = true; -hisi_thermal_enable_bind_irq_sensor (data); -enable_irq (data->irq); - } +dev_dbg (&data->pdev->dev,"id=%d, temp=%d, thres=%d\n" , + sensor->id, *temp, sensor->thres_temp);return 0 ; }
@@ -280,26 +230,27 @@ static const struct thermal_zone_of_devi .get_temp = hisi_thermal_get_temp, }; -static irqreturn_t hisi_thermal_alarm_irq (int irq,void *dev) -{ -struct hisi_thermal_data *data = dev; - -disable_irq_nosync (irq); - data->irq_enabled = false; - -return IRQ_WAKE_THREAD ; -} -static irqreturn_t hisi_thermal_alarm_irq_thread (int irq,void *dev) {struct hisi_thermal_data *data = dev;struct hisi_thermal_sensor *sensor = &data->sensors; +int temp; -dev_crit (&data->pdev->dev,"THERMAL ALARM: T > %d\n" , - sensor->thres_temp); +hisi_thermal_alarm_clear (data->regs,1 ); -thermal_zone_device_update (data->sensors.tzd, -THERMAL_EVENT_UNSPECIFIED ); + temp =hisi_thermal_get_temperature (data->regs); + +if (temp >= sensor->thres_temp) { +dev_crit (&data->pdev->dev,"THERMAL ALARM: %d > %d\n" , + temp, sensor->thres_temp); + +thermal_zone_device_update (data->sensors.tzd, +THERMAL_EVENT_UNSPECIFIED ); + + }else if (temp < sensor->thres_temp) { +dev_crit (&data->pdev->dev,"THERMAL ALARM stopped: %d < %d\n" , + temp, sensor->thres_temp); + }return IRQ_HANDLED ; }
@@ -352,6 +303,40 @@ static void hisi_thermal_toggle_sensor(s on ? THERMAL_DEVICE_ENABLED : THERMAL_DEVICE_DISABLED); } +static int hisi_thermal_setup (struct hisi_thermal_data *data) +{ +struct hisi_thermal_sensor *sensor; + + sensor = &data->sensors; + +/* disable module firstly */ +hisi_thermal_reset_enable (data->regs,0 ); +hisi_thermal_enable (data->regs,0 ); + +/* select sensor id */ +hisi_thermal_sensor_select (data->regs, sensor->id); + +/* setting the hdak time */ +hisi_thermal_hdak_set (data->regs,0 ); + +/* setting lag value between current temp and the threshold */ +hisi_thermal_set_lag (data->regs,HISI_TEMP_LAG ); + +/* enable for interrupt */ +hisi_thermal_alarm_set (data->regs, sensor->thres_temp); + +hisi_thermal_reset_set (data->regs,HISI_TEMP_RESET ); + +/* enable module */ +hisi_thermal_reset_enable (data->regs,1 ); +hisi_thermal_enable (data->regs,1 ); + +hisi_thermal_alarm_clear (data->regs,0 ); +hisi_thermal_alarm_enable (data->regs,1 ); + +return 0 ; +} +static int hisi_thermal_probe (struct platform_device *pdev) {struct hisi_thermal_data *data;
@@ -394,9 +379,6 @@ static int hisi_thermal_probe(struct plareturn ret; } -hisi_thermal_enable_bind_irq_sensor (data); - data->irq_enabled = true; - ret =hisi_thermal_register_sensor (pdev, data, &data->sensors,HISI_DEFAULT_SENSOR );
@@ -406,10 +388,15 @@ static int hisi_thermal_probe(struct plareturn ret; } - ret =devm_request_threaded_irq (&pdev->dev, data->irq, - hisi_thermal_alarm_irq, + ret =hisi_thermal_setup (data); +if (ret) { +dev_err (&pdev->dev,"Failed to setup the sensor: %d\n" , ret); +return ret; + } + + ret =devm_request_threaded_irq (&pdev->dev, data->irq,NULL , hisi_thermal_alarm_irq_thread, -0 ,"hisi_thermal" , data); +IRQF_ONESHOT ,"hisi_thermal" , data);if (ret <0 ) {dev_err (&pdev->dev,"failed to request alarm irq: %d\n" , ret);return ret;
@@ -417,8 +404,6 @@ static int hisi_thermal_probe(struct plahisi_thermal_toggle_sensor (&data->sensors, true); -enable_irq (data->irq); -return 0 ; }
@@ -440,7 +425,6 @@ static int hisi_thermal_suspend(struct dstruct hisi_thermal_data *data =dev_get_drvdata (dev);hisi_thermal_disable_sensor (data); - data->irq_enabled = false;clk_disable_unprepare (data->clk);
@@ -456,8 +440,7 @@ static int hisi_thermal_resume(struct deif (ret)return ret; - data->irq_enabled = true; -hisi_thermal_enable_bind_irq_sensor (data); +hisi_thermal_setup (data);return 0 ; }
Greg Kroah-Hartman
maintainerPATCH 53/55 mm: hide incomplete nr_indirectly_reclaimable in /proc/zoneinfo
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Roman Gushchin <[email protected]>
[fixed differently upstream, this is a work-around to resolve it for 4.14.y]
Yongqin reported that /proc/zoneinfo format is broken in 4.14 due to commit 7aaf77272358 ("mm: don't show nr_indirectly_reclaimable in /proc/vmstat")
Node 0, zone DMA
per-node stats
nr_inactive_anon 403
nr_active_anon 89123
nr_inactive_file 128887
nr_active_file 47377
nr_unevictable 2053
nr_slab_reclaimable 7510
nr_slab_unreclaimable 10775
nr_isolated_anon 0
nr_isolated_file 0
<...>
nr_vmscan_write 0
nr_vmscan_immediate_reclaim 0
nr_dirtied 6022
nr_written 5985
74240
^^^^^^^^^^pages free 131656
The problem is caused by the nr_indirectly_reclaimable counter, which is hidden from the /proc/vmstat, but not from the /proc/zoneinfo. Let's fix this inconsistency and hide the counter from /proc/zoneinfo exactly as from /proc/vmstat.
BTW, in 4.19+ the counter has been renamed and exported by the commit b29940c1abd7 ("mm: rename and change semantics of nr_indirectly_reclaimable_bytes"), so there is no such a problem anymore.
--- mm/vmstat.c | 4 ++++ 1 file changed, 4 insertions(+)
mm/vmstat.c +4 -0
@@ -1500,6 +1500,10 @@ static void zoneinfo_show_print(struct sif (is_zone_first_populated (pgdat, zone)) {seq_printf (m,"\n per-node stats" );for (i =0 ; i <NR_VM_NODE_STAT_ITEMS ; i++) { +/* Skip hidden vmstat items. */ +if (*vmstat_text[i +NR_VM_ZONE_STAT_ITEMS + +NR_VM_NUMA_STAT_ITEMS ] =='\0' ) +continue ; seq_printf(m, "\n %-12s %lu", vmstat_text[i + NR_VM_ZONE_STAT_ITEMS + NR_VM_NUMA_STAT_ITEMS],
Greg Kroah-Hartman
maintainerPATCH 54/55 net: qed: use correct strncpy() size
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Arnd Bergmann <[email protected]>
commit 11f711081af0eb54190dc0de96ba4a9cd494666b upstream.
passing the strlen() of the source string as the destination length is pointless, and gcc-8 now warns about it:
drivers/net/ethernet/qlogic/qed/qed_debug.c: In function 'qed_grc_dump':include/linux/string.h:253: error: 'strncpy' specified bound depends on the length of the source argument [-Werror=stringop-overflow=]
This changes qed_grc_dump_big_ram() to instead uses the length of the destination buffer, and use strscpy() to guarantee nul-termination.
--- drivers/net/ethernet/qlogic/qed/qed_debug.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/net/ethernet/qlogic/qed/qed_debug.c +2 -4
@@ -3590,10 +3590,8 @@ static u32 qed_grc_dump_big_ram(struct q total_blocks = big_ram->num_of_blocks[dev_data->chip_id]; ram_size = total_blocks *BIG_RAM_BLOCK_SIZE_DWORDS ; -strncpy (type_name, big_ram->instance_name, -strlen (big_ram->instance_name)); -strncpy (mem_name, big_ram->instance_name, -strlen (big_ram->instance_name)); +strscpy (type_name, big_ram->instance_name,sizeof (type_name)); +strscpy (mem_name, big_ram->instance_name,sizeof (mem_name));/* Dump memory header */ offset += qed_grc_dump_mem_hdr(p_hwfn,
Greg Kroah-Hartman
maintainerPATCH 55/55 tipc: use destination length for copy string
In reply to Greg Kroah-Hartman4.14-stable review patch. If anyone has any objections, please let me know.
------------------
From: Guoqing Jiang <[email protected]>
commit 29e270fc32192e7729057963ae7120663856c93e upstream.
Got below warning with gcc 8.2 compiler.
net/tipc/topsrv.c: In function ‘tipc_topsrv_start’:net/tipc/topsrv.c:660:2: warning: ‘strncpy’ specified bound depends on the length of the source argument [-Wstringop-overflow=]
strncpy(srv->name, name, strlen(name) + 1);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~net/tipc/topsrv.c:660:27: note: length computed here
strncpy(srv->name, name, strlen(name) + 1);
^~~~~~~~~~~~So change it to correct length and use strscpy.
--- net/tipc/subscr.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/tipc/subscr.c +1 -1
@@ -375,7 +375,7 @@ int tipc_topsrv_start(struct net *net) topsrv->tipc_conn_new = tipc_subscrb_connect_cb; topsrv->tipc_conn_release = tipc_subscrb_release_cb; -strncpy (topsrv->name, name,strlen (name) +1 ); +strscpy (topsrv->name, name,sizeof (topsrv->name)); tn->topsrv = topsrv;atomic_set (&tn->subscription_count,0 );
stable-rc/linux-4.14.y boot: 117 boots: 1 failed, 114 passed with 1 offline, 1 untried/unknown (v4.14.86-56-g555f40d53cca)
stable-rc/linux-4.14.y boot: 117 boots: 1 failed, 114 passed with 1 offline, 1 untried/unknown (v4.14.86-56-g555f40d53cca)
Full Boot Summary: https://kernelci.org/boot/all/job/stable-rc/branch/linux-4.14.y/kernel/v4.14.86-56-g555f40d53cca/
Full Build Summary: https://kernelci.org/build/stable-rc/branch/linux-4.14.y/kernel/v4.14.86-56-g555f40d53cca/
Tree: stable-rc
Branch: linux-4.14.y
Git Describe: v4.14.86-56-g555f40d53cca
Git Commit: 555f40d53ccac2c84734383d6d86dba512b5e033
Git URL: http://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Tested: 57 unique boards, 22 SoC families, 14 builds out of 197
Boot Regressions Detected:
arm:
tegra_defconfig:
tegra124-nyan-big:
lab-collabora: new failure (last pass: v4.14.86)
Boot Failure Detected:
arm:
tegra_defconfig
tegra124-nyan-big: 1 failed lab
Offline Platforms:
arm:
multi_v7_defconfig:
stih410-b2120: 1 offline lab---
For more info write to <[email protected]>
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.14.87 release. There are 55 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 Sat Dec 8 14:29:38 UTC 2018. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 9 lines
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.14.87-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.14.y
and the diffstat can be found below.thanks,
greg k-h
Compiled and booted on my test system. No dmesg regressions.
thanks,
-- Shuah
Quoted 10 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.14.87 release. There are 55 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 Sat Dec 8 14:29:38 UTC 2018. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.14.87-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.14.y
and the diffstat can be found below.thanks,
greg k-h
Results from Linaro’s test farm.
No regressions on arm64, arm, x86_64, and i386.
Summary
------------------------------------------------------------------------
kernel: 4.14.87-rc1
git repo: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
git branch: linux-4.14.y
git commit: 555f40d53ccac2c84734383d6d86dba512b5e033
git describe: v4.14.86-56-g555f40d53cca
Test details: https://qa-reports.linaro.org/lkft/linux-stable-rc-4.14-oe/build/v4.14.86-56-g555f40d53cca
No regressions (compared to build v4.14.86)
No fixes (compared to build v4.14.86)
Ran 21416 total tests in the following environments and test suites.
Environments
--------------
- dragonboard-410c - arm64
- hi6220-hikey - arm64
- i386
- juno-r2 - arm64
- qemu_arm
- qemu_arm64
- qemu_i386
- qemu_x86_64
- x15 - arm
- x86_64
Test Suites
-----------
* boot
* install-android-platform-tools-r2600
* kselftest
* ltp-cap_bounds-tests
* ltp-containers-tests
* ltp-cve-tests
* ltp-fcntl-locktests-tests
* ltp-filecaps-tests
* ltp-fs-tests
* ltp-fs_bind-tests
* ltp-fs_perms_simple-tests
* ltp-fsx-tests
* ltp-hugetlb-tests
* ltp-io-tests
* ltp-ipc-tests
* ltp-math-tests
* ltp-nptl-tests
* ltp-pty-tests
* ltp-sched-tests
* ltp-securebits-tests
* ltp-syscalls-tests
* ltp-timers-tests
* spectre-meltdown-checker-test
* libhugetlbfs
* ltp-open-posix-tests
* kselftest-vsyscall-mode-native
* kselftest-vsyscall-mode-none
Signature · 2 lines
Linaro LKFT https://lkft.linaro.org
Jon Hunter
maintainerQuoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.14.87 release. There are 55 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 Sat Dec 8 14:29:38 UTC 2018. Anything received after that time might be too late.
The whole patch series can be found in one patch at:
Quoted 8 lines
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.14.87-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.14.y
and the diffstat can be found below.thanks,
greg k-h
All tests are passing for Tegra ...
Test results for stable-v4.14:
8 builds: 8 pass, 0 fail
16 boots: 16 pass, 0 fail
14 tests: 14 pass, 0 failLinux version: 4.14.87-rc1-g555f40d
Boards tested: tegra124-jetson-tk1, tegra20-ventana,
tegra210-p2371-2180, tegra30-cardhu-a04
Cheers
Jon
Signature · 1 line
nvpublic
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.14.87 release. There are 55 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 Sat Dec 8 14:29:38 UTC 2018. Anything received after that time might be too late.
Build results:
total: 171 pass: 171 fail: 0 Qemu test results: total: 322 pass: 322 fail: 0
Details are available at https://kerneltests.org/builders/.
Guenter