Linux 4.19.172
Greg Kroah-Hartman
maintainerI'm announcing the release of the 4.19.172 kernel.
All users of the 4.19 kernel series must upgrade.
The updated 4.19.y git tree can be found at:
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-4.19.y
and can be browsed at the normal kernel.org git web browser:
https://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
thanks,
greg k-h
------------
Documentation/device-mapper/dm-integrity.txt | 7 Makefile | 2 drivers/gpio/gpio-mvebu.c | 25 - drivers/hid/wacom_sys.c | 7 drivers/hid/wacom_wac.h | 2 drivers/md/dm-integrity.c | 24 + fs/exec.c | 2 fs/ext4/inode.c | 2 fs/fs-writeback.c | 36 -- fs/xfs/xfs_trans_inode.c | 4 include/linux/compat.h | 2 include/linux/fs.h | 1 include/linux/futex.h | 40 +- include/linux/sched.h | 3 include/linux/sched/mm.h | 6 include/trace/events/writeback.h | 1 kernel/exit.c | 30 - kernel/fork.c | 40 -- kernel/futex.c | 485 ++++++++++++++++++--------- kernel/locking/rtmutex.c | 3 kernel/locking/rtmutex_common.h | 3 kernel/trace/ring_buffer.c | 4 mm/slub.c | 4 tools/build/Makefile | 4 tools/objtool/Makefile | 9 tools/perf/Makefile.perf | 4 tools/power/acpi/Makefile.config | 1 tools/scripts/Makefile.include | 10 28 files changed, 459 insertions(+), 302 deletions(-)
Baruch Siach (1):
gpio: mvebu: fix pwm .get_state period calculation
Eric Biggers (1):
fs: fix lazytime expiration handling in __writeback_single_inode()
Gaurav Kohli (1):
tracing: Fix race in trace_open and buffer resize call
Greg Kroah-Hartman (1):
Linux 4.19.172
Jan Kara (1):
writeback: Drop I_DIRTY_TIME_EXPIRE
Jason Gerecke (1):
HID: wacom: Correct NULL dereference on AES pen proximity
Jean-Philippe Brucker (1):
tools: Factor HOSTCC, HOSTLD, HOSTAR definitions
Mikulas Patocka (1):
dm integrity: conditionally disable "recalculate" feature
Thomas Gleixner (18):
futex: Move futex exit handling into futex code
futex: Replace PF_EXITPIDONE with a state
exit/exec: Seperate mm_release()
futex: Split futex_mm_release() for exit/exec
futex: Set task::futex_state to DEAD right after handling futex exit
futex: Mark the begin of futex exit explicitly
futex: Sanitize exit state handling
futex: Provide state handling for exec() as well
futex: Add mutex around futex exit
futex: Provide distinct return value when owner is exiting
futex: Prevent exit livelock
futex: Ensure the correct return value from futex_lock_pi()
futex: Replace pointless printk in fixup_owner()
futex: Provide and use pi_state_update_owner()
rtmutex: Remove unused argument from rt_mutex_proxy_unlock()
futex: Use pi_state_update_owner() in put_pi_state()
futex: Simplify fixup_pi_state_owner()
futex: Handle faults correctly for PI futexes
Wang Hai (1):
Revert "mm/slub: fix a memory leak in sysfs_slab_add()"
Greg Kroah-Hartman
maintainerDocumentation/device-mapper/dm-integrity.txt +7 -0
@@ -146,6 +146,13 @@ block_size:number Supported values are 512, 1024, 2048 and 4096 bytes. If not specified the default block size is 512 bytes. +legacy_recalculate + Allow recalculating of volumes with HMAC keys. This is disabled by + default for security reasons - an attacker could modify the volume, + set recalc_sector to zero, and the kernel would not detect the + modification. + + The journal mode (D/J), buffer_sectors, journal_watermark, commit_time can be changed when reloading the target (load an inactive table and swap the tables with suspend and resume). The other arguments should not be changed
Makefile +1 -1
@@ -1,7 +1,7 @@ # SPDX-License-Identifier: GPL-2.0 VERSION = 4 PATCHLEVEL = 19 -SUBLEVEL = 171 +SUBLEVEL = 172 EXTRAVERSION = NAME = "People's Front"
drivers/gpio/gpio-mvebu.c +10 -15
@@ -650,9 +650,8 @@ static void mvebu_pwm_get_state(struct pwm_chip *chip,spin_lock_irqsave (&mvpwm->lock, flags); - val = (unsigned long long ) -readl_relaxed (mvebu_pwmreg_blink_on_duration (mvpwm)); - val *=NSEC_PER_SEC ; + u =readl_relaxed (mvebu_pwmreg_blink_on_duration (mvpwm)); + val = (unsigned long long ) u *NSEC_PER_SEC ;do_div (val, mvpwm->clk_rate);if (val >UINT_MAX ) state->duty_cycle =UINT_MAX ;
@@ -661,21 +660,17 @@ static void mvebu_pwm_get_state(struct pwm_chip *chip,else state->duty_cycle =1 ; - val = (unsigned long long ) -readl_relaxed (mvebu_pwmreg_blink_off_duration (mvpwm)); + val = (unsigned long long ) u;/* on duration */ +/* period = on + off duration */ + val +=readl_relaxed (mvebu_pwmreg_blink_off_duration (mvpwm)); val *=NSEC_PER_SEC ;do_div (val, mvpwm->clk_rate); -if (val < state->duty_cycle) { +if (val >UINT_MAX ) + state->period =UINT_MAX ; +else if (val) + state->period = val; +else state->period =1 ; - }else { - val -= state->duty_cycle; -if (val >UINT_MAX ) - state->period =UINT_MAX ; -else if (val) - state->period = val; -else - state->period =1 ; - }regmap_read (mvchip->regs,GPIO_BLINK_EN_OFF + mvchip->offset, &u);if (u)
drivers/hid/wacom_sys.c +4 -3
@@ -150,9 +150,9 @@ static int wacom_wac_pen_serial_enforce(struct hid_device *hdev, }if (flush) -wacom_wac_queue_flush (hdev, &wacom_wac->pen_fifo); +wacom_wac_queue_flush (hdev, wacom_wac->pen_fifo);else if (insert) -wacom_wac_queue_insert (hdev, &wacom_wac->pen_fifo, +wacom_wac_queue_insert (hdev, wacom_wac->pen_fifo, raw_data, report_size);return insert && !flush;
@@ -1251,7 +1251,7 @@ static void wacom_devm_kfifo_release(struct device *dev, void *res)static int wacom_devm_kfifo_alloc (struct wacom *wacom) {struct wacom_wac *wacom_wac = &wacom->wacom_wac; -struct kfifo_rec_ptr_2 *pen_fifo = &wacom_wac->pen_fifo; +struct kfifo_rec_ptr_2 *pen_fifo;int error; pen_fifo = devres_alloc(wacom_devm_kfifo_release,
@@ -1268,6 +1268,7 @@ static int wacom_devm_kfifo_alloc(struct wacom *wacom) }devres_add (&wacom->hdev->dev, pen_fifo); + wacom_wac->pen_fifo = pen_fifo;return 0 ; }
drivers/hid/wacom_wac.h +1 -1
@@ -344,7 +344,7 @@ struct wacom_wac {struct input_dev *pen_input;struct input_dev *touch_input;struct input_dev *pad_input; -struct kfifo_rec_ptr_2 pen_fifo; +struct kfifo_rec_ptr_2 *pen_fifo;int pid;int num_contacts_left;u8 bt_features;
drivers/md/dm-integrity.c +23 -1
@@ -240,6 +240,7 @@ struct dm_integrity_c {bool journal_uptodate;bool just_formatted; +bool legacy_recalculate;struct alg_spec internal_hash_alg;struct alg_spec journal_crypt_alg;
@@ -345,6 +346,14 @@ static int dm_integrity_failed(struct dm_integrity_c *ic)return READ_ONCE (ic->failed); } +static bool dm_integrity_disable_recalculate (struct dm_integrity_c *ic) +{ +if ((ic->internal_hash_alg.key || ic->journal_mac_alg.key) && + !ic->legacy_recalculate) +return true; +return false; +} +static commit_id_t dm_integrity_commit_id (struct dm_integrity_c *ic,unsigned i,unsigned j,unsigned char seq) {
@@ -2503,6 +2512,7 @@ static void dm_integrity_status(struct dm_target *ti, status_type_t type, arg_count += !!ic->internal_hash_alg.alg_string; arg_count += !!ic->journal_crypt_alg.alg_string; arg_count += !!ic->journal_mac_alg.alg_string; + arg_count += ic->legacy_recalculate;DMEMIT ("%s %llu %u %c %u" , ic->dev->name, (unsigned long long )ic->start, ic->tag_size, ic->mode, arg_count);if (ic->meta_dev)
@@ -2516,6 +2526,8 @@ static void dm_integrity_status(struct dm_target *ti, status_type_t type,DMEMIT (" buffer_sectors:%u" ,1U << ic->log2_buffer_sectors);DMEMIT (" journal_watermark:%u" , (unsigned )watermark_percentage);DMEMIT (" commit_time:%u" , ic->autocommit_msec); +if (ic->legacy_recalculate) +DMEMIT (" legacy_recalculate" );#define EMIT_ALG (a, n) \ do { \
@@ -3118,7 +3130,7 @@ static int dm_integrity_ctr(struct dm_target *ti, unsigned argc, char **argv)unsigned extra_args;struct dm_arg_set as;static const struct dm_arg _args[] = { - {0 ,15 ,"Invalid number of feature args" }, + {0 ,12 ,"Invalid number of feature args" }, };unsigned journal_sectors, interleave_sectors, buffer_sectors, journal_watermark, sync_msec;bool recalculate;
@@ -3248,6 +3260,8 @@ static int dm_integrity_ctr(struct dm_target *ti, unsigned argc, char **argv) goto bad; }else if (!strcmp (opt_string,"recalculate" )) { recalculate = true; + }else if (!strcmp (opt_string,"legacy_recalculate" )) { + ic->legacy_recalculate = true; }else { r = -EINVAL ; ti->error ="Invalid argument" ;
@@ -3523,6 +3537,14 @@ static int dm_integrity_ctr(struct dm_target *ti, unsigned argc, char **argv) } } +if (ic->sb->flags &cpu_to_le32 (SB_FLAG_RECALCULATING ) && +le64_to_cpu (ic->sb->recalc_sector) < ic->provided_data_sectors && +dm_integrity_disable_recalculate (ic)) { + ti->error ="Recalculating with HMAC is disabled for security reasons - if you really need it, use the argument \"legacy_recalculate\"" ; + r = -EOPNOTSUPP ; + goto bad; + } + ic->bufio =dm_bufio_client_create (ic->meta_dev ? ic->meta_dev->bdev : ic->dev->bdev,1U << (SECTOR_SHIFT + ic->log2_buffer_sectors),1 ,0 ,NULL ,NULL );if (IS_ERR (ic->bufio)) {
fs/exec.c +1 -1
@@ -1011,7 +1011,7 @@ static int exec_mmap(struct mm_struct *mm)/* Notify parent that we're no longer interested in the old VM */ tsk = current; old_mm = current->mm; -mm_release (tsk, old_mm); +exec_mm_release (tsk, old_mm);if (old_mm) {sync_mm_rss (old_mm);
fs/ext4/inode.c +1 -1
@@ -5209,7 +5209,7 @@ static int other_inode_match(struct inode * inode, unsigned long ino, (inode->i_state & I_DIRTY_TIME)) {struct ext4_inode_info *ei =EXT4_I (inode); - inode->i_state &= ~(I_DIRTY_TIME |I_DIRTY_TIME_EXPIRED ); + inode->i_state &= ~I_DIRTY_TIME ;spin_unlock (&inode->i_lock);spin_lock (&ei->i_raw_lock);
fs/fs-writeback.c +16 -20
@@ -1157,7 +1157,7 @@ static bool inode_dirtied_after(struct inode *inode, unsigned long t)*/ static int move_expired_inodes (struct list_head *delaying_queue,struct list_head *dispatch_queue, -int flags,unsigned long dirtied_before) +unsigned long dirtied_before) {LIST_HEAD (tmp);struct list_head *pos, *node;
@@ -1173,8 +1173,6 @@ static int move_expired_inodes(struct list_head *delaying_queue,list_move (&inode->i_io_list, &tmp); moved++;spin_lock (&inode->i_lock); -if (flags &EXPIRE_DIRTY_ATIME ) - inode->i_state |=I_DIRTY_TIME_EXPIRED ; inode->i_state |=I_SYNC_QUEUED ;spin_unlock (&inode->i_lock);if (sb_is_blkdev_sb (inode->i_sb))
@@ -1222,11 +1220,11 @@ static void queue_io(struct bdi_writeback *wb, struct wb_writeback_work *work,assert_spin_locked (&wb->list_lock);list_splice_init (&wb->b_more_io, &wb->b_io); - moved =move_expired_inodes (&wb->b_dirty, &wb->b_io,0 , dirtied_before); + moved =move_expired_inodes (&wb->b_dirty, &wb->b_io, dirtied_before);if (!work->for_sync) time_expire_jif = jiffies - dirtytime_expire_interval *HZ ; moved +=move_expired_inodes (&wb->b_dirty_time, &wb->b_io, -EXPIRE_DIRTY_ATIME , time_expire_jif); + time_expire_jif);if (moved)wb_io_lists_populated (wb);trace_writeback_queue_io (wb, work, dirtied_before, moved);
@@ -1394,26 +1392,26 @@ __writeback_single_inode(struct inode *inode, struct writeback_control *wbc) ret = err; } +/* +* If the inode has dirty timestamps and we need to write them, call +* mark_inode_dirty_sync() to notify the filesystem about it and to +* change I_DIRTY_TIME into I_DIRTY_SYNC. +*/ +if ((inode->i_state &I_DIRTY_TIME ) && + (wbc->sync_mode ==WB_SYNC_ALL || wbc->for_sync || +time_after (jiffies, inode->dirtied_time_when + + dirtytime_expire_interval *HZ ))) { +trace_writeback_lazytime (inode); +mark_inode_dirty_sync (inode); + } +/* * Some filesystems may redirty the inode during the writeback * due to delalloc, clear dirty metadata flags right before * write_inode() */ spin_lock (&inode->i_lock); - dirty = inode->i_state &I_DIRTY ; -if (inode->i_state &I_DIRTY_TIME ) { -if ((dirty &I_DIRTY_INODE ) || - wbc->sync_mode ==WB_SYNC_ALL || -unlikely (inode->i_state &I_DIRTY_TIME_EXPIRED ) || -unlikely (time_after (jiffies, - (inode->dirtied_time_when + - dirtytime_expire_interval *HZ )))) { - dirty |=I_DIRTY_TIME |I_DIRTY_TIME_EXPIRED ; -trace_writeback_lazytime (inode); - } - }else - inode->i_state &= ~I_DIRTY_TIME_EXPIRED ; inode->i_state &= ~dirty;/*
@@ -1434,8 +1432,6 @@ __writeback_single_inode(struct inode *inode, struct writeback_control *wbc)spin_unlock (&inode->i_lock); -if (dirty &I_DIRTY_TIME ) -mark_inode_dirty_sync (inode);/* Don't write the inode if only I_DIRTY_PAGES was set */ if (dirty & ~I_DIRTY_PAGES ) {int err =write_inode (inode, wbc);
fs/xfs/xfs_trans_inode.c +2 -2
@@ -99,9 +99,9 @@ xfs_trans_log_inode(* to log the timestamps, or will clear already cleared fields in the * worst case. */ -if (inode->i_state & (I_DIRTY_TIME |I_DIRTY_TIME_EXPIRED )) { +if (inode->i_state &I_DIRTY_TIME ) {spin_lock (&inode->i_lock); - inode->i_state &= ~(I_DIRTY_TIME |I_DIRTY_TIME_EXPIRED ); + inode->i_state &= ~I_DIRTY_TIME ;spin_unlock (&inode->i_lock); }
include/linux/compat.h +0 -2
@@ -445,8 +445,6 @@ struct compat_kexec_segment;struct compat_mq_attr ;struct compat_msgbuf ; -extern void compat_exit_robust_list (struct task_struct *curr); -#define BITS_PER_COMPAT_LONG (8*sizeof(compat_long_t))#define BITS_TO_COMPAT_LONGS (bits) DIV_ROUND_UP(bits, BITS_PER_COMPAT_LONG)
include/linux/fs.h +0 -1
@@ -2071,7 +2071,6 @@ static inline void init_sync_kiocb(struct kiocb *kiocb, struct file *filp)#define I_DIO_WAKEUP (1 << __I_DIO_WAKEUP)#define I_LINKABLE (1 << 10)#define I_DIRTY_TIME (1 << 11) -#define I_DIRTY_TIME_EXPIRED (1 << 12)#define I_WB_SWITCH (1 << 13)#define I_OVL_INUSE (1 << 14)#define I_CREATING (1 << 15)
include/linux/futex.h +27 -13
@@ -2,7 +2,9 @@#ifndef _LINUX_FUTEX_H#define _LINUX_FUTEX_H +#include <linux/sched.h> #include <linux/ktime.h> +#include <uapi/linux/futex.h> struct inode ;
@@ -51,15 +53,35 @@ union futex_key {#define FUTEX_KEY_INIT (union futex_key) { .both = { .ptr = 0ULL } }#ifdef CONFIG_FUTEX -extern void exit_robust_list (struct task_struct *curr); +enum { +FUTEX_STATE_OK , +FUTEX_STATE_EXITING , +FUTEX_STATE_DEAD , +}; -long do_futex (u32 __user *uaddr,int op,u32 val,ktime_t *timeout, -u32 __user *uaddr2,u32 val2,u32 val3); -#else -static inline void exit_robust_list (struct task_struct *curr) +static inline void futex_init_task (struct task_struct *tsk) { + tsk->robust_list =NULL ; +#ifdef CONFIG_COMPAT + tsk->compat_robust_list =NULL ; +#endif +INIT_LIST_HEAD (&tsk->pi_state_list); + tsk->pi_state_cache =NULL ; + tsk->futex_state =FUTEX_STATE_OK ; +mutex_init (&tsk->futex_exit_mutex); } +void futex_exit_recursive (struct task_struct *tsk); +void futex_exit_release (struct task_struct *tsk); +void futex_exec_release (struct task_struct *tsk); + +long do_futex (u32 __user *uaddr,int op,u32 val,ktime_t *timeout, +u32 __user *uaddr2,u32 val2,u32 val3); +#else +static inline void futex_init_task (struct task_struct *tsk) { } +static inline void futex_exit_recursive (struct task_struct *tsk) { } +static inline void futex_exit_release (struct task_struct *tsk) { } +static inline void futex_exec_release (struct task_struct *tsk) { }static inline long do_futex (u32 __user *uaddr,int op,u32 val,ktime_t *timeout,u32 __user *uaddr2,u32 val2,u32 val3)
@@ -68,12 +90,4 @@ static inline long do_futex(u32 __user *uaddr, int op, u32 val, }#endif -#ifdef CONFIG_FUTEX_PI -extern void exit_pi_state_list (struct task_struct *curr); -#else -static inline void exit_pi_state_list (struct task_struct *curr) -{ -} -#endif -#endif
include/linux/sched.h +2 -1
@@ -996,6 +996,8 @@ struct task_struct {#endif struct list_head pi_state_list;struct futex_pi_state *pi_state_cache; +struct mutex futex_exit_mutex; +unsigned int futex_state;#endif #ifdef CONFIG_PERF_EVENTS struct perf_event_context *perf_event_ctxp[perf_nr_task_contexts];
@@ -1377,7 +1379,6 @@ extern struct pid *cad_pid;*/ #define PF_IDLE 0x00000002/* I am an IDLE thread */ #define PF_EXITING 0x00000004/* Getting shut down */ -#define PF_EXITPIDONE 0x00000008/* PI exit done on shut down */ #define PF_VCPU 0x00000010/* I'm a virtual CPU */ #define PF_WQ_WORKER 0x00000020/* I'm a workqueue worker */ #define PF_FORKNOEXEC 0x00000040/* Forked but didn't exec */
include/linux/sched/mm.h +4 -2
@@ -119,8 +119,10 @@ extern struct mm_struct *get_task_mm(struct task_struct *task);* succeeds. */ extern struct mm_struct *mm_access (struct task_struct *task,unsigned int mode); -/* Remove the current tasks stale references to the old mm_struct */ -extern void mm_release (struct task_struct *,struct mm_struct *); +/* Remove the current tasks stale references to the old mm_struct on exit() */ +extern void exit_mm_release (struct task_struct *,struct mm_struct *); +/* Remove the current tasks stale references to the old mm_struct on exec() */ +extern void exec_mm_release (struct task_struct *,struct mm_struct *);#ifdef CONFIG_MEMCG extern void mm_update_next_owner (struct mm_struct *mm);
include/trace/events/writeback.h +0 -1
@@ -20,7 +20,6 @@ {I_CLEAR, "I_CLEAR"}, \ {I_SYNC, "I_SYNC"}, \ {I_DIRTY_TIME, "I_DIRTY_TIME"}, \ - {I_DIRTY_TIME_EXPIRED, "I_DIRTY_TIME_EXPIRED"}, \ {I_REFERENCED, "I_REFERENCED"} \ )
kernel/exit.c +2 -28
@@ -498,7 +498,7 @@ static void exit_mm(void)struct mm_struct *mm = current->mm;struct core_state *core_state; -mm_release (current, mm); +exit_mm_release (current, mm);if (!mm)return ;sync_mm_rss (mm);
@@ -818,32 +818,12 @@ void __noreturn do_exit(long code)*/ if (unlikely (tsk->flags &PF_EXITING )) {pr_alert ("Fixing recursive fault but reboot is needed!\n" ); -/* -* We can do this unlocked here. The futex code uses -* this flag just to verify whether the pi state -* cleanup has been done or not. In the worst case it -* loops once more. We pretend that the cleanup was -* done as there is no way to return. Either the -* OWNER_DIED bit is set by now or we push the blocked -* task into the wait for ever nirwana as well. -*/ - tsk->flags |=PF_EXITPIDONE ; +futex_exit_recursive (tsk);set_current_state (TASK_UNINTERRUPTIBLE );schedule (); }exit_signals (tsk);/* sets PF_EXITING */ -/* -* Ensure that all new tsk->pi_lock acquisitions must observe -* PF_EXITING. Serializes against futex.c:attach_to_pi_owner(). -*/ -smp_mb (); -/* -* Ensure that we must observe the pi_state in exit_mm() -> -* mm_release() -> exit_pi_state_list(). -*/ -raw_spin_lock_irq (&tsk->pi_lock); -raw_spin_unlock_irq (&tsk->pi_lock);/* sync mm's RSS info before statistics gathering */ if (tsk->mm)
@@ -918,12 +898,6 @@ void __noreturn do_exit(long code)* Make sure we are holding no locks: */ debug_check_no_locks_held (); -/* -* We can do this unlocked here. The futex code uses this flag -* just to verify whether the pi state cleanup has been done -* or not. In the worst case it loops once more. -*/ - tsk->flags |=PF_EXITPIDONE ;if (tsk->io_context)exit_io_context (tsk);
kernel/fork.c +15 -25
@@ -1217,24 +1217,8 @@ static int wait_for_vfork_done(struct task_struct *child,* restoring the old one. . . * Eric Biederman 10 January 1998 */ -void mm_release (struct task_struct *tsk,struct mm_struct *mm) +static void mm_release (struct task_struct *tsk,struct mm_struct *mm) { -/* Get rid of any futexes when releasing the mm */ -#ifdef CONFIG_FUTEX -if (unlikely (tsk->robust_list)) { -exit_robust_list (tsk); - tsk->robust_list =NULL ; - } -#ifdef CONFIG_COMPAT -if (unlikely (tsk->compat_robust_list)) { -compat_exit_robust_list (tsk); - tsk->compat_robust_list =NULL ; - } -#endif -if (unlikely (!list_empty (&tsk->pi_state_list))) -exit_pi_state_list (tsk); -#endif -uprobe_free_utask (tsk);/* Get rid of any cached register state */
@@ -1267,6 +1251,18 @@ void mm_release(struct task_struct *tsk, struct mm_struct *mm)complete_vfork_done (tsk); } +void exit_mm_release (struct task_struct *tsk,struct mm_struct *mm) +{ +futex_exit_release (tsk); +mm_release (tsk, mm); +} + +void exec_mm_release (struct task_struct *tsk,struct mm_struct *mm) +{ +futex_exec_release (tsk); +mm_release (tsk, mm); +} +/* * Allocate a new mm structure and copy contents from the * mm structure of the passed in task structure.
@@ -1937,14 +1933,8 @@ static __latent_entropy struct task_struct *copy_process(#ifdef CONFIG_BLOCK p->plug =NULL ;#endif -#ifdef CONFIG_FUTEX - p->robust_list =NULL ; -#ifdef CONFIG_COMPAT - p->compat_robust_list =NULL ; -#endif -INIT_LIST_HEAD (&p->pi_state_list); - p->pi_state_cache =NULL ; -#endif +futex_init_task (p); +/* * sigaltstack should be cleared when sharing the same VM */
kernel/futex.c +326 -159
815 lines not on this page · raw message
kernel/locking/rtmutex.c +1 -2
@@ -1719,8 +1719,7 @@ void rt_mutex_init_proxy_locked(struct rt_mutex *lock,* possible because it belongs to the pi_state which is about to be freed * and it is not longer visible to other tasks. */ -void rt_mutex_proxy_unlock (struct rt_mutex *lock, -struct task_struct *proxy_owner) +void rt_mutex_proxy_unlock (struct rt_mutex *lock) {debug_rt_mutex_proxy_unlock (lock);rt_mutex_set_owner (lock,NULL );
kernel/locking/rtmutex_common.h +1 -2
@@ -133,8 +133,7 @@ enum rtmutex_chainwalk {extern struct task_struct *rt_mutex_next_owner (struct rt_mutex *lock);extern void rt_mutex_init_proxy_locked (struct rt_mutex *lock,struct task_struct *proxy_owner); -extern void rt_mutex_proxy_unlock (struct rt_mutex *lock, -struct task_struct *proxy_owner); +extern void rt_mutex_proxy_unlock (struct rt_mutex *lock);extern void rt_mutex_init_waiter (struct rt_mutex_waiter *waiter); extern int __rt_mutex_start_proxy_lock(struct rt_mutex *lock, struct rt_mutex_waiter *waiter,
kernel/trace/ring_buffer.c +4 -0
@@ -4393,6 +4393,8 @@ void ring_buffer_reset_cpu(struct ring_buffer *buffer, int cpu)if (!cpumask_test_cpu (cpu, buffer->cpumask))return ; +/* prevent another thread from changing buffer sizes */ +mutex_lock (&buffer->mutex);atomic_inc (&buffer->resize_disabled);atomic_inc (&cpu_buffer->record_disabled);
@@ -4416,6 +4418,8 @@ void ring_buffer_reset_cpu(struct ring_buffer *buffer, int cpu)atomic_dec (&cpu_buffer->record_disabled);atomic_dec (&buffer->resize_disabled); + +mutex_unlock (&buffer->mutex); }EXPORT_SYMBOL_GPL (ring_buffer_reset_cpu);
mm/slub.c +1 -3
@@ -5766,10 +5766,8 @@ static int sysfs_slab_add(struct kmem_cache *s) s->kobj.kset = kset; err =kobject_init_and_add (&s->kobj, &slab_ktype,NULL ,"%s" , name); -if (err) { -kobject_put (&s->kobj); +if (err) goto out; - } err =sysfs_create_group (&s->kobj, &slab_attr_group);if (err)
tools/build/Makefile +0 -4
@@ -15,10 +15,6 @@ endef $(call allow-override,CC,$(CROSS_COMPILE)gcc) $(call allow-override,LD,$(CROSS_COMPILE)ld) -HOSTCC ?= gcc -HOSTLD ?= ld -HOSTAR ?= ar - export HOSTCC HOSTLD HOSTAR ifeq ($(V),1)
tools/objtool/Makefile +0 -9
@@ -7,15 +7,6 @@ ARCH := x86 endif # always use the host compiler -ifneq ($(LLVM),) -HOSTAR ?= llvm-ar -HOSTCC ?= clang -HOSTLD ?= ld.lld -else -HOSTAR ?= ar -HOSTCC ?= gcc -HOSTLD ?= ld -endif AR = $(HOSTAR) CC = $(HOSTCC) LD = $(HOSTLD)
tools/perf/Makefile.perf +0 -4
@@ -148,10 +148,6 @@ endef LD += $(EXTRA_LDFLAGS) -HOSTCC ?= gcc -HOSTLD ?= ld -HOSTAR ?= ar - PKG_CONFIG = $(CROSS_COMPILE)pkg-config LLVM_CONFIG ?= llvm-config
tools/power/acpi/Makefile.config +0 -1
@@ -57,7 +57,6 @@ INSTALL_SCRIPT = ${INSTALL_PROGRAM} CROSS = #/usr/i386-linux-uclibc/usr/bin/i386-uclibc- CROSS_COMPILE ?= $(CROSS) LD = $(CC) -HOSTCC = gcc # check if compiler option is supported cc-supports = ${shell if $(CC) ${1} -S -o /dev/null -x c /dev/null > /dev/null 2>&1; then echo "$(1)"; fi;}
tools/scripts/Makefile.include +10 -0
@@ -60,6 +60,16 @@ $(call allow-override,LD,$(CROSS_COMPILE)ld) $(call allow-override,CXX,$(CROSS_COMPILE)g++) $(call allow-override,STRIP,$(CROSS_COMPILE)strip) +ifneq ($(LLVM),) +HOSTAR ?= llvm-ar +HOSTCC ?= clang +HOSTLD ?= ld.lld +else +HOSTAR ?= ar +HOSTCC ?= gcc +HOSTLD ?= ld +endif + ifeq ($(CC_NO_CLANG), 1) EXTRA_WARNINGS += -Wstrict-aliasing=3 endif