4.16.4-stable review
Subsystems (3)
Greg Kroah-Hartman
maintainerPATCH 162/196 ALSA: hda/realtek - adjust the location of one mic
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Hui Wang <[email protected]>
commit a3dafb2200bf3c13905a088e82ae11f1eb275a83 upstream.
There are two front mics on this machine, if we don't adjust the location for one of them, they will have the same mixer name, pulseaudio can't handle this situation.
After applying this FIXUP, they will have different mixer name, then pulseaudio can handle them correctly.
--- sound/pci/hda/patch_realtek.c | 1 + 1 file changed, 1 insertion(+)
sound/pci/hda/patch_realtek.c +1 -0
@@ -6575,6 +6575,7 @@ static const struct snd_pci_quirk alc269SND_PCI_QUIRK (0x17aa ,0x30bb ,"ThinkCentre AIO" ,ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY ),SND_PCI_QUIRK (0x17aa ,0x30e2 ,"ThinkCentre AIO" ,ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY ),SND_PCI_QUIRK (0x17aa ,0x310c ,"ThinkCentre Station" ,ALC294_FIXUP_LENOVO_MIC_LOCATION ), +SND_PCI_QUIRK (0x17aa ,0x3138 ,"ThinkCentre Station" ,ALC294_FIXUP_LENOVO_MIC_LOCATION ),SND_PCI_QUIRK (0x17aa ,0x313c ,"ThinkCentre Station" ,ALC294_FIXUP_LENOVO_MIC_LOCATION ),SND_PCI_QUIRK (0x17aa ,0x3112 ,"ThinkCentre AIO" ,ALC233_FIXUP_LENOVO_LINE2_MIC_HOTKEY ), SND_PCI_QUIRK(0x17aa, 0x3902, "Lenovo E50-80", ALC269_FIXUP_DMIC_THINKPAD_ACPI),
Greg Kroah-Hartman
maintainerPATCH 163/196 random: fix crng_ready() test
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Theodore Ts'o <[email protected]>
commit 43838a23a05fbd13e47d750d3dfd77001536dd33 upstream.
The crng_init variable has three states:
0: The CRNG is not initialized at all
1: The CRNG has a small amount of entropy, hopefully good enough for
early-boot, non-cryptographical use cases
2: The CRNG is fully initialized and we are sure it is safe for
cryptographic use cases.
The crng_ready() function should only return true once we are in the last state. This addresses CVE-2018-1108.
--- drivers/char/random.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
drivers/char/random.c +5 -5
@@ -427,7 +427,7 @@ struct crng_state primary_crng = {* its value (from 0->1->2). */ static int crng_init =0 ; -#define crng_ready () (likely(crng_init > 0)) +#define crng_ready () (likely(crng_init > 1))static int crng_init_cnt =0 ;#define CRNG_INIT_CNT_THRESH (2*CHACHA20_KEY_SIZE) static void _extract_crng(struct crng_state *crng,
@@ -793,7 +793,7 @@ static int crng_fast_load(const char *cpif (!spin_trylock_irqsave (&primary_crng.lock, flags))return 0 ; -if (crng_ready ()) { +if (crng_init !=0 ) {spin_unlock_irqrestore (&primary_crng.lock, flags);return 0 ; }
@@ -855,7 +855,7 @@ static void _extract_crng(struct crng_st {unsigned long v, flags; -if (crng_init >1 && +if (crng_ready () &&time_after (jiffies, crng->init_time +CRNG_RESEED_INTERVAL ))crng_reseed (crng, crng == &primary_crng ? &input_pool :NULL );spin_lock_irqsave (&crng->lock, flags);
@@ -1141,7 +1141,7 @@ void add_interrupt_randomness(int irq, ifast_mix (fast_pool);add_interrupt_bench (cycles); -if (!crng_ready ()) { +if (unlikely (crng_init ==0 )) {if ((fast_pool->count >=64 ) &&crng_fast_load ((char *) fast_pool->pool,sizeof (fast_pool->pool))) {
@@ -2214,7 +2214,7 @@ void add_hwgenerator_randomness(const ch {struct entropy_store *poolp = &input_pool; -if (!crng_ready ()) { +if (unlikely (crng_init ==0 )) {crng_fast_load (buffer, count);return ; }
Re: [PATCH 4.16 163/196] random: fix crng_ready() test
Quoted 19 lines · Greg Kroah-Hartman
4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Theodore Ts'o <[email protected]>
commit
43838a23a05fbd13e47d750d3dfd77001536dd33upstream.The
crng_initvariable has three states:0: The CRNG is not initialized at all
1: The CRNG has a small amount of entropy, hopefully good enough for
early-boot, non-cryptographical use cases
2: The CRNG is fully initialized and we are sure it is safe for
cryptographic use cases.The
crng_ready()function should only return true once we are in the last state. This addresses CVE-2018-1108.
Quoted 6 lines
Reported-by Jann Horn <[email protected]>Fixes e192be9d9a30 ("random: replace non-blocking pool...")Cc [email protected] # 4.8+Signed-off-by Theodore Ts'o <[email protected]>Reviewed-by Jann Horn <[email protected]>Signed-off-by Greg Kroah-Hartman <[email protected]>
This patch has caused a regression on 4.16 using kselftest lib/printf.sh
- specifically, when it runs "/sbin/modprobe test_printf". This regression has been detected on arm64 dragonboard 410c (not seen on other arm64 or x86_64 devices).
/sbin/modprobe test_printf
[ 22.725551] test_printf: hashing plain 'p' has unexpected format
[ 22.726031] test_printf: failed 1 out of 236 tests
modprobe: ERROR: could not insert 'test_printf': Invalid argument
This problem has not been seen on 4.9 or 4.14 under the same conditions.
Dan
Quoted 54 lines
--- drivers/char/random.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)drivers/char/random.c +5
-5@@ -427,7 +427,7 @@ struct crng_state primary_crng = {* its value (from 0->1->2). */ static int crng_init =0 ; -#define crng_ready () (likely(crng_init > 0)) +#define crng_ready () (likely(crng_init > 1))static int crng_init_cnt =0 ;#define CRNG_INIT_CNT_THRESH (2*CHACHA20_KEY_SIZE) static void _extract_crng(struct crng_state *crng,@@ -793,7 +793,7 @@ static int crng_fast_load(const char *cpif (!spin_trylock_irqsave (&primary_crng.lock, flags))return 0 ; -if (crng_ready ()) { +if (crng_init !=0 ) {spin_unlock_irqrestore (&primary_crng.lock, flags);return 0 ; }@@ -855,7 +855,7 @@ static void _extract_crng(struct crng_st {unsigned long v, flags; -if (crng_init >1 && +if (crng_ready () &&time_after (jiffies, crng->init_time +CRNG_RESEED_INTERVAL ))crng_reseed (crng, crng == &primary_crng ? &input_pool :NULL );spin_lock_irqsave (&crng->lock, flags);@@ -1141,7 +1141,7 @@ void add_interrupt_randomness(int irq, ifast_mix (fast_pool);add_interrupt_bench (cycles); -if (!crng_ready ()) { +if (unlikely (crng_init ==0 )) {if ((fast_pool->count >=64 ) &&crng_fast_load ((char *) fast_pool->pool,sizeof (fast_pool->pool))) {@@ -2214,7 +2214,7 @@ void add_hwgenerator_randomness(const ch {struct entropy_store *poolp = &input_pool; -if (!crng_ready ()) { +if (unlikely (crng_init ==0 )) {crng_fast_load (buffer, count);return ; }
Greg Kroah-Hartman
maintainerRe: [PATCH 4.16 163/196] random: fix crng_ready() test
Quoted 32 lines · Dan Rue
Quoted 19 lines · Greg Kroah-Hartman
4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Theodore Ts'o <[email protected]>
commit
43838a23a05fbd13e47d750d3dfd77001536dd33upstream.The
crng_initvariable has three states:0: The CRNG is not initialized at all
1: The CRNG has a small amount of entropy, hopefully good enough for
early-boot, non-cryptographical use cases
2: The CRNG is fully initialized and we are sure it is safe for
cryptographic use cases.The
crng_ready()function should only return true once we are in the last state. This addresses CVE-2018-1108.Quoted 6 lines
Reported-by Jann Horn <[email protected]>Fixes e192be9d9a30 ("random: replace non-blocking pool...")Cc [email protected] # 4.8+Signed-off-by Theodore Ts'o <[email protected]>Reviewed-by Jann Horn <[email protected]>Signed-off-by Greg Kroah-Hartman <[email protected]>This patch has caused a regression on 4.16 using kselftest
lib/printf.sh
- specifically, when it runs "/sbin/modprobetest_printf". This regression has been detected on arm64 dragonboard 410c (not seen on other arm64 orx86_64devices).
Quoted 7 lines
/sbin/modprobetest_printf
[ 22.725551]test_printf: hashing plain 'p' has unexpected format
[ 22.726031]test_printf: failed 1 out of 236 tests
modprobe: ERROR: could not insert 'test_printf': Invalid argumentThis problem has not been seen on 4.9 or 4.14 under the same conditions.
Does 4.17-rc2 also fail like this?
You all are testing the -rc releases, right? :)
I think the random changes that will be in 4.17-rc3 should fix this, and if so, I'll suck them in here too. But testing that would be good to see happen...
thanks,
greg k-h
Re: [PATCH 4.16 163/196] random: fix crng_ready() test
Quoted 38 lines · Greg Kroah-Hartman
Quoted 37 lines · Dan Rue
Quoted 19 lines · Greg Kroah-Hartman
4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Theodore Ts'o <[email protected]>
commit
43838a23a05fbd13e47d750d3dfd77001536dd33upstream.The
crng_initvariable has three states:0: The CRNG is not initialized at all
1: The CRNG has a small amount of entropy, hopefully good enough for
early-boot, non-cryptographical use cases
2: The CRNG is fully initialized and we are sure it is safe for
cryptographic use cases.The
crng_ready()function should only return true once we are in the last state. This addresses CVE-2018-1108.Quoted 6 lines
Reported-by Jann Horn <[email protected]>Fixes e192be9d9a30 ("random: replace non-blocking pool...")Cc [email protected] # 4.8+Signed-off-by Theodore Ts'o <[email protected]>Reviewed-by Jann Horn <[email protected]>Signed-off-by Greg Kroah-Hartman <[email protected]>This patch has caused a regression on 4.16 using kselftest
lib/printf.sh
- specifically, when it runs "/sbin/modprobetest_printf". This regression has been detected on arm64 dragonboard 410c (not seen on other arm64 orx86_64devices).
/sbin/modprobetest_printf
[ 22.725551]test_printf: hashing plain 'p' has unexpected format
[ 22.726031]test_printf: failed 1 out of 236 tests
modprobe: ERROR: could not insert 'test_printf': Invalid argument
Quoted 4 lines
Quoted 2 lines
This problem has not been seen on 4.9 or 4.14 under the same conditions.
Does 4.17-rc2 also fail like this?
No, but I did see it in v4.17-rc2-102-g3442097b765c, and it was fixed in the subsequent build:
good: v4.17-rc2-64-g26ed24e429d8
bad: v4.17-rc2-102-g3442097b765c
good: v4.17-rc2-104-g69bfd470f462
I haven't investigated deeper though, and I do not see any changes to random in those above revisions. This test passes on all the other mainline builds, including v4.17-rc2.
Quoted 2 lines
You all are testing the -rc releases, right? :)
We test every push to mainline and we test -next daily.
Quoted 4 lines
I think the random changes that will be in 4.17-rc3 should fix this, and if so, I'll suck them in here too. But testing that would be good to see happen...
Waiting is fine with me.
Thanks,
Dan
Greg Kroah-Hartman
maintainerPATCH 164/196 random: use a different mixing algorithm for add_device_randomness()
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Theodore Ts'o <[email protected]>
commit dc12baacb95f205948f64dc936a47d89ee110117 upstream.
add_device_randomness() use of crng_fast_load() was highly problematic. Some callers of add_device_randomness() can pass in a large amount of static information. This would immediately promote the crng_init state from 0 to 1, without really doing much to initialize the primary_crng's internal state with something even vaguely unpredictable.
Since we don't have the speed constraints of add_interrupt_randomness(), we can do a better job mixing in the what unpredictability a device driver or architecture maintainer might see fit to give us, and do it in a way which does not bump the crng_init_cnt variable.
Also, since add_device_randomness() doesn't bump any entropy accounting in crng_init state 0, mix the device randomness into the input_pool entropy pool as well. This is related to CVE-2018-1108.
--- drivers/char/random.c | 55 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 51 insertions(+), 4 deletions(-)
drivers/char/random.c +51 -4
@@ -786,6 +786,10 @@ static void crng_initialize(struct crng_ crng->init_time = jiffies -CRNG_RESEED_INTERVAL -1 ; } +/* +* crng_fast_load() can be called by code in the interrupt service +* path. So we can't afford to dilly-dally. +*/ static int crng_fast_load (const char *cp,size_t len) {unsigned long flags;
@@ -812,6 +816,51 @@ static int crng_fast_load(const char *cpreturn 1 ; } +/* +* crng_slow_load() is called by add_device_randomness, which has two +* attributes. (1) We can't trust the buffer passed to it is +* guaranteed to be unpredictable (so it might not have any entropy at +* all), and (2) it doesn't have the performance constraints of +* crng_fast_load(). +* +* So we do something more comprehensive which is guaranteed to touch +* all of the primary_crng's state, and which uses a LFSR with a +* period of 255 as part of the mixing algorithm. Finally, we do +* *not* advance crng_init_cnt since buffer we may get may be something +* like a fixed DMI table (for example), which might very well be +* unique to the machine, but is otherwise unvarying. +*/ +static int crng_slow_load (const char *cp,size_t len) +{ +unsigned long flags; +static unsigned char lfsr =1 ; +unsigned char tmp; +unsigned i, max =CHACHA20_KEY_SIZE ; +const char * src_buf = cp; +char * dest_buf = (char *) &primary_crng.state[4 ]; + +if (!spin_trylock_irqsave (&primary_crng.lock, flags)) +return 0 ; +if (crng_init !=0 ) { +spin_unlock_irqrestore (&primary_crng.lock, flags); +return 0 ; + } +if (len > max) + max = len; + +for (i =0 ; i < max ; i++) { + tmp = lfsr; + lfsr >>=1 ; +if (tmp &1 ) + lfsr ^=0xE1 ; + tmp = dest_buf[i %CHACHA20_KEY_SIZE ]; + dest_buf[i %CHACHA20_KEY_SIZE ] ^= src_buf[i % len] ^ lfsr; + lfsr += (tmp <<3 ) | (tmp >>5 ); + } +spin_unlock_irqrestore (&primary_crng.lock, flags); +return 1 ; +} +static void crng_reseed (struct crng_state *crng,struct entropy_store *r) {unsigned long flags;
@@ -981,10 +1030,8 @@ void add_device_randomness(const void *bunsigned long time =random_get_entropy () ^ jiffies;unsigned long flags; -if (!crng_ready ()) { -crng_fast_load (buf, size); -return ; - } +if (!crng_ready () && size) +crng_slow_load (buf, size);trace_add_device_randomness (size, _RET_IP_);spin_lock_irqsave (&input_pool.lock, flags);
Greg Kroah-Hartman
maintainerPATCH 165/196 random: set up the NUMA crng instances after the CRNG is fully initialized
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Theodore Ts'o <[email protected]>
commit 8ef35c866f8862df074a49a93b0309725812dea8 upstream.
Until the primary_crng is fully initialized, don't initialize the NUMA crng nodes. Otherwise users of /dev/urandom on NUMA systems before the CRNG is fully initialized can get very bad quality randomness. Of course everyone should move to getrandom(2) where this won't be an issue, but there's a lot of legacy code out there. This related to CVE-2018-1108.
--- drivers/char/random.c | 46 +++++++++++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 19 deletions(-)
drivers/char/random.c +27 -19
@@ -786,6 +786,32 @@ static void crng_initialize(struct crng_ crng->init_time = jiffies -CRNG_RESEED_INTERVAL -1 ; } +#ifdef CONFIG_NUMA +static void numa_crng_init (void ) +{ +int i; +struct crng_state *crng; +struct crng_state **pool; + + pool =kcalloc (nr_node_ids,sizeof (*pool),GFP_KERNEL |__GFP_NOFAIL); +for_each_online_node (i) { + crng =kmalloc_node (sizeof (struct crng_state ), +GFP_KERNEL | __GFP_NOFAIL, i); +spin_lock_init (&crng->lock); +crng_initialize (crng); + pool[i] = crng; + } +mb (); +if (cmpxchg (&crng_node_pool,NULL , pool)) { +for_each_node (i) +kfree (pool[i]); +kfree (pool); + } +} +#else +static void numa_crng_init (void ) {} +#endif +/* * crng_fast_load() can be called by code in the interrupt service * path. So we can't afford to dilly-dally.
@@ -892,6 +918,7 @@ static void crng_reseed(struct crng_statspin_unlock_irqrestore (&primary_crng.lock, flags);if (crng == &primary_crng && crng_init <2 ) {invalidate_batched_entropy (); +numa_crng_init (); crng_init =2 ;process_random_ready_list ();wake_up_interruptible (&crng_init_wait);
@@ -1729,28 +1756,9 @@ static void init_std_data(struct entropy*/ static int rand_initialize (void ) { -#ifdef CONFIG_NUMA -int i; -struct crng_state *crng; -struct crng_state **pool; -#endif -init_std_data (&input_pool);init_std_data (&blocking_pool);crng_initialize (&primary_crng); - -#ifdef CONFIG_NUMA - pool =kcalloc (nr_node_ids,sizeof (*pool),GFP_KERNEL |__GFP_NOFAIL); -for_each_online_node (i) { - crng =kmalloc_node (sizeof (struct crng_state ), -GFP_KERNEL | __GFP_NOFAIL, i); -spin_lock_init (&crng->lock); -crng_initialize (crng); - pool[i] = crng; - } -mb (); - crng_node_pool = pool; -#endif return 0 ; }early_initcall (rand_initialize);
Greg Kroah-Hartman
maintainerPATCH 166/196 random: crng_reseed() should lock the crng instance that it is modifying
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Theodore Ts'o <[email protected]>
commit 0bb29a849a6433b72e249eea7695477b02056e94 upstream.
--- drivers/char/random.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
drivers/char/random.c +2 -2
@@ -905,7 +905,7 @@ static void crng_reseed(struct crng_stat_crng_backtrack_protect (&primary_crng, buf.block,CHACHA20_KEY_SIZE ); } -spin_lock_irqsave (&primary_crng.lock, flags); +spin_lock_irqsave (&crng->lock, flags);for (i =0 ; i <8 ; i++) {unsigned long rv; if (!arch_get_random_seed_long(&rv) &&
@@ -915,7 +915,7 @@ static void crng_reseed(struct crng_stat }memzero_explicit (&buf,sizeof (buf)); crng->init_time = jiffies; -spin_unlock_irqrestore (&primary_crng.lock, flags); +spin_unlock_irqrestore (&crng->lock, flags);if (crng == &primary_crng && crng_init <2 ) {invalidate_batched_entropy ();numa_crng_init ();
Greg Kroah-Hartman
maintainerPATCH 167/196 random: add new ioctl RNDRESEEDCRNG
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Theodore Ts'o <[email protected]>
commit d848e5f8e1ebdb227d045db55fe4f825e82965fa upstream.
Add a new ioctl which forces the the crng to be reseeded.
--- drivers/char/random.c | 13 ++++++++++++- include/uapi/linux/random.h | 3 +++ 2 files changed, 15 insertions(+), 1 deletion(-)
drivers/char/random.c +12 -1
@@ -429,6 +429,7 @@ struct crng_state primary_crng = {static int crng_init =0 ;#define crng_ready () (likely(crng_init > 1))static int crng_init_cnt =0 ; +static unsigned long crng_global_init_time =0 ;#define CRNG_INIT_CNT_THRESH (2*CHACHA20_KEY_SIZE)static void _extract_crng (struct crng_state *crng,__u32 out[CHACHA20_BLOCK_WORDS ]);
@@ -932,7 +933,8 @@ static void _extract_crng(struct crng_stunsigned long v, flags;if (crng_ready () && -time_after (jiffies, crng->init_time +CRNG_RESEED_INTERVAL )) + (time_after (crng_global_init_time, crng->init_time) || +time_after (jiffies, crng->init_time +CRNG_RESEED_INTERVAL )))crng_reseed (crng, crng == &primary_crng ? &input_pool :NULL );spin_lock_irqsave (&crng->lock, flags);if (arch_get_random_long (&v))
@@ -1759,6 +1761,7 @@ static int rand_initialize(void)init_std_data (&input_pool);init_std_data (&blocking_pool);crng_initialize (&primary_crng); + crng_global_init_time = jiffies;return 0 ; }early_initcall (rand_initialize);
@@ -1932,6 +1935,14 @@ static long random_ioctl(struct file *f, input_pool.entropy_count =0 ; blocking_pool.entropy_count =0 ;return 0 ; +case RNDRESEEDCRNG : +if (!capable (CAP_SYS_ADMIN )) +return -EPERM ; +if (crng_init <2 ) +return -ENODATA ; +crng_reseed (&primary_crng,NULL ); + crng_global_init_time = jiffies -1 ; +return 0 ;default :return -EINVAL ; }
include/uapi/linux/random.h +3 -0
@@ -35,6 +35,9 @@/* Clear the entropy pool and associated counters. (Superuser only.) */ #define RNDCLEARPOOL _IO( 'R', 0x06 ) +/* Reseed CRNG. (Superuser only.) */ +#define RNDRESEEDCRNG _IO( 'R', 0x07 ) +struct rand_pool_info {int entropy_count;int buf_size;
Greg Kroah-Hartman
maintainerPATCH 168/196 HID: i2c-hid: Fix resume issue on Raydium touchscreen device
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Aaron Ma <[email protected]>
commit 3e83eda467050f13fa69d888993458b76e733de9 upstream.
When Rayd touchscreen resumed from S3, it issues too many errors like:i2c_hid i2c-RAYD0001:00: i2c_hid_get_input: incomplete report (58/5442)
And all the report data are corrupted, touchscreen is unresponsive.
Fix this by re-sending report description command after resume. Add device ID as a quirk.
--- drivers/hid/hid-ids.h | 3 +++ drivers/hid/i2c-hid/i2c-hid.c | 13 +++++++++++++ 2 files changed, 16 insertions(+)
drivers/hid/hid-ids.h +3 -0
@@ -519,6 +519,9 @@#define I2C_VENDOR_ID_HANTICK 0x0911#define I2C_PRODUCT_ID_HANTICK_5288 0x5288 +#define I2C_VENDOR_ID_RAYD 0x2386 +#define I2C_PRODUCT_ID_RAYD_3118 0x3118 +#define USB_VENDOR_ID_HANWANG 0x0b57#define USB_DEVICE_ID_HANWANG_TABLET_FIRST 0x5000#define USB_DEVICE_ID_HANWANG_TABLET_LAST 0x8fff
drivers/hid/i2c-hid/i2c-hid.c +13 -0
@@ -47,6 +47,7 @@/* quirks to control the device */ #define I2C_HID_QUIRK_SET_PWR_WAKEUP_DEV BIT(0)#define I2C_HID_QUIRK_NO_IRQ_AFTER_RESET BIT(1) +#define I2C_HID_QUIRK_RESEND_REPORT_DESCR BIT(2)/* flags */ #define I2C_HID_STARTED 0
@@ -171,6 +172,8 @@ static const struct i2c_hid_quirks { I2C_HID_QUIRK_SET_PWR_WAKEUP_DEV }, {I2C_VENDOR_ID_HANTICK ,I2C_PRODUCT_ID_HANTICK_5288 , I2C_HID_QUIRK_NO_IRQ_AFTER_RESET }, + { I2C_VENDOR_ID_RAYD, I2C_PRODUCT_ID_RAYD_3118, + I2C_HID_QUIRK_RESEND_REPORT_DESCR }, { 0, 0 } };
@@ -1220,6 +1223,16 @@ static int i2c_hid_resume(struct deviceif (ret)return ret; +/* RAYDIUM device (2386:3118) need to re-send report descr cmd +* after resume, after this it will be back normal. +* otherwise it issues too many incomplete reports. +*/ +if (ihid->quirks &I2C_HID_QUIRK_RESEND_REPORT_DESCR ) { + ret =i2c_hid_command (client, &hid_report_descr_cmd,NULL ,0 ); +if (!ret) +return ret; + } +if (hid->driver && hid->driver->reset_resume) { ret = hid->driver->reset_resume (hid);return ret;
Greg Kroah-Hartman
maintainerPATCH 169/196 HID: input: fix battery level reporting on BT mice
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dmitry Torokhov <[email protected]>
commit 2e210bbb7429cdcf1a1a3ad00c1bf98bd9bf2452 upstream.
The commit 581c4484769e ("HID: input: map digitizer battery usage") assumed that devices having input (qas opposed to feature) report for battery strength would report the data on their own, without the need to be polled by the kernel; unfortunately it is not so. Many wireless mice do not send unsolicited reports with battery strength data and have to be polled explicitly. As a complication, stylus devices on digitizers are not normally connected to the base and thus can not be polled - the base can only determine battery strength in the stylus when it is in proximity.
To solve this issue, we add a special flag that tells the kernel to avoid polling the device (and expect unsolicited reports) and set it when report field with physical usage of digitizer stylus (HID_DG_STYLUS). Unless this flag is set, and we have not seen the unsolicited reports, the kernel will attempt to poll the device when userspace attempts to read "capacity" and "state" attributes of power_supply object corresponding to the devices battery.
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=198095
--- drivers/hid/hid-input.c | 24 +++++++++++++++++------- include/linux/hid.h | 9 ++++++++- 2 files changed, 25 insertions(+), 8 deletions(-)
drivers/hid/hid-input.c +17 -7
@@ -387,7 +387,8 @@ static int hidinput_get_battery_propertybreak ;case POWER_SUPPLY_PROP_CAPACITY : -if (dev->battery_report_type ==HID_FEATURE_REPORT ) { +if (dev->battery_status !=HID_BATTERY_REPORTED && + !dev->battery_avoid_query) { value =hidinput_query_battery_capacity (dev);if (value <0 )return value;
@@ -403,17 +404,17 @@ static int hidinput_get_battery_propertybreak ;case POWER_SUPPLY_PROP_STATUS : -if (!dev->battery_reported && - dev->battery_report_type ==HID_FEATURE_REPORT ) { +if (dev->battery_status !=HID_BATTERY_REPORTED && + !dev->battery_avoid_query) { value =hidinput_query_battery_capacity (dev);if (value <0 )return value; dev->battery_capacity = value; - dev->battery_reported = true; + dev->battery_status =HID_BATTERY_QUERIED ; } -if (!dev->battery_reported) +if (dev->battery_status ==HID_BATTERY_UNKNOWN ) val->intval =POWER_SUPPLY_STATUS_UNKNOWN ;else if (dev->battery_capacity ==100 ) val->intval =POWER_SUPPLY_STATUS_FULL ;
@@ -486,6 +487,14 @@ static int hidinput_setup_battery(struct dev->battery_report_type = report_type; dev->battery_report_id = field->report->id; +/* +* Stylus is normally not connected to the device and thus we +* can't query the device and get meaningful battery strength. +* We have to wait for the device to report it on its own. +*/ + dev->battery_avoid_query = report_type ==HID_INPUT_REPORT && + field->physical ==HID_DG_STYLUS ; + dev->battery =power_supply_register (&dev->dev, psy_desc, &psy_cfg);if (IS_ERR (dev->battery)) { error =PTR_ERR (dev->battery);
@@ -530,9 +539,10 @@ static void hidinput_update_battery(stru capacity =hidinput_scale_battery_capacity (dev, value); -if (!dev->battery_reported || capacity != dev->battery_capacity) { +if (dev->battery_status !=HID_BATTERY_REPORTED || + capacity != dev->battery_capacity) { dev->battery_capacity = capacity; - dev->battery_reported = true; + dev->battery_status =HID_BATTERY_REPORTED ;power_supply_changed (dev->battery); } }
include/linux/hid.h +8 -1
@@ -515,6 +515,12 @@ enum hid_type { HID_TYPE_USBNONE }; +enum hid_battery_status { +HID_BATTERY_UNKNOWN =0 , +HID_BATTERY_QUERIED ,/* Kernel explicitly queried battery strength */ +HID_BATTERY_REPORTED ,/* Device sent unsolicited battery strength report */ +}; +struct hid_driver ;struct hid_ll_driver ;
@@ -557,7 +563,8 @@ struct hid_device { /* device repo__s32 battery_max;__s32 battery_report_type;__s32 battery_report_id; -bool battery_reported; +enum hid_battery_status battery_status; +bool battery_avoid_query;#endif unsigned int status;/* see STAT flags above */
Greg Kroah-Hartman
maintainerPATCH 170/196 HID: hidraw: Fix crash on HIDIOCGFEATURE with a destroyed device
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Rodrigo Rivas Costa <[email protected]>
commit a955358d54695e4ad9f7d6489a7ac4d69a8fc711 upstream.
Doing ioctl(HIDIOCGFEATURE) in a tight loop on a hidraw device and then disconnecting the device, or unloading the driver, can cause a NULL pointer dereference.
When a hidraw device is destroyed it sets 0 to dev->exist. Most functions check 'dev->exist' before doing its work, but hidraw_get_report() was missing that check.
--- drivers/hid/hidraw.c | 5 +++++ 1 file changed, 5 insertions(+)
drivers/hid/hidraw.c +5 -0
@@ -192,6 +192,11 @@ static ssize_t hidraw_get_report(structint ret =0 , len;unsigned char report_number; +if (!hidraw_table[minor] || !hidraw_table[minor]->exist) { + ret = -ENODEV ; + goto out; + } + dev = hidraw_table[minor]->hid;if (!dev->ll_driver->raw_request) {
Greg Kroah-Hartman
maintainerPATCH 171/196 HID: wacom: bluetooth: send exit report for recent Bluetooth devices
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Aaron Armstrong Skomra <[email protected]>
commit 619d3a2922ce623ca2eca443cc936810d328317c upstream.
The code path for recent Bluetooth devices omits an exit report which resets all the values of the device.
--- drivers/hid/wacom_wac.c | 76 +++++++++++++++++++++++++++++------------------- 1 file changed, 46 insertions(+), 30 deletions(-)
drivers/hid/wacom_wac.c +46 -30
@@ -689,6 +689,45 @@ static int wacom_intuos_get_tool_type(inreturn tool_type; } +static void wacom_exit_report (struct wacom_wac *wacom) +{ +struct input_dev *input = wacom->pen_input; +struct wacom_features *features = &wacom->features; +unsigned char *data = wacom->data; +int idx = (features->type ==INTUOS ) ? (data[1 ] &0x01 ) :0 ; + +/* +* Reset all states otherwise we lose the initial states +* when in-prox next time +*/ +input_report_abs (input,ABS_X ,0 ); +input_report_abs (input,ABS_Y ,0 ); +input_report_abs (input,ABS_DISTANCE ,0 ); +input_report_abs (input,ABS_TILT_X ,0 ); +input_report_abs (input,ABS_TILT_Y ,0 ); +if (wacom->tool[idx] >=BTN_TOOL_MOUSE ) { +input_report_key (input,BTN_LEFT ,0 ); +input_report_key (input,BTN_MIDDLE ,0 ); +input_report_key (input,BTN_RIGHT ,0 ); +input_report_key (input,BTN_SIDE ,0 ); +input_report_key (input,BTN_EXTRA ,0 ); +input_report_abs (input,ABS_THROTTLE ,0 ); +input_report_abs (input,ABS_RZ ,0 ); + }else { +input_report_abs (input,ABS_PRESSURE ,0 ); +input_report_key (input,BTN_STYLUS ,0 ); +input_report_key (input,BTN_STYLUS2 ,0 ); +input_report_key (input,BTN_TOUCH ,0 ); +input_report_abs (input,ABS_WHEEL ,0 ); +if (features->type >=INTUOS3S ) +input_report_abs (input,ABS_Z ,0 ); + } +input_report_key (input, wacom->tool[idx],0 ); +input_report_abs (input,ABS_MISC ,0 );/* reset tool id */ +input_event (input,EV_MSC ,MSC_SERIAL , wacom->serial[idx]); + wacom->id[idx] =0 ; +} +static int wacom_intuos_inout (struct wacom_wac *wacom) {struct wacom_features *features = &wacom->features;
@@ -741,36 +780,7 @@ static int wacom_intuos_inout(struct wacif (!wacom->id[idx])return 1 ; -/* -* Reset all states otherwise we lose the initial states -* when in-prox next time -*/ -input_report_abs (input,ABS_X ,0 ); -input_report_abs (input,ABS_Y ,0 ); -input_report_abs (input,ABS_DISTANCE ,0 ); -input_report_abs (input,ABS_TILT_X ,0 ); -input_report_abs (input,ABS_TILT_Y ,0 ); -if (wacom->tool[idx] >=BTN_TOOL_MOUSE ) { -input_report_key (input,BTN_LEFT ,0 ); -input_report_key (input,BTN_MIDDLE ,0 ); -input_report_key (input,BTN_RIGHT ,0 ); -input_report_key (input,BTN_SIDE ,0 ); -input_report_key (input,BTN_EXTRA ,0 ); -input_report_abs (input,ABS_THROTTLE ,0 ); -input_report_abs (input,ABS_RZ ,0 ); - }else { -input_report_abs (input,ABS_PRESSURE ,0 ); -input_report_key (input,BTN_STYLUS ,0 ); -input_report_key (input,BTN_STYLUS2 ,0 ); -input_report_key (input,BTN_TOUCH ,0 ); -input_report_abs (input,ABS_WHEEL ,0 ); -if (features->type >=INTUOS3S ) -input_report_abs (input,ABS_Z ,0 ); - } -input_report_key (input, wacom->tool[idx],0 ); -input_report_abs (input,ABS_MISC ,0 );/* reset tool id */ -input_event (input,EV_MSC ,MSC_SERIAL , wacom->serial[idx]); - wacom->id[idx] =0 ; +wacom_exit_report (wacom);return 2 ; }
@@ -1226,6 +1236,12 @@ static void wacom_intuos_pro2_bt_pen(strif (!valid)continue ; +if (!prox) { + wacom->shared->stylus_in_proximity = false; +wacom_exit_report (wacom); +input_sync (pen_input); +return ; + }if (range) {/* Fix rotation alignment: userspace expects zero at left */ int16_t rotation = (int16_t )get_unaligned_le16 (&frame[9 ]);
Greg Kroah-Hartman
maintainerPATCH 172/196 s390: add support for IBM z14 Model ZR1
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Heiko Carstens <[email protected]>
commit 451239eb3d397bd197a79cc3aab943da41ba0905 upstream.
Just add the new machine type number to the two places that matter.
--- arch/s390/Kconfig | 8 ++++---- arch/s390/kernel/perf_cpum_cf_events.c | 1 + arch/s390/kernel/setup.c | 1 + 3 files changed, 6 insertions(+), 4 deletions(-)
arch/s390/Kconfig +4 -4
@@ -289,12 +289,12 @@ config MARCH_Z13 older machines. config MARCH_Z14 - bool "IBM z14" + bool "IBM z14 ZR1 and z14" select HAVE_MARCH_Z14_FEATURES help - Select this to enable optimizations for IBM z14 (3906 series). - The kernel will be slightly faster but will not work on older - machines. + Select this to enable optimizations for IBM z14 ZR1 and z14 (3907 + and 3906 series). The kernel will be slightly faster but will not + work on older machines. endchoice
arch/s390/kernel/perf_cpum_cf_events.c +1 -0
@@ -583,6 +583,7 @@ __init const struct attribute_group **cp model = cpumcf_z13_pmu_event_attr;break ;case 0x3906 : +case 0x3907 : model = cpumcf_z14_pmu_event_attr;break ;default :
arch/s390/kernel/setup.c +1 -0
@@ -819,6 +819,7 @@ static int __init setup_hwcaps(void)strcpy (elf_platform,"z13" );break ;case 0x3906 : +case 0x3907 :strcpy (elf_platform,"z14" );break ; }
Greg Kroah-Hartman
maintainerPATCH 173/196 MIPS: uaccess: Add micromips clobbers to bzero invocation
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matt Redfearn <[email protected]>
commit b3d7e55c3f886493235bfee08e1e5a4a27cbcce8 upstream.
The micromips implementation of bzero additionally clobbers registers t7 & t8. Specify this in the clobbers list when invoking bzero.
Patchwork: https://patchwork.linux-mips.org/patch/19110/
--- arch/mips/include/asm/uaccess.h | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-)
arch/mips/include/asm/uaccess.h +9 -2
@@ -654,6 +654,13 @@ __clear_user(void __user *addr, __kernel {__kernel_size_t res; +#ifdef CONFIG_CPU_MICROMIPS +/* micromips memset / bzero also clobbers t7 & t8 */ +#define bzero_clobbers "$4", "$5", "$6", __UA_t0, __UA_t1, "$15", "$24", "$31" +#else +#define bzero_clobbers "$4", "$5", "$6", __UA_t0, __UA_t1, "$31" +#endif /* CONFIG_CPU_MICROMIPS */ +if (eva_kernel_access ()) { __asm__ __volatile__( "move\t$4, %1\n\t"
@@ -663,7 +670,7 @@ __clear_user(void __user *addr, __kernel "move\t%0, $6" : "=r" (res) : "r" (addr), "r" (size) - : "$4", "$5", "$6", __UA_t0, __UA_t1, "$31"); + : bzero_clobbers); }else {might_fault (); __asm__ __volatile__(
@@ -674,7 +681,7 @@ __clear_user(void __user *addr, __kernel "move\t%0, $6" : "=r" (res) : "r" (addr), "r" (size) - : "$4", "$5", "$6", __UA_t0, __UA_t1, "$31"); + : bzero_clobbers); }return res;
Greg Kroah-Hartman
maintainerPATCH 174/196 MIPS: memset.S: EVA & fault support for small_memset
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matt Redfearn <[email protected]>
commit 8a8158c85e1e774a44fbe81106fa41138580dfd1 upstream.
The MIPS kernel memset / bzero implementation includes a small_memset branch which is used when the region to be set is smaller than a long (4 bytes on 32bit, 8 bytes on 64bit). The current small_memset implementation uses a simple store byte loop to write the destination. There are 2 issues with this implementation:
1. When EVA mode is active, user and kernel address spaces may overlap. Currently the use of the sb instruction means kernel mode addressing is always used and an intended write to userspace may actually overwrite some critical kernel data.
2. If the write triggers a page fault, for example by calling __clear_user(NULL, 2), instead of gracefully handling the fault, an OOPS is triggered.
Fix these issues by replacing the sb instruction with the EX() macro, which will emit EVA compatible instuctions as required. Additionally implement a fault fixup for small_memset which sets a2 to the number of bytes that could not be cleared (as defined by __clear_user).
Patchwork: https://patchwork.linux-mips.org/patch/18975/
--- arch/mips/lib/memset.S | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)
arch/mips/lib/memset.S +6 -1
@@ -219,7 +219,7 @@ 1: PTR_ADDIU a0, 1 /* fill bytewise */ R10KCBARRIER(0(ra)) bne t1, a0, 1b - sb a1, -1(a0) + EX(sb, a1, -1(a0), .Lsmall_fixup\@) 2: jr ra /* done */ move a2, zero
@@ -260,6 +260,11 @@ jr ra andi v1, a2, STORMASK +.Lsmall_fixup\@: + PTR_SUBU a2, t1, a0 + jr ra + PTR_ADDIU a2, 1 + .endm /*
Greg Kroah-Hartman
maintainerPATCH 175/196 MIPS: memset.S: Fix return of __clear_user from Lpartial_fixup
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matt Redfearn <[email protected]>
commit daf70d89f80c6e1772233da9e020114b1254e7e0 upstream.
The __clear_user function is defined to return the number of bytes that could not be cleared. From the underlying memset / bzero implementation this means setting register a2 to that number on return. Currently if a page fault is triggered within the memset_partial block, the value loaded into a2 on return is meaningless.
The label .Lpartial_fixup\@ is jumped to on page fault. In order to work out how many bytes failed to copy, the exception handler should find how many bytes left in the partial block (andi a2, STORMASK), add that to the partial block end address (a2), and subtract the faulting address to get the remainder. Currently it incorrectly subtracts the partial block start address (t1), which has additionally been clobbered to generate a jump target in memset_partial. Fix this by adding the block end address instead.
This issue was found with the following test code:
int j, k;
for (j = 0; j < 512; j++) {
if ((k = clear_user(NULL, j)) != j) {
pr_err("clear_user (NULL %d) returned %d\n", j, k);
}
}Which now passes on Creator Ci40 (MIPS32) and Cavium Octeon II (MIPS64).
Patchwork: https://patchwork.linux-mips.org/patch/19108/
--- arch/mips/lib/memset.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/mips/lib/memset.S +1 -1
@@ -252,7 +252,7 @@ PTR_L t0, TI_TASK($28) andi a2, STORMASK LONG_L t0, THREAD_BUADDR(t0) - LONG_ADDU a2, t1 + LONG_ADDU a2, a0 jr ra LONG_SUBU a2, t0
Greg Kroah-Hartman
maintainerPATCH 176/196 MIPS: memset.S: Fix clobber of v1 in last_fixup
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matt Redfearn <[email protected]>
commit c96eebf07692e53bf4dd5987510d8b550e793598 upstream.
The label .Llast_fixup\@ is jumped to on page fault within the final byte set loop of memset (on < MIPSR6 architectures). For some reason, in this fault handler, the v1 register is randomly set to a2 & STORMASK. This clobbers v1 for the calling function. This can be observed with the following test code:
static int __init __attribute__((optimize("O0"))) test_clear_user(void) {
register int t asm("v1");
char *test;
int j, k;
pr_info("\n\n\nTesting clear_user\n");
test = vmalloc(PAGE_SIZE);
for (j = 256; j < 512; j++) {
t = 0xa5a5a5a5;
if ((k = clear_user(test + PAGE_SIZE - 256, j)) != j - 256) {
pr_err("clear_user (%px %d) returned %d\n", test + PAGE_SIZE - 256, j, k);
}
if (t != 0xa5a5a5a5) {
pr_err("v1 was clobbered to 0x%x!\n", t);
}
} return 0;
}late_initcall(test_clear_user);
Which demonstrates that v1 is indeed clobbered (MIPS64):
Testing clear_user
v1 was clobbered to 0x1!
v1 was clobbered to 0x2!
v1 was clobbered to 0x3!
v1 was clobbered to 0x4!
v1 was clobbered to 0x5!
v1 was clobbered to 0x6!
v1 was clobbered to 0x7!
Since the number of bytes that could not be set is already contained in a2, the andi placing a value in v1 is not necessary and actively harmful in clobbering v1.
Patchwork: https://patchwork.linux-mips.org/patch/19109/
--- arch/mips/lib/memset.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/mips/lib/memset.S +1 -1
@@ -258,7 +258,7 @@ .Llast_fixup\@: jr ra - andi v1, a2, STORMASK + nop .Lsmall_fixup\@: PTR_SUBU a2, t1, a0
Greg Kroah-Hartman
maintainerPATCH 177/196 powerpc/eeh: Fix enabling bridge MMIO windows
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michael Neuling <[email protected]>
commit 13a83eac373c49c0a081cbcd137e79210fe78acd upstream.
On boot we save the configuration space of PCIe bridges. We do this so when we get an EEH event and everything gets reset that we can restore them.
Unfortunately we save this state before we've enabled the MMIO space on the bridges. Hence if we have to reset the bridge when we come back MMIO is not enabled and we end up taking an PE freeze when the driver starts accessing again.
This patch forces the memory/MMIO and bus mastering on when restoring bridges on EEH. Ideally we'd do this correctly by saving the configuration space writes later, but that will have to come later in a larger EEH rewrite. For now we have this simple fix.
The original bug can be triggered on a boston machine by doing:
echo 0x8000000000000000 > /sys/kernel/debug/powerpc/PCI0001/err_injct_outbound
On boston, this PHB has a PCIe switch on it. Without this patch, you'll see two EEH events, 1 expected and 1 the failure we are fixing here. The second EEH event causes the anything under the PHB to disappear (i.e. the i40e eth).
With this patch, only 1 EEH event occurs and devices properly recover.
--- arch/powerpc/kernel/eeh_pe.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
arch/powerpc/kernel/eeh_pe.c +2 -1
@@ -807,7 +807,8 @@ static void eeh_restore_bridge_bars(stru eeh_ops->write_config (pdn,15 *4 ,4 , edev->config_space[15 ]);/* PCI Command: 0x4 */ - eeh_ops->write_config (pdn,PCI_COMMAND ,4 , edev->config_space[1 ]); + eeh_ops->write_config (pdn,PCI_COMMAND ,4 , edev->config_space[1 ] | +PCI_COMMAND_MEMORY |PCI_COMMAND_MASTER );/* Check the PCIe link is ready */ eeh_bridge_check_link (edev);
Greg Kroah-Hartman
maintainerPATCH 178/196 powerpc/xive: Fix trying to "push" an already active pool VP
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Benjamin Herrenschmidt <[email protected]>
commit b32e56e5a87a1f9243db92bc7a5df0ffb4627cfb upstream.
When setting up a CPU, we "push" (activate) a pool VP for it.
However it's an error to do so if it already has an active pool VP.
This happens when doing soft CPU hotplug on powernv since we don't tear down the CPU on unplug. The HW flags the error which gets captured by the diagnostics.
Fix this by making sure to "pull" out any already active pool first.
--- arch/powerpc/sysdev/xive/native.c | 4 ++++ 1 file changed, 4 insertions(+)
arch/powerpc/sysdev/xive/native.c +4 -0
@@ -389,6 +389,10 @@ static void xive_native_setup_cpu(unsignif (xive_pool_vps ==XIVE_INVALID_VP )return ; +/* Check if pool VP already active, if it is, pull it */ +if (in_be32 (xive_tima +TM_QW2_HV_POOL +TM_WORD2 ) &TM_QW2W2_VP ) +in_be64 (xive_tima +TM_SPC_PULL_POOL_CTX ); +/* Enable the pool VP */ vp = xive_pool_vps + cpu;pr_debug ("CPU %d setting up pool VP 0x%x\n" , cpu, vp);
Greg Kroah-Hartman
maintainerPATCH 179/196 powerpc/lib: Fix off-by-one in alternate feature patching
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Michael Ellerman <[email protected]>
commit b8858581febb050688e276b956796bc4a78299ed upstream.
When we patch an alternate feature section, we have to adjust any relative branches that branch out of the alternate section.
But currently we have a bug if we have a branch that points to past the last instruction of the alternate section, eg:
FTR_SECTION_ELSE
1: b 2f
or 6,6,6
2:
ALT_FTR_SECTION_END(...)
nop
This will result in a relative branch at 1 with a target that equals the end of the alternate section.
That branch does not need adjusting when it's moved to the non-else location. Currently we do adjust it, resulting in a branch that goes off into the link-time location of the else section, which is junk.
The fix is to not patch branches that have a target == end of the alternate section.
--- arch/powerpc/lib/feature-fixups.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/powerpc/lib/feature-fixups.c +1 -1
@@ -55,7 +55,7 @@ static int patch_alt_instruction(unsigneunsigned int *target = (unsigned int *)branch_target (src);/* Branch within the section doesn't need translating */ -if (target < alt_start || target >= alt_end) { +if (target < alt_start || target > alt_end) { instr =translate_branch (dest, src);if (!instr)return 1 ;
Greg Kroah-Hartman
maintainerPATCH 180/196 udf: Fix leak of UTF-16 surrogates into encoded strings
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jan Kara <[email protected]>
commit 44f06ba8297c7e9dfd0e49b40cbe119113cca094 upstream.
OSTA UDF specification does not mention whether the CS0 charset in case of two bytes per character encoding should be treated in UTF-16 or UCS-2. The sample code in the standard does not treat UTF-16 surrogates in any special way but on systems such as Windows which work in UTF-16 internally, filenames would be treated as being in UTF-16 effectively. In Linux it is more difficult to handle characters outside of Base Multilingual plane (beyond 0xffff) as NLS framework works with 2-byte characters only. Just make sure we don't leak UTF-16 surrogates into the resulting string when loading names from the filesystem for now.
--- fs/udf/unicode.c | 6 ++++++ 1 file changed, 6 insertions(+)
fs/udf/unicode.c +6 -0
@@ -28,6 +28,9 @@#include "udf_sb.h" +#define SURROGATE_MASK 0xfffff800 +#define SURROGATE_PAIR 0x0000d800 +static int udf_uni2char_utf8 (wchar_t uni,unsigned char *out,int boundlen)
@@ -37,6 +40,9 @@ static int udf_uni2char_utf8(wchar_t uniif (boundlen <=0 )return -ENAMETOOLONG ; +if ((uni &SURROGATE_MASK ) ==SURROGATE_PAIR ) +return -EINVAL ; +if (uni <0x80 ) { out[u_len++] = (unsigned char )uni; }else if (uni <0x800 ) {
Greg Kroah-Hartman
maintainerPATCH 181/196 fanotify: fix logic of events on child
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Amir Goldstein <[email protected]>
commit 54a307ba8d3cd00a3902337ffaae28f436eeb1a4 upstream.
When event on child inodes are sent to the parent inode mark and parent inode mark was not marked with FAN_EVENT_ON_CHILD, the event will not be delivered to the listener process. However, if the same process also has a mount mark, the event to the parent inode will be delivered regadless of the mount mark mask.
This behavior is incorrect in the case where the mount mark mask does not contain the specific event type. For example, the process adds a mark on a directory with mask FAN_MODIFY (without FAN_EVENT_ON_CHILD) and a mount mark with mask FAN_CLOSE_NOWRITE (without FAN_ONDIR).
A modify event on a file inside that directory (and inside that mount) should not create a FAN_MODIFY event, because neither of the marks requested to get that event on the file.
--- fs/notify/fanotify/fanotify.c | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-)
fs/notify/fanotify/fanotify.c +15 -19
@@ -92,7 +92,7 @@ static bool fanotify_should_send_event(su32 event_mask, const void *data, int data_type) { - __u32 marks_mask, marks_ignored_mask; + __u32 marks_mask = 0, marks_ignored_mask = 0;const struct path *path = data; pr_debug("%s: inode_mark=%p vfsmnt_mark=%p mask=%x data=%p"
@@ -108,24 +108,20 @@ static bool fanotify_should_send_event(s !d_can_lookup(path->dentry))return false; -if (inode_mark && vfsmnt_mark) { - marks_mask = (vfsmnt_mark->mask | inode_mark->mask); - marks_ignored_mask = (vfsmnt_mark->ignored_mask | inode_mark->ignored_mask); - }else if (inode_mark) { -/* -* if the event is for a child and this inode doesn't care about -* events on the child, don't send it! -*/ -if ((event_mask &FS_EVENT_ON_CHILD ) && - !(inode_mark->mask &FS_EVENT_ON_CHILD )) -return false; - marks_mask = inode_mark->mask; - marks_ignored_mask = inode_mark->ignored_mask; - }else if (vfsmnt_mark) { - marks_mask = vfsmnt_mark->mask; - marks_ignored_mask = vfsmnt_mark->ignored_mask; - }else { -BUG (); +/* +* if the event is for a child and this inode doesn't care about +* events on the child, don't send it! +*/ +if (inode_mark && + (!(event_mask &FS_EVENT_ON_CHILD ) || + (inode_mark->mask &FS_EVENT_ON_CHILD ))) { + marks_mask |= inode_mark->mask; + marks_ignored_mask |= inode_mark->ignored_mask; + } + +if (vfsmnt_mark) { + marks_mask |= vfsmnt_mark->mask; + marks_ignored_mask |= vfsmnt_mark->ignored_mask; } if (d_is_dir(path->dentry) &&
Greg Kroah-Hartman
maintainerPATCH 182/196 mmc: sdhci-pci: Only do AMD tuning for HS200
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Daniel Kurtz <[email protected]>
commit 300ad8992913025b4294d4fc37b6bfff4a8b7ad1 upstream.
Commit c31165d7400b ("mmc: sdhci-pci: Add support for HS200 tuning mode on AMD, eMMC-4.5.1") added a HS200 tuning method for use with AMD SDHCI controllers. As described in the commit subject, this tuning is specific for HS200. However, as implemented, this method is used for all host timings, because platform_execute_tuning, if it exists, is called unconditionally by sdhci_execute_tuning(). This breaks tuning when using the AMD controller with, for example, a DDR50 SD card.
Instead, we can implement an amd execute_tuning wrapper callback, and then conditionally do the HS200 specific tuning for HS200, and otherwise call back to the standard sdhci_execute_tuning().
--- drivers/mmc/host/sdhci-pci-core.c | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-)
drivers/mmc/host/sdhci-pci-core.c +23 -2
@@ -1318,7 +1318,7 @@ static void amd_enable_manual_tuning(strpci_write_config_dword (pdev,AMD_SD_MISC_CONTROL , val); } -static int amd_execute_tuning (struct sdhci_host *host,u32 opcode) +static int amd_execute_tuning_hs200 (struct sdhci_host *host,u32 opcode) {struct sdhci_pci_slot *slot =sdhci_priv (host);struct pci_dev *pdev = slot->chip->pdev;
@@ -1357,6 +1357,27 @@ static int amd_execute_tuning(struct sdhreturn 0 ; } +static int amd_execute_tuning (struct mmc_host *mmc,u32 opcode) +{ +struct sdhci_host *host =mmc_priv (mmc); + +/* AMD requires custom HS200 tuning */ +if (host->timing ==MMC_TIMING_MMC_HS200 ) +return amd_execute_tuning_hs200 (host, opcode); + +/* Otherwise perform standard SDHCI tuning */ +return sdhci_execute_tuning (mmc, opcode); +} + +static int amd_probe_slot (struct sdhci_pci_slot *slot) +{ +struct mmc_host_ops *ops = &slot->host->mmc_host_ops; + + ops->execute_tuning = amd_execute_tuning; + +return 0 ; +} +static int amd_probe (struct sdhci_pci_chip *chip) {struct pci_dev *smbus_dev;
@@ -1391,12 +1412,12 @@ static const struct sdhci_ops amd_sdhci_ .set_bus_width = sdhci_set_bus_width, .reset = sdhci_reset, .set_uhs_signaling = sdhci_set_uhs_signaling, - .platform_execute_tuning = amd_execute_tuning, };static const struct sdhci_pci_fixes sdhci_amd = { .probe = amd_probe, .ops = &amd_sdhci_pci_ops, + .probe_slot = amd_probe_slot, };static const struct pci_device_id pci_ids[] = {
Greg Kroah-Hartman
maintainerPATCH 183/196 drm/i915: Fix hibernation with ACPI S0 target state
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Imre Deak <[email protected]>
commit 300efa9eea451bdcf3b5a1eb292222e06e85bb2c upstream.
After
commit dd9f31c7a3887950cbd0d49eb9d43f7a1518a356
Author: Imre Deak <[email protected]> Date: Wed Aug 16 17:46:07 2017 +0300
drm/i915/gen9+: Set same power state before hibernation image save/restore
during hibernation/suspend the power domain functionality got disabled, after which resume could leave it incorrectly disabled if the ACPI target state was S0 during suspend and i915 was not loaded by the loader kernel.
This was caused by not considering if we resumed from hibernation as the condition for power domains reiniting.
Fix this by simply tracking if we suspended power domains during system suspend and reinit power domains accordingly during resume. This will result in reiniting power domains always when resuming from hibernation, regardless of the platform and whether or not i915 is loaded by the loader kernel.
The reason we didn't catch this earlier is that the enabled/disabled state of power domains during PMSG_FREEZE/PMSG_QUIESCE is platform and kernel config dependent: on my SKL the target state is S4 during PMSG_FREEZE and (with the driver loaded in the loader kernel) S0 during PMSG_QUIESCE. On the reporter's machine it's S0 during PMSG_FREEZE but (contrary to this) power domains are not initialized during PMSG_QUIESCE since i915 is not loaded in the loader kernel, or it's loaded but without the DMC firmware being available.
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105196
--- drivers/gpu/drm/i915/i915_drv.c | 22 ++++++++++------------ drivers/gpu/drm/i915/i915_drv.h | 2 +- 2 files changed, 11 insertions(+), 13 deletions(-)
drivers/gpu/drm/i915/i915_drv.c +10 -12
@@ -1599,15 +1599,12 @@ static int i915_drm_suspend_late(struct {struct drm_i915_private *dev_priv =to_i915 (dev);struct pci_dev *pdev = dev_priv->drm.pdev; -bool fw_csr;int ret;disable_rpm_wakeref_asserts (dev_priv);intel_display_set_init_power (dev_priv, false); - fw_csr = !IS_GEN9_LP (dev_priv) && !hibernation && -suspend_to_idle (dev_priv) && dev_priv->csr.dmc_payload;/* * In case of firmware assisted context save/restore don't manually * deinit the power domains. This also means the CSR/DMC firmware will
@@ -1615,8 +1612,11 @@ static int i915_drm_suspend_late(struct* also enable deeper system power states that would be blocked if the * firmware was inactive. */ -if (!fw_csr) +if (IS_GEN9_LP (dev_priv) || hibernation || !suspend_to_idle (dev_priv) || + dev_priv->csr.dmc_payload ==NULL ) {intel_power_domains_suspend (dev_priv); + dev_priv->power_domains_suspended = true; + } ret =0 ;if (IS_GEN9_LP (dev_priv))
@@ -1628,8 +1628,10 @@ static int i915_drm_suspend_late(structif (ret) {DRM_ERROR ("Suspend complete failed: %d\n" , ret); -if (!fw_csr) +if (dev_priv->power_domains_suspended) {intel_power_domains_init_hw (dev_priv, true); + dev_priv->power_domains_suspended = false; + } goto out; }
@@ -1650,8 +1652,6 @@ static int i915_drm_suspend_late(structif (!(hibernation &&INTEL_GEN (dev_priv) <6 ))pci_set_power_state (pdev, PCI_D3hot); - dev_priv->suspended_to_idle =suspend_to_idle (dev_priv); - out:enable_rpm_wakeref_asserts (dev_priv);
@@ -1818,8 +1818,7 @@ static int i915_drm_resume_early(structintel_uncore_resume_early (dev_priv);if (IS_GEN9_LP (dev_priv)) { -if (!dev_priv->suspended_to_idle) -gen9_sanitize_dc_state (dev_priv); +gen9_sanitize_dc_state (dev_priv);bxt_disable_dc9 (dev_priv); }else if (IS_HASWELL (dev_priv) ||IS_BROADWELL (dev_priv)) {hsw_disable_pc8 (dev_priv);
@@ -1827,8 +1826,7 @@ static int i915_drm_resume_early(structintel_uncore_sanitize (dev_priv); -if (IS_GEN9_LP (dev_priv) || - !(dev_priv->suspended_to_idle && dev_priv->csr.dmc_payload)) +if (dev_priv->power_domains_suspended)intel_power_domains_init_hw (dev_priv, true);else intel_display_set_init_power (dev_priv, true);
@@ -1838,7 +1836,7 @@ static int i915_drm_resume_early(structenable_rpm_wakeref_asserts (dev_priv); out: - dev_priv->suspended_to_idle = false; + dev_priv->power_domains_suspended = false;return ret; }
drivers/gpu/drm/i915/i915_drv.h +1 -1
@@ -2099,7 +2099,7 @@ struct drm_i915_private {u32 bxt_phy_grc;u32 suspend_count; -bool suspended_to_idle; +bool power_domains_suspended;struct i915_suspend_saved_registers regfile;struct vlv_s0ix_state vlv_s0ix_state;
Greg Kroah-Hartman
maintainerPATCH 184/196 drm/i915: Correctly handle limited range YCbCr data on VLV/CHV
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ville Syrjälä <[email protected]>
commit 5deae9191130db6b617c94fb261804597cf9b508 upstream.
Turns out the VLV/CHV fixed function sprite CSC expects full range data as input. We've been feeding it limited range data to it all along. To expand the data out to full range we'll use the color correction registers (brightness, contrast, and saturation).
On CHV pipe B we were actually doing the right thing already because we progammed the custom CSC matrix to do expect limited range input. Now that well pre-expand the data out with the color correction unit, we need to change the CSC matrix to operate with full range input instead.
This should make the sprite output of the other pipes match the sprite output of pipe B reasonably well. Looking at the resulting pipe CRCs, there can be a slight difference in the output, but as I don't know the formula used by the fixed function CSC of the other pipes, I don't think it's worth the effort to try to match the output exactly. It might not even be possible due to difference in internal precision etc.
One slight caveat here is that the color correction registers are single bufferred, so we should really be updating them during vblank, but we still don't have a mechanism for that, so just toss in another FIXME.
v2: Rebase
v3: s/bri/brightness/ s/con/contrast/ (Shashank)
v4: Clarify the constants and math (Shashank)
--- drivers/gpu/drm/i915/i915_reg.h | 10 ++++ drivers/gpu/drm/i915/intel_sprite.c | 83 +++++++++++++++++++++++++++--------- 2 files changed, 74 insertions(+), 19 deletions(-)
drivers/gpu/drm/i915/i915_reg.h +10 -0
@@ -6236,6 +6236,12 @@ enum {#define _SPATILEOFF (VLV_DISPLAY_BASE + 0x721a4)#define _SPACONSTALPHA (VLV_DISPLAY_BASE + 0x721a8)#define SP_CONST_ALPHA_ENABLE (1<<31) +#define _SPACLRC0 (VLV_DISPLAY_BASE + 0x721d0) +#define SP_CONTRAST (x) ((x) << 18)/* u3.6 */ +#define SP_BRIGHTNESS (x) ((x) & 0xff)/* s8 */ +#define _SPACLRC1 (VLV_DISPLAY_BASE + 0x721d4) +#define SP_SH_SIN (x) (((x) & 0x7ff) << 16)/* s4.7 */ +#define SP_SH_COS (x) (x)/* u3.7 */ #define _SPAGAMC (VLV_DISPLAY_BASE + 0x721f4)#define _SPBCNTR (VLV_DISPLAY_BASE + 0x72280)
@@ -6249,6 +6255,8 @@ enum {#define _SPBKEYMAXVAL (VLV_DISPLAY_BASE + 0x722a0)#define _SPBTILEOFF (VLV_DISPLAY_BASE + 0x722a4)#define _SPBCONSTALPHA (VLV_DISPLAY_BASE + 0x722a8) +#define _SPBCLRC0 (VLV_DISPLAY_BASE + 0x722d0) +#define _SPBCLRC1 (VLV_DISPLAY_BASE + 0x722d4)#define _SPBGAMC (VLV_DISPLAY_BASE + 0x722f4)#define _MMIO_VLV_SPR (pipe, plane_id, reg_a, reg_b) \
@@ -6265,6 +6273,8 @@ enum {#define SPKEYMAXVAL (pipe, plane_id) _MMIO_VLV_SPR((pipe), (plane_id), _SPAKEYMAXVAL, _SPBKEYMAXVAL)#define SPTILEOFF (pipe, plane_id) _MMIO_VLV_SPR((pipe), (plane_id), _SPATILEOFF, _SPBTILEOFF)#define SPCONSTALPHA (pipe, plane_id) _MMIO_VLV_SPR((pipe), (plane_id), _SPACONSTALPHA, _SPBCONSTALPHA) +#define SPCLRC0 (pipe, plane_id) _MMIO_VLV_SPR((pipe), (plane_id), _SPACLRC0, _SPBCLRC0) +#define SPCLRC1 (pipe, plane_id) _MMIO_VLV_SPR((pipe), (plane_id), _SPACLRC1, _SPBCLRC1)#define SPGAMC (pipe, plane_id) _MMIO_VLV_SPR((pipe), (plane_id), _SPAGAMC, _SPBGAMC)/*
drivers/gpu/drm/i915/intel_sprite.c +64 -19
116 lines not on this page · raw message
Greg Kroah-Hartman
maintainerPATCH 185/196 jffs2_kill_sb(): deal with failed allocations
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Al Viro <[email protected]>
commit c66b23c2840446a82c389e4cb1a12eb2a71fa2e4 upstream.
jffs2_fill_super() might fail to allocate jffs2_sb_info; jffs2_kill_sb() must survive that.
--- fs/jffs2/super.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/jffs2/super.c +1 -1
@@ -342,7 +342,7 @@ static void jffs2_put_super (struct supestatic void jffs2_kill_sb (struct super_block *sb) {struct jffs2_sb_info *c =JFFS2_SB_INFO (sb); -if (!sb_rdonly (sb)) +if (c && !sb_rdonly (sb))jffs2_stop_garbage_collect_thread (c);kill_mtd_super (sb);kfree (c);
Greg Kroah-Hartman
maintainerPATCH 186/196 hypfs_kill_super(): deal with failed allocations
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Al Viro <[email protected]>
commit a24cd490739586a7d2da3549a1844e1d7c4f4fc4 upstream.
hypfs_fill_super() might fail to allocate sbi; hypfs_kill_super() should not oops on that.
--- arch/s390/hypfs/inode.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/s390/hypfs/inode.c +1 -1
@@ -320,7 +320,7 @@ static void hypfs_kill_super(struct supeif (sb->s_root)hypfs_delete_tree (sb->s_root); -if (sb_info->update_file) +if (sb_info && sb_info->update_file)hypfs_remove (sb_info->update_file);kfree (sb->s_fs_info); sb->s_fs_info =NULL ;
Greg Kroah-Hartman
maintainerPATCH 187/196 orangefs_kill_sb(): deal with allocation failures
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Al Viro <[email protected]>
commit 659038428cb43a66e3eff71e2c845c9de3611a98 upstream.
orangefs_fill_sb() might've failed to allocate ORANGEFS_SB(s); don't oops in that case.
--- fs/orangefs/super.c | 5 +++++ 1 file changed, 5 insertions(+)
fs/orangefs/super.c +5 -0
@@ -579,6 +579,11 @@ void orangefs_kill_sb(struct super_block/* provided sb cleanup */ kill_anon_super (sb); +if (!ORANGEFS_SB (sb)) { +mutex_lock (&orangefs_request_mutex); +mutex_unlock (&orangefs_request_mutex); +return ; + }/* * issue the unmount to userspace to tell it to remove the * dynamic mount info it has for this superblock
Greg Kroah-Hartman
maintainerPATCH 188/196 rpc_pipefs: fix double-dput()
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Al Viro <[email protected]>
commit 4a3877c4cedd95543f8726b0a98743ed8db0c0fb upstream.
if we ever hit rpc_gssd_dummy_depopulate() dentry passed to it has refcount equal to 1. __rpc_rmpipe() drops it and dput() done after that hits an already freed dentry.
--- net/sunrpc/rpc_pipe.c | 1 + 1 file changed, 1 insertion(+)
net/sunrpc/rpc_pipe.c +1 -0
@@ -1375,6 +1375,7 @@ rpc_gssd_dummy_depopulate(struct dentrystruct dentry *clnt_dir = pipe_dentry->d_parent;struct dentry *gssd_dir = clnt_dir->d_parent; +dget (pipe_dentry);__rpc_rmpipe (d_inode (clnt_dir), pipe_dentry);__rpc_depopulate (clnt_dir, gssd_dummy_info_file,0 ,1 );__rpc_depopulate (gssd_dir, gssd_dummy_clnt_dir,0 ,1 );
Greg Kroah-Hartman
maintainerPATCH 189/196 Dont leak MNT_INTERNAL away from internal mounts
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Al Viro <[email protected]>
commit 16a34adb9392b2fe4195267475ab5b472e55292c upstream.
We want it only for the stuff created by SB_KERNMOUNT mounts, *not* for their copies. As it is, creating a deep stack of bindings of /proc/*/ns/* somewhere in a new namespace and exiting yields a stack overflow.
--- fs/namespace.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
fs/namespace.c +2 -1
@@ -1089,7 +1089,8 @@ static struct mount *clone_mnt(struct mo goto out_free; } - mnt->mnt.mnt_flags = old->mnt.mnt_flags & ~(MNT_WRITE_HOLD |MNT_MARKED ); + mnt->mnt.mnt_flags = old->mnt.mnt_flags; + mnt->mnt.mnt_flags &= ~(MNT_WRITE_HOLD |MNT_MARKED |MNT_INTERNAL );/* Don't allow unprivileged users to change mount flags */ if (flag &CL_UNPRIVILEGED ) { mnt->mnt.mnt_flags |=MNT_LOCK_ATIME ;
Greg Kroah-Hartman
maintainerPATCH 190/196 libnvdimm, dimm: handle EACCES failures from label reads
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dan Williams <[email protected]>
commit e7c5a571a8d6a266aee9ca3f3f26e5afe3717eca upstream.
The new support for the standard _LSR and _LSW methods neglected to also update the nvdimm_init_config_data() and nvdimm_set_config_data() to return the translated error code from failed commands. This precision is necessary because the locked status that was previously returned on ND_CMD_GET_CONFIG_SIZE commands is now returned on ND_CMD_{GET,SET}_CONFIG_DATA commands.
If the kernel misses this indication it can inadvertently fall back to label-less mode when it should otherwise avoid all access to locked regions.
--- drivers/nvdimm/dimm_devs.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-)
drivers/nvdimm/dimm_devs.c +12 -10
@@ -88,9 +88,9 @@ int nvdimm_init_nsarea(struct nvdimm_drvint nvdimm_init_config_data (struct nvdimm_drvdata *ndd) {struct nvdimm_bus *nvdimm_bus =walk_to_nvdimm_bus (ndd->dev); +int rc =validate_dimm (ndd), cmd_rc =0 ;struct nd_cmd_get_config_data_hdr *cmd;struct nvdimm_bus_descriptor *nd_desc; -int rc =validate_dimm (ndd);u32 max_cmd_size, config_size;size_t offset;
@@ -124,9 +124,11 @@ int nvdimm_init_config_data(struct nvdim cmd->in_offset = offset; rc = nd_desc->ndctl (nd_desc,to_nvdimm (ndd->dev),ND_CMD_GET_CONFIG_DATA , cmd, - cmd->in_length +sizeof (*cmd),NULL ); -if (rc || cmd->status) { - rc = -ENXIO ; + cmd->in_length +sizeof (*cmd), &cmd_rc); +if (rc <0 ) +break ; +if (cmd_rc <0 ) { + rc = cmd_rc;break ; }memcpy (ndd->data + offset, cmd->out_buf, cmd->in_length);
@@ -140,9 +142,9 @@ int nvdimm_init_config_data(struct nvdimint nvdimm_set_config_data (struct nvdimm_drvdata *ndd,size_t offset,void *buf,size_t len) { -int rc =validate_dimm (ndd);size_t max_cmd_size, buf_offset;struct nd_cmd_set_config_hdr *cmd; +int rc =validate_dimm (ndd), cmd_rc =0 ;struct nvdimm_bus *nvdimm_bus =walk_to_nvdimm_bus (ndd->dev);struct nvdimm_bus_descriptor *nd_desc = nvdimm_bus->nd_desc;
@@ -164,7 +166,6 @@ int nvdimm_set_config_data(struct nvdimmfor (buf_offset =0 ; len; len -= cmd->in_length, buf_offset += cmd->in_length) {size_t cmd_size; -u32 *status; cmd->in_offset = offset + buf_offset; cmd->in_length =min (max_cmd_size, len);
@@ -172,12 +173,13 @@ int nvdimm_set_config_data(struct nvdimm/* status is output in the last 4-bytes of the command buffer */ cmd_size =sizeof (*cmd) + cmd->in_length +sizeof (u32); - status = ((void *) cmd) + cmd_size -sizeof (u32); rc = nd_desc->ndctl (nd_desc,to_nvdimm (ndd->dev), -ND_CMD_SET_CONFIG_DATA , cmd, cmd_size,NULL ); -if (rc || *status) { - rc = rc ? rc : -ENXIO ; +ND_CMD_SET_CONFIG_DATA , cmd, cmd_size, &cmd_rc); +if (rc <0 ) +break ; +if (cmd_rc <0 ) { + rc = cmd_rc;break ; } }
Greg Kroah-Hartman
maintainerPATCH 191/196 device-dax: allow MAP_SYNC to succeed
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Dave Jiang <[email protected]>
commit ef8423022324cf79bd1b41d8707c766461e7e555 upstream.
MAP_SYNC is a nop for device-dax. Allow MAP_SYNC to succeed on device-dax to eliminate special casing between device-dax and fs-dax as to when the flag can be specified. Device-dax users already implicitly assume that they do not need to call fsync(), and this enables them to explicitly check for this capability.
--- drivers/dax/device.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/dax/device.c +2 -0
@@ -19,6 +19,7 @@#include <linux/dax.h> #include <linux/fs.h> #include <linux/mm.h> +#include <linux/mman.h> #include "dax-private.h" #include "dax.h"
@@ -534,6 +535,7 @@ static const struct file_operations dax_ .release = dax_release, .get_unmapped_area = dax_get_unmapped_area, .mmap = dax_mmap, + .mmap_supported_flags = MAP_SYNC, };static void dev_dax_release (struct device *dev)
Greg Kroah-Hartman
maintainerPATCH 192/196 autofs: mount point create should honour passed in mode
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Ian Kent <[email protected]>
commit 1e6306652ba18723015d1b4967fe9de55f042499 upstream.
The autofs file system mkdir inode operation blindly sets the created directory mode to S_IFDIR | 0555, ingoring the passed in mode, which can cause selinux dac_override denials.
But the function also checks if the caller is the daemon (as no-one else should be able to do anything here) so there's no point in not honouring the passed in mode, allowing the daemon to set appropriate mode when required.
--- fs/autofs4/root.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
fs/autofs4/root.c +1 -1
@@ -749,7 +749,7 @@ static int autofs4_dir_mkdir(struct inodautofs4_del_active (dentry); - inode =autofs4_get_inode (dir->i_sb,S_IFDIR |0555 ); + inode =autofs4_get_inode (dir->i_sb,S_IFDIR | mode);if (!inode)return -ENOMEM ;d_add (dentry, inode);
Greg Kroah-Hartman
maintainerPATCH 193/196 mm/filemap.c: fix NULL pointer in page_cache_tree_insert()
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Matthew Wilcox <[email protected]>
commit abc1be13fd113ddef5e2d807a466286b864caed3 upstream.
f2fs specifies the __GFP_ZERO flag for allocating some of its pages. Unfortunately, the page cache also uses the mapping's GFP flags for allocating radix tree nodes. It always masked off the __GFP_HIGHMEM flag, and masks off __GFP_ZERO in some paths, but not all. That causes radix tree nodes to be allocated with a NULL list_head, which causes backtraces like:
__list_del_entry+0x30/0xd0 list_lru_del+0xac/0x1ac page_cache_tree_insert+0xd8/0x110
The __GFP_DMA and __GFP_DMA32 flags would also be able to sneak through if they are ever used. Fix them all by using GFP_RECLAIM_MASK at the innermost location, and remove it from earlier in the callchain.
--- mm/filemap.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-)
mm/filemap.c +4 -5
@@ -785,7 +785,7 @@ int replace_page_cache_page(struct pageVM_BUG_ON_PAGE (!PageLocked (new), new);VM_BUG_ON_PAGE (new->mapping, new); - error =radix_tree_preload (gfp_mask & ~__GFP_HIGHMEM); + error =radix_tree_preload (gfp_mask &GFP_RECLAIM_MASK );if (!error) {struct address_space *mapping = old->mapping;void (*freepage)(struct page *);
@@ -841,7 +841,7 @@ static int __add_to_page_cache_locked(streturn error; } - error =radix_tree_maybe_preload (gfp_mask & ~__GFP_HIGHMEM); + error =radix_tree_maybe_preload (gfp_mask &GFP_RECLAIM_MASK );if (error) {if (!huge)mem_cgroup_cancel_charge (page, memcg, false);
@@ -1584,8 +1584,7 @@ no_page:if (fgp_flags &FGP_ACCESSED )__SetPageReferenced (page); - err =add_to_page_cache_lru (page, mapping, offset, - gfp_mask &GFP_RECLAIM_MASK ); + err =add_to_page_cache_lru (page, mapping, offset, gfp_mask);if (unlikely (err)) {put_page (page); page =NULL ;
@@ -2388,7 +2387,7 @@ static int page_cache_read(struct file *if (!page)return -ENOMEM ; - ret =add_to_page_cache_lru (page, mapping, offset, gfp_mask &GFP_KERNEL ); + ret =add_to_page_cache_lru (page, mapping, offset, gfp_mask);if (ret ==0 ) ret = mapping->a_ops->readpage (file, page);else if (ret == -EEXIST )
Greg Kroah-Hartman
maintainerPATCH 194/196 drm/i915/gvt: init mmio by lri command in vgpu inhibit context
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Weinan Li <[email protected]>
commit cd7e61b93d068a80bfe6cb55bf00f17332d831a1 upstream.
There is one issue relates to Coarse Power Gating(CPG) on KBL NUC in GVT-g, vgpu can't get the correct default context by updating the registers before inhibit context submission. It always get back the hardware default value unless the inhibit context submission happened before the 1st time forcewake put. With this wrong default context, vgpu will run with incorrect state and meet unknown issues.
The solution is initialize these mmios by adding lri command in ring buffer of the inhibit context, then gpu hardware has no chance to go down RC6 when lri commands are right being executed, and then vgpu can get correct default context for further use.
v3:
- fix code fault, use 'for' to loop through mmio render list(Zhenyu)
v4:
- save the count of engine mmio need to be restored for inhibit context and refine some comments. (Kevin)
v5:
- code rebase
--- drivers/gpu/drm/i915/gvt/gvt.h | 5 drivers/gpu/drm/i915/gvt/mmio_context.c | 210 +++++++++++++++++++++++++++++--- drivers/gpu/drm/i915/gvt/mmio_context.h | 5 drivers/gpu/drm/i915/gvt/scheduler.c | 5 4 files changed, 205 insertions(+), 20 deletions(-)
drivers/gpu/drm/i915/gvt/gvt.h +4 -1
@@ -308,7 +308,10 @@ struct intel_gvt {wait_queue_head_t service_thread_wq;unsigned long service_request; -struct engine_mmio *engine_mmio_list; +struct { +struct engine_mmio *mmio; +int ctx_mmio_count[I915_NUM_ENGINES ]; + } engine_mmio_list;struct dentry *debugfs_root; };
drivers/gpu/drm/i915/gvt/mmio_context.c +191 -19
292 lines not on this page · raw message
drivers/gpu/drm/i915/gvt/mmio_context.h +5 -0
@@ -49,4 +49,9 @@ void intel_gvt_switch_mmio(struct intel_void intel_gvt_init_engine_mmio_context (struct intel_gvt *gvt); +bool is_inhibit_context (struct i915_gem_context *ctx,int ring_id); + +int intel_vgpu_restore_inhibit_context (struct intel_vgpu *vgpu, +struct drm_i915_gem_request *req); +#endif
drivers/gpu/drm/i915/gvt/scheduler.c +5 -0
@@ -275,6 +275,11 @@ static int copy_workload_to_ring_buffer(struct intel_vgpu *vgpu = workload->vgpu;void *shadow_ring_buffer_va;u32 *cs; +struct drm_i915_gem_request *req = workload->req; + +if (IS_KABYLAKE (req->i915) && +is_inhibit_context (req->ctx, req->engine->id)) +intel_vgpu_restore_inhibit_context (vgpu, req);/* allocate shadow ring buffer */ cs =intel_ring_begin (workload->req, workload->rb_len /sizeof (u32));
Greg Kroah-Hartman
maintainerPATCH 195/196 HID: i2c-hid: fix inverted return value from i2c_hid_command()
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Jiri Kosina <[email protected]>
commit b658912cb023cd6f8e46963d29779903d3c10538 upstream.
i2c_hid_command() returns non-zero in error cases (the actual errno). Error handling in for I2C_HID_QUIRK_RESEND_REPORT_DESCR case in i2c_hid_resume() had the check inverted; fix that.
--- drivers/hid/i2c-hid/i2c-hid.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/hid/i2c-hid/i2c-hid.c +1 -1
@@ -1229,7 +1229,7 @@ static int i2c_hid_resume(struct device*/ if (ihid->quirks &I2C_HID_QUIRK_RESEND_REPORT_DESCR ) { ret =i2c_hid_command (client, &hid_report_descr_cmd,NULL ,0 ); -if (!ret) +if (ret)return ret; }
Greg Kroah-Hartman
maintainerPATCH 196/196 writeback: safer lock nesting
In reply to Greg Kroah-Hartman4.16-stable review patch. If anyone has any objections, please let me know.
------------------
From: Greg Thelen <[email protected]>
commit 2e898e4c0a3897ccd434adac5abb8330194f527b upstream.
lock_page_memcg()/unlock_page_memcg() use spin_lock_irqsave/restore() if the page's memcg is undergoing move accounting, which occurs when a process leaves its memcg for a new one that has memory.move_charge_at_immigrate set.
unlocked_inode_to_wb_begin,end() use spin_lock_irq/spin_unlock_irq() if the given inode is switching writeback domains. Switches occur when enough writes are issued from a new domain.
This existing pattern is thus suspicious:
lock_page_memcg(page);
unlocked_inode_to_wb_begin(inode, &locked);
...
unlocked_inode_to_wb_end(inode, locked);
unlock_page_memcg(page);If both inode switch and process memcg migration are both in-flight then unlocked_inode_to_wb_end() will unconditionally enable interrupts while still holding the lock_page_memcg() irq spinlock. This suggests the possibility of deadlock if an interrupt occurs before unlock_page_memcg().
truncate
__cancel_dirty_page
lock_page_memcg
unlocked_inode_to_wb_begin unlocked_inode_to_wb_end
<interrupts mistakenly enabled>
<interrupt> end_page_writeback test_clear_page_writeback lock_page_memcg <deadlock>
unlock_page_memcg
Due to configuration limitations this deadlock is not currently possible because we don't mix cgroup writeback (a cgroupv2 feature) and memory.move_charge_at_immigrate (a cgroupv1 feature).
If the kernel is hacked to always claim inode switching and memcg moving_account, then this script triggers lockup in less than a minute:
cd /mnt/cgroup/memory
mkdir a b
echo 1 > a/memory.move_charge_at_immigrate
echo 1 > b/memory.move_charge_at_immigrate
(
echo $BASHPID > a/cgroup.procs
while true; do
dd if=/dev/zero of=/mnt/big bs=1M count=256
done
) &
while true; do
sync
done &
sleep 1h &
SLEEP=$!
while true; do
echo $SLEEP > a/cgroup.procs
echo $SLEEP > b/cgroup.procs
done
The deadlock does not seem possible, so it's debatable if there's any reason to modify the kernel. I suggest we should to prevent future surprises. And Wang Long said "this deadlock occurs three times in our environment", so there's more reason to apply this, even to stable. Stable 4.4 has minor conflicts applying this patch. For a clean 4.4 patch see "[PATCH for-4.4] writeback: safer lock nesting"
https://lkml.org/lkml/2018/4/11/146
Wang Long said "this deadlock occurs three times in our environment"
--- fs/fs-writeback.c | 7 ++++--- include/linux/backing-dev-defs.h | 5 +++++ include/linux/backing-dev.h | 30 ++++++++++++++++-------------- mm/page-writeback.c | 18 +++++++++--------- 4 files changed, 34 insertions(+), 26 deletions(-)
fs/fs-writeback.c +4 -3
@@ -745,11 +745,12 @@ int inode_congested(struct inode *inode,*/ if (inode &&inode_to_wb_is_valid (inode)) {struct bdi_writeback *wb; -bool locked, congested; +struct wb_lock_cookie lock_cookie = {}; +bool congested; - wb =unlocked_inode_to_wb_begin (inode, &locked); + wb =unlocked_inode_to_wb_begin (inode, &lock_cookie); congested =wb_congested (wb, cong_bits); -unlocked_inode_to_wb_end (inode, locked); +unlocked_inode_to_wb_end (inode, &lock_cookie);return congested; }
include/linux/backing-dev-defs.h +5 -0
@@ -223,6 +223,11 @@ static inline void set_bdi_congested(strset_wb_congested (bdi->wb.congested, sync); } +struct wb_lock_cookie { +bool locked; +unsigned long flags; +}; +#ifdef CONFIG_CGROUP_WRITEBACK /**
include/linux/backing-dev.h +16 -14
@@ -346,7 +346,7 @@ static inline struct bdi_writeback *inod/** * unlocked_inode_to_wb_begin - begin unlocked inode wb access transaction * @inode: target inode -* @lockedp: temp bool output param, to be passed to the end function +* @cookie: output param, to be passed to the end function * * The caller wants to access the wb associated with @inode but isn't * holding inode->i_lock, mapping->tree_lock or wb->list_lock. This
@@ -354,12 +354,12 @@ static inline struct bdi_writeback *inod* association doesn't change until the transaction is finished with * unlocked_inode_to_wb_end(). * -* The caller must call unlocked_inode_to_wb_end() with *@lockdep -* afterwards and can't sleep during transaction. IRQ may or may not be -* disabled on return. +* The caller must call unlocked_inode_to_wb_end() with *@cookie afterwards and +* can't sleep during the transaction. IRQs may or may not be disabled on +* return. */ static inline struct bdi_writeback * -unlocked_inode_to_wb_begin (struct inode *inode,bool *lockedp) +unlocked_inode_to_wb_begin (struct inode *inode,struct wb_lock_cookie *cookie) {rcu_read_lock ();
@@ -367,10 +367,10 @@ unlocked_inode_to_wb_begin(struct inode* Paired with store_release in inode_switch_wb_work_fn() and * ensures that we see the new wb if we see cleared I_WB_SWITCH. */ - *lockedp =smp_load_acquire (&inode->i_state) &I_WB_SWITCH ; + cookie->locked =smp_load_acquire (&inode->i_state) &I_WB_SWITCH ; -if (unlikely (*lockedp)) -spin_lock_irq (&inode->i_mapping->tree_lock); +if (unlikely (cookie->locked)) +spin_lock_irqsave (&inode->i_mapping->tree_lock, cookie->flags);/* * Protected by either !I_WB_SWITCH + rcu_read_lock() or tree_lock.
@@ -382,12 +382,13 @@ unlocked_inode_to_wb_begin(struct inode/** * unlocked_inode_to_wb_end - end inode wb access transaction * @inode: target inode -* @locked: *@lockedp from unlocked_inode_to_wb_begin() +* @cookie: @cookie from unlocked_inode_to_wb_begin() */ -static inline void unlocked_inode_to_wb_end (struct inode *inode,bool locked) +static inline void unlocked_inode_to_wb_end (struct inode *inode, +struct wb_lock_cookie *cookie) { -if (unlikely (locked)) -spin_unlock_irq (&inode->i_mapping->tree_lock); +if (unlikely (cookie->locked)) +spin_unlock_irqrestore (&inode->i_mapping->tree_lock, cookie->flags);rcu_read_unlock (); }
@@ -434,12 +435,13 @@ static inline struct bdi_writeback *inod }static inline struct bdi_writeback * -unlocked_inode_to_wb_begin (struct inode *inode,bool *lockedp) +unlocked_inode_to_wb_begin (struct inode *inode,struct wb_lock_cookie *cookie) {return inode_to_wb (inode); } -static inline void unlocked_inode_to_wb_end (struct inode *inode,bool locked) +static inline void unlocked_inode_to_wb_end (struct inode *inode, +struct wb_lock_cookie *cookie) { }
mm/page-writeback.c +9 -9
@@ -2501,13 +2501,13 @@ void account_page_redirty(struct page *pif (mapping &&mapping_cap_account_dirty (mapping)) {struct inode *inode = mapping->host;struct bdi_writeback *wb; -bool locked; +struct wb_lock_cookie cookie = {}; - wb =unlocked_inode_to_wb_begin (inode, &locked); + wb =unlocked_inode_to_wb_begin (inode, &cookie); current->nr_dirtied--;dec_node_page_state (page,NR_DIRTIED );dec_wb_stat (wb,WB_DIRTIED ); -unlocked_inode_to_wb_end (inode, locked); +unlocked_inode_to_wb_end (inode, &cookie); } }EXPORT_SYMBOL (account_page_redirty);
@@ -2613,15 +2613,15 @@ void __cancel_dirty_page(struct page *paif (mapping_cap_account_dirty (mapping)) {struct inode *inode = mapping->host;struct bdi_writeback *wb; -bool locked; +struct wb_lock_cookie cookie = {};lock_page_memcg (page); - wb =unlocked_inode_to_wb_begin (inode, &locked); + wb =unlocked_inode_to_wb_begin (inode, &cookie);if (TestClearPageDirty (page))account_page_cleaned (page, mapping, wb); -unlocked_inode_to_wb_end (inode, locked); +unlocked_inode_to_wb_end (inode, &cookie);unlock_page_memcg (page); }else {ClearPageDirty (page);
@@ -2653,7 +2653,7 @@ int clear_page_dirty_for_io(struct pageif (mapping &&mapping_cap_account_dirty (mapping)) {struct inode *inode = mapping->host;struct bdi_writeback *wb; -bool locked; +struct wb_lock_cookie cookie = {};/* * Yes, Virginia, this is indeed insane.
@@ -2690,14 +2690,14 @@ int clear_page_dirty_for_io(struct page* always locked coming in here, so we get the desired * exclusion. */ - wb =unlocked_inode_to_wb_begin (inode, &locked); + wb =unlocked_inode_to_wb_begin (inode, &cookie);if (TestClearPageDirty (page)) {dec_lruvec_page_state (page,NR_FILE_DIRTY );dec_zone_page_state (page,NR_ZONE_WRITE_PENDING );dec_wb_stat (wb,WB_RECLAIMABLE ); ret =1 ; } -unlocked_inode_to_wb_end (inode, locked); +unlocked_inode_to_wb_end (inode, &cookie);return ret; }return TestClearPageDirty (page);
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.16.4 release. There are 196 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 Tue Apr 24 13:50:16 UTC 2018. Anything received after that time might be too late.
Build results:
total: 143 pass: 141 fail: 2
Failed builds:
powerpc:defconfig
powerpc:allmodconfig
Qemu test results:
total: 139 pass: 133 fail: 6
Failed tests:
powerpc:mac99:ppc64_book3s_defconfig:initrd:nosmp powerpc:mac99:ppc64_book3s_defconfig:initrd:smp4 powerpc:mac99:ppc64_book3s_defconfig:rootfs:smp4 powerpc:pseries:pseries_defconfig:initrd powerpc:pseries:pseries_defconfig:rootfs powerpc:powernv:powernv_defconfig:initrd
arch/powerpc/platforms/powernv/opal-nvram.c: In function 'opal_nvram_write':arch/powerpc/platforms/powernv/opal-nvram.c:61:11: error: 'OPAL_BUSY_DELAY_MS'
This problem affects _all_ pending releases.
Guenter
Quoted 26 lines · Guenter Roeck
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.16.4 release. There are 196 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 Tue Apr 24 13:50:16 UTC 2018. Anything received after that time might be too late.
Build results:
total: 143 pass: 141 fail: 2Failed builds:
powerpc:defconfig
powerpc:allmodconfig
Qemu test results:total: 139 pass: 133 fail: 6Failed tests:
powerpc:mac99:ppc64_book3s_defconfig:initrd:nosmp powerpc:mac99:ppc64_book3s_defconfig:initrd:smp4 powerpc:mac99:ppc64_book3s_defconfig:rootfs:smp4 powerpc:pseries:pseries_defconfig:initrd powerpc:pseries:pseries_defconfig:rootfs powerpc:powernv:powernv_defconfig:initrd
Quoted 6 lines
arch/powerpc/platforms/powernv/opal-nvram.c: In function 'opal_nvram_write':arch/powerpc/platforms/powernv/opal-nvram.c:61:11: error: 'OPAL_BUSY_DELAY_MS'This problem affects _all_ pending releases.
Guenter
Looks like 3b8070335f75 ("powerpc/powernv: Fix OPAL NVRAM driver OPAL_BUSY loops") has a dependency commit that was missed: 34dd25de9fe3 ("powerpc/powernv: define a standard delay for OPAL_BUSY type retry loops").
Nathan
Greg Kroah-Hartman
maintainerQuoted 30 lines · Nathan Chancellor
Quoted 29 lines · Guenter Roeck
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.16.4 release. There are 196 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 Tue Apr 24 13:50:16 UTC 2018. Anything received after that time might be too late.
Build results:
total: 143 pass: 141 fail: 2Failed builds:
powerpc:defconfig
powerpc:allmodconfig
Qemu test results:total: 139 pass: 133 fail: 6Failed tests:
powerpc:mac99:ppc64_book3s_defconfig:initrd:nosmp powerpc:mac99:ppc64_book3s_defconfig:initrd:smp4 powerpc:mac99:ppc64_book3s_defconfig:rootfs:smp4 powerpc:pseries:pseries_defconfig:initrd powerpc:pseries:pseries_defconfig:rootfs powerpc:powernv:powernv_defconfig:initrd
arch/powerpc/platforms/powernv/opal-nvram.c: In function 'opal_nvram_write':arch/powerpc/platforms/powernv/opal-nvram.c:61:11: error: 'OPAL_BUSY_DELAY_MS'
Quoted 8 lines
Quoted 3 lines
This problem affects _all_ pending releases.
Guenter
Looks like
3b8070335f75("powerpc/powernv: Fix OPAL NVRAM driverOPAL_BUSYloops") has a dependency commit that was missed:34dd25de9fe3("powerpc/powernv: define a standard delay forOPAL_BUSYtype retry loops").
Thanks, I've now queued this up everywhere to resolve this issue.
greg k-h
stable-rc/linux-4.16.y boot: 152 boots: 4 failed, 136 passed with 9 offline, 2 untried/unknown, 1 conflict (v4.16.3-197-g405d1f8b04d1)
stable-rc/linux-4.16.y boot: 152 boots: 4 failed, 136 passed with 9 offline, 2 untried/unknown, 1 conflict (v4.16.3-197-g405d1f8b04d1)
Full Boot Summary: https://kernelci.org/boot/all/job/stable-rc/branch/linux-4.16.y/kernel/v4.16.3-197-g405d1f8b04d1/
Full Build Summary: https://kernelci.org/build/stable-rc/branch/linux-4.16.y/kernel/v4.16.3-197-g405d1f8b04d1/
Tree: stable-rc
Branch: linux-4.16.y
Git Describe: v4.16.3-197-g405d1f8b04d1
Git Commit: 405d1f8b04d1be21a0ed20cc6adebdc8830215c4
Git URL: http://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
Tested: 78 unique boards, 23 SoC families, 17 builds out of 186
Boot Regressions Detected:
arm:
multi_v7_defconfig:
sun8i-a33-sinlinx-sina33:
lab-free-electrons: new failure (last pass: v4.16.2-266-g5befb1483fc7)
mvebu_v7_defconfig:
armada-xp-linksys-mamba:
lab-free-electrons: new failure (last pass: v4.16.2-266-g5befb1483fc7)
sunxi_defconfig:
sun5i-r8-chip:
lab-free-electrons: new failure (last pass: v4.16.2-266-g5befb1483fc7)
sun8i-a83t-allwinner-h8homlet-v2:
lab-free-electrons: new failure (last pass: v4.16.2-266-g5befb1483fc7)arm64:
defconfig:
r8a7796-m3ulcb:
lab-baylibre: new failure (last pass: v4.16.2-266-g5befb1483fc7)Boot Failures Detected:
arm:
sunxi_defconfig
sun5i-r8-chip: 1 failed lab sun8i-a83t-allwinner-h8homlet-v2: 1 failed lab
multi_v7_defconfig
sun8i-a33-sinlinx-sina33: 1 failed lab
mvebu_v7_defconfig
armada-xp-linksys-mamba: 1 failed lab
Offline Platforms:
arm:
sunxi_defconfig:
sun5i-r8-chip: 1 offline lab
multi_v7_defconfig:
qcom-apq8064-cm-qs600: 1 offline lab
qcom-apq8064-ifc6410: 1 offline lab
sun5i-r8-chip: 1 offline lab
tegra20-iris-512: 1 offline lab
qcom_defconfig:
qcom-apq8064-cm-qs600: 1 offline lab
qcom-apq8064-ifc6410: 1 offline lab
tegra_defconfig:
tegra20-iris-512: 1 offline labarm64:
defconfig:
apq8016-sbc: 1 offline labConflicting Boot Failure Detected: (These likely are not failures as other labs are reporting PASS. Needs review.)
arm64:
defconfig:
r8a7796-m3ulcb:
lab-collabora: PASS
lab-baylibre: FAIL---
For more info write to <[email protected]>
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.16.4 release. There are 196 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 Tue Apr 24 13:50:16 UTC 2018. Anything received after that time might be too late.
For v4.16.3-197-g405d1f8:
Build results:
total: 143 pass: 143 fail: 0 Qemu test results: total: 139 pass: 139 fail: 0
Details are available at http://kerneltests.org/builders.
Guenter
Greg Kroah-Hartman
maintainerQuoted 10 lines · Guenter Roeck
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.16.4 release. There are 196 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 Tue Apr 24 13:50:16 UTC 2018. Anything received after that time might be too late.
Quoted 8 lines
For v4.16.3-197-g405d1f8:
Build results:
total: 143 pass: 143 fail: 0 Qemu test results: total: 139 pass: 139 fail: 0Details are available at http://kerneltests.org/builders.
Thanks for testing all of these. I've pushed out new trees for 4.16.y, 4.14.y, and 4.9.y so I'll watch your builders to make sure all is good with them.
thanks,
greg k-h
Quoted 18 lines · Greg Kroah-Hartman
Quoted 17 lines · Guenter Roeck
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.16.4 release. There are 196 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 Tue Apr 24 13:50:16 UTC 2018. Anything received after that time might be too late.
For v4.16.3-197-g405d1f8:
Build results:
total: 143 pass: 143 fail: 0 Qemu test results: total: 139 pass: 139 fail: 0
Quoted 6 lines
Quoted 1 line
Details are available at http://kerneltests.org/builders.
Thanks for testing all of these. I've pushed out new trees for 4.16.y, 4.14.y, and 4.9.y so I'll watch your builders to make sure all is good with them.
Still no failures after rebuilding all three releases.
Guenter
Greg Kroah-Hartman
maintainerQuoted 19 lines · Guenter Roeck
Quoted 18 lines · Greg Kroah-Hartman
Quoted 17 lines · Guenter Roeck
Quoted 8 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.16.4 release. There are 196 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 Tue Apr 24 13:50:16 UTC 2018. Anything received after that time might be too late.
For v4.16.3-197-g405d1f8:
Build results:
total: 143 pass: 143 fail: 0 Qemu test results: total: 139 pass: 139 fail: 0
Quoted 7 lines
Quoted 6 lines
Quoted 1 line
Details are available at http://kerneltests.org/builders.
Thanks for testing all of these. I've pushed out new trees for 4.16.y, 4.14.y, and 4.9.y so I'll watch your builders to make sure all is good with them.
Still no failures after rebuilding all three releases.
Wonderful, thanks for letting me know.
greg k-h
Greg Kroah-Hartman
maintainerQuoted 5 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.16.4 release. There are 196 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.
Quoted 8 lines
Responses should be made by Tue Apr 24 13:50:16 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.16.4-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.16.y
and the diffstat can be found below.
There is a -rc3 out now, to fix some issues reported with -rc1 and -rc2 (I forgot to announce -rc2, sorry.):
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.16.4-rc3.gz
Quoted 15 lines · Greg Kroah-Hartman
Quoted 5 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.16.4 release. There are 196 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.
Quoted 8 lines
Responses should be made by Tue Apr 24 13:50:16 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.16.4-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.16.y
and the diffstat can be found below.
Quoted 6 lines
There is a -rc3 out now, to fix some issues reported with -rc1 and -rc2 (I forgot to announce -rc2, sorry.):
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.16.4-rc3.gz
I just tried rc1 - will try rc3. Has the lock problem seen already: ( I will try rc3 and if I setill see the problem, will start bisect)
================================
WARNING: inconsistent lock state
4.16.4-rc1+ #4 Not tainted
--------------------------------
inconsistent {HARDIRQ-ON-W} -> {IN-HARDIRQ-W} usage. swapper/3/0 [HC1[1]:SC1[1]:HE0:SE0] takes:
(fs_reclaim){?.+.}, at: [< (ptrval)>] fs_reclaim_acquire.part.76+0x5/0x30
{HARDIRQ-ON-W} state was registered at:
fs_reclaim_acquire.part.76+0x29/0x30 kmem_cache_alloc_node_trace+0x39/0x2a0 alloc_worker+0x2d/0xa0 create_worker+0xa0/0x2b0 workqueue_init+0x315/0x39a kernel_init_freeable+0x153/0x312 kernel_init+0xf/0x120 ret_from_fork+0x3a/0x50 irq event stamp: 164931 hardirqs last enabled at (164930): [< (ptrval)>] __do_softirq+0xe1/0x560 hardirqs last disabled at (164931): [< (ptrval)>] interrupt_entry+0xbd/0xf0 softirqs last enabled at (164928): [< (ptrval)>] irq_enter+0x75/0x80 softirqs last disabled at (164929): [< (ptrval)>] irq_exit+0x104/0x110
other info that might help us debug this:
Possible unsafe locking scenario:
CPU0
----
lock(fs_reclaim);
<Interrupt>
lock(fs_reclaim);*** DEADLOCK ***
no locks held by swapper/3/0.
stack backtrace: CPU: 3 PID: 0 Comm: swapper/3 Not tainted 4.16.4-rc1+ #4 Hardware name: System76, Inc. Wild Dog Performance/H87-PLUS, BIOS 0705 12/05/2013 Call Trace: <IRQ> dump_stack+0x67/0x98 print_usage_bug+0x24c/0x266 mark_lock+0x6c1/0x7a0 ? check_usage_backwards+0x230/0x230 __lock_acquire+0x1237/0x1e20 ? debug_check_no_locks_freed+0x190/0x190 ? debug_check_no_locks_freed+0x190/0x190 ? memzero_explicit+0xa/0x10 ? extract_buf+0x1b1/0x220 ? trace_event_raw_event_xfer_secondary_pool+0x1b0/0x1b0 ? _raw_spin_unlock_irqrestore+0x3e/0x50 ? match_held_lock+0x1b/0x210 ? lock_acquire+0xcd/0x220 lock_acquire+0xcd/0x220 ? fs_reclaim_acquire.part.76+0x5/0x30 ? lock_acquire+0xcd/0x220 fs_reclaim_acquire.part.76+0x29/0x30 ? fs_reclaim_acquire.part.76+0x5/0x30 __kmalloc+0x51/0x2e0 ? crng_reseed+0x229/0x440 crng_reseed+0x229/0x440 ? init_std_data+0x1c0/0x1c0 ? add_interrupt_randomness+0x27d/0x340 credit_entropy_bits+0x3b7/0x3d0 add_interrupt_randomness+0x27d/0x340 ? extract_entropy.constprop.41+0x1b0/0x1b0 ? rcu_read_lock_sched_held+0x7c/0x80 ? __handle_irq_event_percpu+0xf9/0x3c0 handle_irq_event_percpu+0x8b/0xe0 ? __handle_irq_event_percpu+0x3c0/0x3c0 ? lock_acquire+0xcd/0x220 ? handle_edge_irq+0x28/0x2c0 ? do_raw_spin_unlock+0x91/0x120 handle_irq_event+0x5a/0x90 handle_edge_irq+0xef/0x2c0 handle_irq+0x32/0x40 do_IRQ+0x60/0x130 common_interrupt+0xf/0xf RIP: 0010:__do_softirq+0xe7/0x560 RSP: 0018:ffff8803cfec7f58 EFLAGS: 00000246 ORIG_RAX: ffffffffffffffde RAX: 00000000ffffffff RBX: ffff8803cd6b26c0 RCX: ffffffff8112890c RDX: 0000000000000007 RSI: dffffc0000000000 RDI: ffff8803cd6b2f24 RBP: ffff8803cd6b2ef4 R08: 0000000000000000 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000000 R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000202 ? common_interrupt+0xa/0xf ? trace_hardirqs_on_caller+0x18c/0x280 ? __do_softirq+0xe1/0x560 irq_exit+0x104/0x110 smp_apic_timer_interrupt+0xb8/0x300 apic_timer_interrupt+0xf/0x20 </IRQ> RIP: 0010:cpuidle_enter_state+0xc4/0x430 RSP: 0018:ffff8803cd6c7d90 EFLAGS: 00000212 ORIG_RAX: ffffffffffffff12 RAX: 0000000000000000 RBX: ffffe8ffffcca660 RCX: ffffffff8112890c RDX: 0000000000000007 RSI: dffffc0000000000 RDI: ffff8803cd6b2f24 RBP: 0000000000011c2f R08: 0000000000000001 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000002 R13: ffffffff82d17658 R14: ffffffff82d17640 R15: ffffffff82d17680 ? trace_hardirqs_on_caller+0x18c/0x280 do_idle+0x1a9/0x1f0 cpu_startup_entry+0xc2/0xd0 ? cpu_in_idle+0x20/0x20 ? _raw_spin_unlock_irqrestore+0x32/0x50 ? trace_hardirqs_on_caller+0x18c/0x280 start_secondary+0x282/0x2f0 ? set_cpu_sibling_map+0x840/0x840 secondary_startup_64+0xa5/0xb0
random: crng init done
device: '0:44': device_add
PM: Adding info for No Bus:0:44
device: 'lo': device_add
PM: Adding info for No Bus:lo
r8169 0000:03:00.0 eth0: link up
IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
bridge: filtering via arp/ip/ip6tables is no longer available by default. Update your scripts to load br_netfilter if you need this.
device: 'lxcbr0': device_add
PM: Adding info for No Bus:lxcbr0
IPv6: ADDRCONF(NETDEV_UP): lxcbr0: link is not ready
PM: Removing info for No Bus:lxcbr0
thanks,
-- Shuah
Quoted 23 lines · Shuah Khan
Quoted 15 lines · Greg Kroah-Hartman
Quoted 5 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.16.4 release. There are 196 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.
Quoted 8 lines
Responses should be made by Tue Apr 24 13:50:16 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.16.4-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.16.y
and the diffstat can be found below.Quoted 6 lines
There is a -rc3 out now, to fix some issues reported with -rc1 and -rc2 (I forgot to announce -rc2, sorry.):
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.16.4-rc3.gz
Quoted 3 lines
I just tried rc1 - will try rc3. Has the lock problem seen already: ( I will try rc3 and if I setill see the problem, will start bisect)
rc3 looks good. Compiled and booted on my test system. No dmesg regressions.
thanks,
-- Shuah
Greg Kroah-Hartman
maintainerQuoted 24 lines · Shuah Khan
Quoted 23 lines · Shuah Khan
Quoted 21 lines · Greg Kroah-Hartman
Quoted 5 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.16.4 release. There are 196 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.
Quoted 8 lines
Responses should be made by Tue Apr 24 13:50:16 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.16.4-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.16.y
and the diffstat can be found below.There is a -rc3 out now, to fix some issues reported with -rc1 and -rc2 (I forgot to announce -rc2, sorry.):
https://www.kernel.org/pub/linux/kernel/v4.x/stable-review/patch-4.16.4-rc3.gz
Quoted 5 lines
Quoted 3 lines
I just tried rc1 - will try rc3. Has the lock problem seen already: ( I will try rc3 and if I setill see the problem, will start bisect)
rc3 looks good. Compiled and booted on my test system. No dmesg regressions.
Oh good. Thanks for testing two rounds of these for all of these kernels and letting me know.
greg k-h
Quoted 9 lines · Greg Kroah-Hartman
This is the start of the stable review cycle for the 4.16.4 release. There are 196 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 Tue Apr 24 13:50:16 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.16.4-rc1.gzor in the git tree and branch at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.gitlinux-4.16.y
and the diffstat can be found below.thanks,
greg k-h
Results from Linaro’s test farm.
No regressions on arm64, arm and x86_64.
NOTE:
Few comments inline regarding the reported failures. You ignore these infrastructure failures.
LKFT: kselftest: qemu arm32: zram test causes NULL pointer deference
https://bugs.linaro.org/show_bug.cgi?id=3765
This is currently happening every time on mainline and 4.16
Summary
------------------------------------------------------------------------
kernel: 4.16.4-rc3
git repo: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable-rc.git
git branch: linux-4.16.y
git commit: bc36a03baa9f6a85680606030ddaf5c6495c030f
git describe: v4.16.3-196-gbc36a03baa9f
Test details: https://qa-reports.linaro.org/lkft/linux-stable-rc-4.16-oe/build/v4.16.3-196-gbc36a03baa9f
No regressions (compared to build v4.16.3-197-g405d1f8b04d1)
------------------------------------------------------------------------
Boards, architectures and test suites:
-------------------------------------
dragonboard-410c - arm64
* boot - pass: 20, fail: 2,
^ infrastructure issues
* kselftest - pass: 41, fail: 6, skip: 20
^ kselftest failures caused by kselftest upgrade to 4.16 (in all cases in this report)
* libhugetlbfs - pass: 89, fail: 1, skip: 1
* ltp-cap_bounds-tests - pass: 2,
* ltp-containers-tests - pass: 64, skip: 17
* ltp-fcntl-locktests-tests - pass: 2,
* ltp-filecaps-tests - pass: 2,
* ltp-fs-tests - pass: 57, skip: 6
* ltp-fs_bind-tests - pass: 2,
* ltp-fs_perms_simple-tests - pass: 19,
* ltp-fsx-tests - pass: 2,
* ltp-hugetlb-tests - pass: 21, skip: 1
* ltp-io-tests - pass: 3,
* ltp-ipc-tests - pass: 9,
* ltp-math-tests - pass: 11,
* ltp-nptl-tests - pass: 2,
* ltp-pty-tests - pass: 4,
* ltp-sched-tests - pass: 14,
* ltp-securebits-tests - pass: 4,
* ltp-syscalls-tests - pass: 1017, skip: 133
* ltp-timers-tests - pass: 13,
hi6220-hikey - arm64
* boot - pass: 20,
* kselftest - pass: 46, fail: 5, skip: 17
* libhugetlbfs - pass: 90, skip: 1
* ltp-cap_bounds-tests - pass: 2,
* ltp-containers-tests - pass: 64, skip: 17
* ltp-fcntl-locktests-tests - pass: 2,
* ltp-filecaps-tests - pass: 2,
* ltp-fs-tests - pass: 57, skip: 6
* ltp-fs_bind-tests - pass: 2,
* ltp-fs_perms_simple-tests - pass: 19,
* ltp-fsx-tests - pass: 2,
* ltp-hugetlb-tests - pass: 21, skip: 1
* ltp-io-tests - pass: 3,
* ltp-ipc-tests - pass: 9,
* ltp-math-tests - pass: 11,
* ltp-nptl-tests - pass: 2,
* ltp-pty-tests - pass: 4,
* ltp-sched-tests - pass: 10, skip: 4
* ltp-securebits-tests - pass: 4,
* ltp-syscalls-tests - pass: 1016, skip: 134
* ltp-timers-tests - pass: 13,
juno-r2 - arm64
* boot - pass: 20,
* kselftest - pass: 45, fail: 5, skip: 18
* libhugetlbfs - pass: 90, skip: 1
* ltp-cap_bounds-tests - pass: 2,
* ltp-containers-tests - pass: 64, skip: 17
* ltp-fcntl-locktests-tests - pass: 2,
* ltp-filecaps-tests - pass: 2,
* ltp-fs-tests - pass: 57, skip: 6
* ltp-fs_bind-tests - pass: 2,
* ltp-fs_perms_simple-tests - pass: 19,
* ltp-fsx-tests - pass: 2,
* ltp-hugetlb-tests - pass: 22,
* ltp-io-tests - pass: 3,
* ltp-ipc-tests - pass: 9,
* ltp-math-tests - pass: 11,
* ltp-nptl-tests - pass: 2,
* ltp-pty-tests - pass: 4,
* ltp-sched-tests - pass: 10, skip: 4
* ltp-securebits-tests - pass: 4,
* ltp-syscalls-tests - pass: 1017, skip: 133
* ltp-timers-tests - pass: 13,
qemu_arm
* boot - pass: 21, fail: 4,
^ infrastructure issues
* kselftest - pass: 75, fail: 9, skip: 52
* libhugetlbfs - pass: 1,
* ltp-cap_bounds-tests - pass: 2,
* ltp-containers-tests - pass: 62, fail: 2, skip: 17
* ltp-fcntl-locktests-tests - pass: 2,
* ltp-fs-tests - pass: 58, skip: 5
* ltp-fs_bind-tests - pass: 2,
* ltp-fs_perms_simple-tests - pass: 19,
* ltp-fsx-tests - pass: 2,
* ltp-hugetlb-tests - pass: 21, skip: 1
* ltp-io-tests - pass: 3,
* ltp-ipc-tests - pass: 9,
* ltp-nptl-tests - pass: 2,
* ltp-pty-tests - pass: 4,
* ltp-securebits-tests - pass: 4,
* ltp-timers-tests - pass: 13,
qemu_arm64
* boot - pass: 22, fail: 4,
^ infrastructure issues
* kselftest - pass: 84, fail: 6, skip: 50
* libhugetlbfs - pass: 90, skip: 1
* ltp-cap_bounds-tests - pass: 2,
* ltp-containers-tests - pass: 64, skip: 17
* ltp-fcntl-locktests-tests - pass: 2,
* ltp-filecaps-tests - pass: 2,
* ltp-fs-tests - pass: 57, skip: 6
* ltp-fs_bind-tests - pass: 2,
* ltp-fs_perms_simple-tests - pass: 19,
* ltp-fsx-tests - pass: 2,
* ltp-hugetlb-tests - pass: 22,
* ltp-io-tests - pass: 3,
* ltp-ipc-tests - pass: 9,
* ltp-nptl-tests - pass: 2,
* ltp-pty-tests - pass: 4,
* ltp-securebits-tests - pass: 4,
* ltp-timers-tests - pass: 13,
qemu_x86_64
* boot - pass: 22,
* kselftest - pass: 51, fail: 3, skip: 26
* kselftest-vsyscall-mode-native - pass: 51, fail: 3, skip: 26
* kselftest-vsyscall-mode-none - pass: 51, fail: 3, skip: 26
* libhugetlbfs - pass: 90, skip: 1
* ltp-cap_bounds-tests - pass: 2,
* ltp-containers-tests - pass: 64, skip: 17
* ltp-fcntl-locktests-tests - pass: 2,
* ltp-filecaps-tests - pass: 2,
* ltp-fs-tests - pass: 57, skip: 6
* ltp-fs_bind-tests - pass: 2,
* ltp-fs_perms_simple-tests - pass: 19,
* ltp-fsx-tests - pass: 2,
* ltp-hugetlb-tests - pass: 22,
* ltp-io-tests - pass: 3,
* ltp-ipc-tests - pass: 9,
* ltp-math-tests - pass: 11,
* ltp-nptl-tests - pass: 2,
* ltp-pty-tests - pass: 4,
* ltp-sched-tests - pass: 13, skip: 1
* ltp-securebits-tests - pass: 4,
* ltp-syscalls-tests - pass: 1003, skip: 147
* ltp-timers-tests - pass: 13,
x15 - arm
* boot - pass: 20,
* kselftest - pass: 38, fail: 6, skip: 21
* libhugetlbfs - pass: 87, skip: 1
* ltp-cap_bounds-tests - pass: 2,
* ltp-containers-tests - pass: 63, skip: 18
* ltp-fcntl-locktests-tests - pass: 2,
* ltp-filecaps-tests - pass: 2,
* ltp-fs-tests - pass: 58, skip: 5
* ltp-fs_bind-tests - pass: 2,
* ltp-fs_perms_simple-tests - pass: 19,
* ltp-fsx-tests - pass: 2,
* ltp-hugetlb-tests - pass: 20, skip: 2
* ltp-io-tests - pass: 3,
* ltp-ipc-tests - pass: 9,
* ltp-math-tests - pass: 11,
* ltp-nptl-tests - pass: 2,
* ltp-pty-tests - pass: 4,
* ltp-sched-tests - pass: 13, skip: 1
* ltp-securebits-tests - pass: 4,
* ltp-syscalls-tests - pass: 1075, skip: 75
* ltp-timers-tests - pass: 13,
x86_64
* boot - pass: 22,
* kselftest - pass: 55, fail: 5, skip: 19
* kselftest-vsyscall-mode-native - pass: 55, fail: 5, skip: 19
* kselftest-vsyscall-mode-none - pass: 56, fail: 5, skip: 19
* libhugetlbfs - pass: 89, skip: 1
* ltp-cap_bounds-tests - pass: 2,
* ltp-containers-tests - pass: 64, skip: 17
* ltp-fcntl-locktests-tests - pass: 2,
* ltp-filecaps-tests - pass: 2,
* ltp-fs-tests - pass: 58, skip: 5
* ltp-fs_bind-tests - pass: 2,
* ltp-fs_perms_simple-tests - pass: 19,
* ltp-fsx-tests - pass: 2,
* ltp-hugetlb-tests - pass: 22,
* ltp-io-tests - pass: 3,
* ltp-ipc-tests - pass: 9,
* ltp-math-tests - pass: 11,
* ltp-nptl-tests - pass: 2,
* ltp-pty-tests - pass: 4,
* ltp-sched-tests - pass: 9, skip: 5
* ltp-securebits-tests - pass: 4,
* ltp-syscalls-tests - pass: 1034, skip: 116
* ltp-timers-tests - pass: 13,
Signature · 2 lines
Linaro QA (BETA) https://qa-reports.linaro.org