{"push_id":800385438,"size":1000,"distinct_size":39875,"ref":"refs/heads/master","head":"da6c038ea785aa57880eae4e9cf12d80572d8d6f","before":"90a5a895cc8b284ac522757a01de15e36710c2b9","commits":[{"sha":"7f27ec978b0ef37391262bbf15c587fd8526e268","author":{"email":"04eb0bb443ccb322d12a8901457bb8aebb2cb962@huawei.com","name":"yangwenfang"},"message":"ocfs2: call ocfs2_journal_access_di() before ocfs2_journal_dirty() in ocfs2_write_end_nolock()\n\n1: After we call ocfs2_journal_access_di() in ocfs2_write_begin(),\n   jbd2_journal_restart() may also be called, in this function transaction\n   A's t_updates-- and obtains a new transaction B.  If\n   jbd2_journal_commit_transaction() is happened to commit transaction A,\n   when t_updates==0, it will continue to complete commit and unfile\n   buffer.\n\n   So when jbd2_journal_dirty_metadata(), the handle is pointed a new\n   transaction B, and the buffer head's journal head is already freed,\n   jh->b_transaction == NULL, jh->b_next_transaction == NULL, it returns\n   EINVAL, So it triggers the BUG_ON(status).\n\nthread 1                                          jbd2\nocfs2_write_begin                     jbd2_journal_commit_transaction\nocfs2_write_begin_nolock\n  ocfs2_start_trans\n    jbd2__journal_start(t_updates+1,\n                       transaction A)\n    ocfs2_journal_access_di\n    ocfs2_write_cluster_by_desc\n      ocfs2_mark_extent_written\n        ocfs2_change_extent_flag\n          ocfs2_split_extent\n            ocfs2_extend_rotate_transaction\n              jbd2_journal_restart\n              (t_updates-1,transaction B) t_updates==0\n                                        __jbd2_journal_refile_buffer\n                                        (jh->b_transaction = NULL)\nocfs2_write_end\nocfs2_write_end_nolock\n    ocfs2_journal_dirty\n        jbd2_journal_dirty_metadata(bug)\n   ocfs2_commit_trans\n\n2.  In ext4, I found that: jbd2_journal_get_write_access() called by\n   ext4_write_end.\n\next4_write_begin\n    ext4_journal_start\n        __ext4_journal_start_sb\n            ext4_journal_check_start\n            jbd2__journal_start\n\next4_write_end\n    ext4_mark_inode_dirty\n        ext4_reserve_inode_write\n            ext4_journal_get_write_access\n                jbd2_journal_get_write_access\n        ext4_mark_iloc_dirty\n            ext4_do_update_inode\n                ext4_handle_dirty_metadata\n                    jbd2_journal_dirty_metadata\n\n3. So I think we should put ocfs2_journal_access_di before\n   ocfs2_journal_dirty in the ocfs2_write_end.  and it works well after my\n   modification.\n\nSigned-off-by: vicky <vicky.yangwenfang@huawei.com>\nReviewed-by: Mark Fasheh <mfasheh@suse.de>\nCc: Joel Becker <jlbec@evilplan.org>\nCc: Zhangguanghui <zhang.guanghui@h3c.com>\nSigned-off-by: Andrew Morton <akpm@linux-foundation.org>\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>","distinct":true,"url":"https://api.github.com/repos/wyqwxj/linux/commits/7f27ec978b0ef37391262bbf15c587fd8526e268"},{"sha":"d0c97d52f5e1de125394d748be7bd5763fd9ed9e","author":{"email":"e513a8cfffdd1761b5c8047b6b6cbe23f11326f2@huawei.com","name":"Xue jiufei"},"message":"ocfs2: do not set fs read-only if rec[0] is empty while committing truncate\n\nWhile appending an extent to a file, it will call these functions:\nocfs2_insert_extent\n\n  -> call ocfs2_grow_tree() if there's no free rec\n     -> ocfs2_add_branch add a new branch to extent tree,\n        now rec[0] in the leaf of rightmost path is empty\n  -> ocfs2_do_insert_extent\n     -> ocfs2_rotate_tree_right\n       -> ocfs2_extend_rotate_transaction\n          -> jbd2_journal_restart if jbd2_journal_extend fail\n     -> ocfs2_insert_path\n        -> ocfs2_extend_trans\n          -> jbd2_journal_restart if jbd2_journal_extend fail\n        -> ocfs2_insert_at_leaf\n     -> ocfs2_et_update_clusters\nFunction jbd2_journal_restart() may be called and it may happened that\nbuffers dirtied in ocfs2_add_branch() are committed\nwhile buffers dirtied in ocfs2_insert_at_leaf() and\nocfs2_et_update_clusters() are not.\nSo an empty rec[0] is left in rightmost path which will cause\nread-only filesystem when call ocfs2_commit_truncate()\nwith the error message: \"Inode %lu has an empty extent record\".\n\nThis is not a serious problem, so remove the rightmost path when call\nocfs2_commit_truncate().\n\nSigned-off-by: joyce.xue <xuejiufei@huawei.com>\nReviewed-by: Mark Fasheh <mfasheh@suse.de>\nCc: Joel Becker <jlbec@evilplan.org>\nSigned-off-by: Andrew Morton <akpm@linux-foundation.org>\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>","distinct":true,"url":"https://api.github.com/repos/wyqwxj/linux/commits/d0c97d52f5e1de125394d748be7bd5763fd9ed9e"},{"sha":"7ecef14ab1db961545354fa443749aeda2ea1b75","author":{"email":"16a9a54ddf4259952e3c118c763138e83693d7fd@perches.com","name":"Joe Perches"},"message":"ocfs2: neaten do_error, ocfs2_error and ocfs2_abort\n\nThese uses sometimes do and sometimes don't have '\\n' terminations.  Make\nthe uses consistently use '\\n' terminations and remove the newline from\nthe functions.\n\nMiscellanea:\n\no Coalesce formats\no Realign arguments\n\nSigned-off-by: Joe Perches <joe@perches.com>\nReviewed-by: Mark Fasheh <mfasheh@suse.de>\nCc: Joel Becker <jlbec@evilplan.org>\nSigned-off-by: Andrew Morton <akpm@linux-foundation.org>\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>","distinct":true,"url":"https://api.github.com/repos/wyqwxj/linux/commits/7ecef14ab1db961545354fa443749aeda2ea1b75"},{"sha":"46359295a352e01a5a017297c70b7ee0c5da6de6","author":{"email":"88260f35dd98758635dbbf2145383e817a86f01c@huawei.com","name":"Joseph Qi"},"message":"ocfs2: clean up redundant NULL checks before kfree\n\nNULL check before kfree is redundant and so clean them up.\n\nSigned-off-by: Joseph Qi <joseph.qi@huawei.com>\nReviewed-by: Mark Fasheh <mfasheh@suse.de>\nSigned-off-by: Andrew Morton <akpm@linux-foundation.org>\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>","distinct":true,"url":"https://api.github.com/repos/wyqwxj/linux/commits/46359295a352e01a5a017297c70b7ee0c5da6de6"},{"sha":"a068acf2ee77693e0bf39d6e07139ba704f461c3","author":{"email":"50cb10d2be062154b17ab4d66a4eab34f1cf1c84@chromium.org","name":"Kees Cook"},"message":"fs: create and use seq_show_option for escaping\n\nMany file systems that implement the show_options hook fail to correctly\nescape their output which could lead to unescaped characters (e.g.  new\nlines) leaking into /proc/mounts and /proc/[pid]/mountinfo files.  This\ncould lead to confusion, spoofed entries (resulting in things like\nsystemd issuing false d-bus \"mount\" notifications), and who knows what\nelse.  This looks like it would only be the root user stepping on\nthemselves, but it's possible weird things could happen in containers or\nin other situations with delegated mount privileges.\n\nHere's an example using overlay with setuid fusermount trusting the\ncontents of /proc/mounts (via the /etc/mtab symlink).  Imagine the use\nof \"sudo\" is something more sneaky:\n\n  $ BASE=\"ovl\"\n  $ MNT=\"$BASE/mnt\"\n  $ LOW=\"$BASE/lower\"\n  $ UP=\"$BASE/upper\"\n  $ WORK=\"$BASE/work/ 0 0\n  none /proc fuse.pwn user_id=1000\"\n  $ mkdir -p \"$LOW\" \"$UP\" \"$WORK\"\n  $ sudo mount -t overlay -o \"lowerdir=$LOW,upperdir=$UP,workdir=$WORK\" none /mnt\n  $ cat /proc/mounts\n  none /root/ovl/mnt overlay rw,relatime,lowerdir=ovl/lower,upperdir=ovl/upper,workdir=ovl/work/ 0 0\n  none /proc fuse.pwn user_id=1000 0 0\n  $ fusermount -u /proc\n  $ cat /proc/mounts\n  cat: /proc/mounts: No such file or directory\n\nThis fixes the problem by adding new seq_show_option and\nseq_show_option_n helpers, and updating the vulnerable show_option\nhandlers to use them as needed.  Some, like SELinux, need to be open\ncoded due to unusual existing escape mechanisms.\n\n[akpm@linux-foundation.org: add lost chunk, per Kees]\n[keescook@chromium.org: seq_show_option should be using const parameters]\nSigned-off-by: Kees Cook <keescook@chromium.org>\nAcked-by: Serge Hallyn <serge.hallyn@canonical.com>\nAcked-by: Jan Kara <jack@suse.com>\nAcked-by: Paul Moore <paul@paul-moore.com>\nCc: J. R. Okajima <hooanon05g@gmail.com>\nSigned-off-by: Kees Cook <keescook@chromium.org>\nCc: <stable@vger.kernel.org>\nSigned-off-by: Andrew Morton <akpm@linux-foundation.org>\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>","distinct":true,"url":"https://api.github.com/repos/wyqwxj/linux/commits/a068acf2ee77693e0bf39d6e07139ba704f461c3"},{"sha":"5869b5064b0950afc447610c0f5d4134b71d9e94","author":{"email":"e8a1bf9163cb25e93cfd6540f223b3872ea7ee55@gmail.com","name":"Frederic Weisbecker"},"message":"smpboot: fix memory leak on error handling\n\nThe cpumask is allocated before threads get created. If the latter step\nfails, we need to free the cpumask.\n\nSigned-off-by: Frederic Weisbecker <fweisbec@gmail.com>\nReviewed-by: Chris Metcalf <cmetcalf@ezchip.com>\nReviewed-by: Thomas Gleixner <tglx@linutronix.de>\nCc: Chris Metcalf <cmetcalf@ezchip.com>\nCc: Don Zickus <dzickus@redhat.com>\nCc: Peter Zijlstra <peterz@infradead.org>\nCc: Ulrich Obergfell <uobergfe@redhat.com>\nSigned-off-by: Andrew Morton <akpm@linux-foundation.org>\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>","distinct":true,"url":"https://api.github.com/repos/wyqwxj/linux/commits/5869b5064b0950afc447610c0f5d4134b71d9e94"},{"sha":"3dd08c0c918f9bf058572ddbf26e7d6fb5674a5c","author":{"email":"e8a1bf9163cb25e93cfd6540f223b3872ea7ee55@gmail.com","name":"Frederic Weisbecker"},"message":"smpboot: make cleanup to mirror setup\n\nThe per-cpu kthread cleanup() callback is the mirror of the setup()\ncallback.  When the per-cpu kthread is started, it first calls setup()\nto initialize the resources which are then released by cleanup() when\nthe kthread exits.\n\nNow since the introduction of a per-cpu kthread cpumask, the kthreads\nexcluded by the cpumask on boot may happen to be parked immediately\nafter their creation without taking the setup() stage, waiting to be\nasked to unpark to do so.  Then when smpboot_unregister_percpu_thread()\nis later called, the kthread is stopped without having ever called\nsetup().\n\nBut this triggers a bug as the kthread unconditionally calls cleanup()\non exit but this doesn't mirror any setup().  Thus the kernel crashes\nbecause we try to free resources that haven't been initialized, as in\nthe watchdog case:\n\n    WATCHDOG disable 0\n    WATCHDOG disable 1\n    WATCHDOG disable 2\n    BUG: unable to handle kernel NULL pointer dereference at           (null)\n    IP: hrtimer_active+0x26/0x60\n    [...]\n    Call Trace:\n      hrtimer_try_to_cancel+0x1c/0x280\n      hrtimer_cancel+0x1d/0x30\n      watchdog_disable+0x56/0x70\n      watchdog_cleanup+0xe/0x10\n      smpboot_thread_fn+0x23c/0x2c0\n      kthread+0xf8/0x110\n      ret_from_fork+0x3f/0x70\n\nThis bug is currently masked with explicit kthread unparking before\nkthread_stop() on smpboot_destroy_threads(). This forces a call to\nsetup() and then unpark().\n\nWe could fix this by unconditionally calling setup() on kthread entry.\nBut setup() isn't always cheap.  In the case of watchdog it launches\nhrtimer, perf events, etc...  So we may as well like to skip it if there\nare chances the kthread will never be used, as in a reduced cpumask value.\n\nSo let's simply do a state machine check before calling cleanup() that\nmakes sure setup() has been called before mirroring it.\n\nAnd remove the nasty hack workaround.\n\nSigned-off-by: Frederic Weisbecker <fweisbec@gmail.com>\nReviewed-by: Chris Metcalf <cmetcalf@ezchip.com>\nReviewed-by: Thomas Gleixner <tglx@linutronix.de>\nCc: Chris Metcalf <cmetcalf@ezchip.com>\nCc: Don Zickus <dzickus@redhat.com>\nCc: Peter Zijlstra <peterz@infradead.org>\nCc: Ulrich Obergfell <uobergfe@redhat.com>\nSigned-off-by: Andrew Morton <akpm@linux-foundation.org>\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>","distinct":true,"url":"https://api.github.com/repos/wyqwxj/linux/commits/3dd08c0c918f9bf058572ddbf26e7d6fb5674a5c"},{"sha":"230ec93909f00678401cb2d63b8b95f1dea68e40","author":{"email":"e8a1bf9163cb25e93cfd6540f223b3872ea7ee55@gmail.com","name":"Frederic Weisbecker"},"message":"smpboot: allow passing the cpumask on per-cpu thread registration\n\nIt makes the registration cheaper and simpler for the smpboot per-cpu\nkthread users that don't need to always update the cpumask after threads\ncreation.\n\n[sfr@canb.auug.org.au: fix for allow passing the cpumask on per-cpu thread registration]\nSigned-off-by: Frederic Weisbecker <fweisbec@gmail.com>\nReviewed-by: Chris Metcalf <cmetcalf@ezchip.com>\nReviewed-by: Thomas Gleixner <tglx@linutronix.de>\nCc: Chris Metcalf <cmetcalf@ezchip.com>\nCc: Don Zickus <dzickus@redhat.com>\nCc: Peter Zijlstra <peterz@infradead.org>\nCc: Ulrich Obergfell <uobergfe@redhat.com>\nSigned-off-by: Stephen Rothwell <sfr@canb.auug.org.au>\nSigned-off-by: Andrew Morton <akpm@linux-foundation.org>\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>","distinct":true,"url":"https://api.github.com/repos/wyqwxj/linux/commits/230ec93909f00678401cb2d63b8b95f1dea68e40"},{"sha":"314b08ff5205420d956d14657e16d92c460a6f21","author":{"email":"e8a1bf9163cb25e93cfd6540f223b3872ea7ee55@gmail.com","name":"Frederic Weisbecker"},"message":"watchdog: simplify housekeeping affinity with the appropriate mask\n\nhousekeeping_mask gathers all the CPUs that aren't part of the nohz_full\nset.  This is exactly what we want the watchdog to be affine to without\nthe need to use complicated cpumask operations.\n\nSigned-off-by: Frederic Weisbecker <fweisbec@gmail.com>\nReviewed-by: Chris Metcalf <cmetcalf@ezchip.com>\nCc: Thomas Gleixner <tglx@linutronix.de>\nCc: Chris Metcalf <cmetcalf@ezchip.com>\nCc: Don Zickus <dzickus@redhat.com>\nCc: Peter Zijlstra <peterz@infradead.org>\nCc: Ulrich Obergfell <uobergfe@redhat.com>\nSigned-off-by: Andrew Morton <akpm@linux-foundation.org>\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>","distinct":true,"url":"https://api.github.com/repos/wyqwxj/linux/commits/314b08ff5205420d956d14657e16d92c460a6f21"},{"sha":"aacfbe6a9724bb6d66a656a5abcc681d5649ed92","author":{"email":"ba324ca7b1c77fc20bb970d5aff6eea9377918a5@roeck-us.net","name":"Guenter Roeck"},"message":"kernel/watchdog: move NMI function header declarations from watchdog.h to nmi.h\n\nThe kernel's NMI watchdog has nothing to do with the watchdog subsystem.\nIts header declarations should be in linux/nmi.h, not linux/watchdog.h.\n\nThe code provided two sets of dummy functions if HARDLOCKUP_DETECTOR is\nnot configured, one in the include file and one in kernel/watchdog.c.\nRemove the dummy functions from kernel/watchdog.c and use those from the\ninclude file.\n\nSigned-off-by: Guenter Roeck <linux@roeck-us.net>\nCc: Stephane Eranian <eranian@google.com>\nCc: Peter Zijlstra (Intel) <peterz@infradead.org>\nCc: Ingo Molnar <mingo@kernel.org>\nCc: Don Zickus <dzickus@redhat.com>\nSigned-off-by: Andrew Morton <akpm@linux-foundation.org>\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>","distinct":true,"url":"https://api.github.com/repos/wyqwxj/linux/commits/aacfbe6a9724bb6d66a656a5abcc681d5649ed92"},{"sha":"81a4beef91ba4a9e8ad6054ca9933dff7e25ff28","author":{"email":"2f076acc3232878642c0aa405d54beec6cc1a760@redhat.com","name":"Ulrich Obergfell"},"message":"watchdog: introduce watchdog_park_threads() and watchdog_unpark_threads()\n\nOriginally watchdog_nmi_enable(cpu) and watchdog_nmi_disable(cpu) were\nonly called in watchdog thread context.  However, the following commits\nutilize these functions outside of watchdog thread context too.\n\n  commit 9809b18fcf6b8d8ec4d3643677345907e6b50eca\n  Author: Michal Hocko <mhocko@suse.cz>\n  Date:   Tue Sep 24 15:27:30 2013 -0700\n\n      watchdog: update watchdog_thresh properly\n\n  commit b3738d29323344da3017a91010530cf3a58590fc\n  Author: Stephane Eranian <eranian@google.com>\n  Date:   Mon Nov 17 20:07:03 2014 +0100\n\n      watchdog: Add watchdog enable/disable all functions\n\nHence, it is now possible that these functions execute concurrently with\nthe same 'cpu' argument.  This concurrency is problematic because per-cpu\n'watchdog_ev' can be accessed/modified without adequate synchronization.\n\nThe patch series aims to address the above problem.  However, instead of\nintroducing locks to protect per-cpu 'watchdog_ev' a different approach is\ntaken: Invoke these functions by parking and unparking the watchdog\nthreads (to ensure they are always called in watchdog thread context).\n\n  static struct smp_hotplug_thread watchdog_threads = {\n           ...\n          .park   = watchdog_disable, // calls watchdog_nmi_disable()\n          .unpark = watchdog_enable,  // calls watchdog_nmi_enable()\n  };\n\nBoth previously mentioned commits call these functions in a similar way\nand thus in principle contain some duplicate code.  The patch series also\navoids this duplication by providing a commonly usable mechanism.\n\n- Patch 1/4 introduces the watchdog_{park|unpark}_threads functions that\n  park/unpark all watchdog threads specified in 'watchdog_cpumask'. They\n  are intended to be called inside of kernel/watchdog.c only.\n\n- Patch 2/4 introduces the watchdog_{suspend|resume} functions which can\n  be utilized by external callers to deactivate the hard and soft lockup\n  detector temporarily.\n\n- Patch 3/4 utilizes watchdog_{park|unpark}_threads to replace some code\n  that was introduced by commit 9809b18fcf6b8d8ec4d3643677345907e6b50eca.\n\n- Patch 4/4 utilizes watchdog_{suspend|resume} to replace some code that\n  was introduced by commit b3738d29323344da3017a91010530cf3a58590fc.\n\nA few corner cases should be mentioned here for completeness.\n\n- kthread_park() of watchdog/N could hang if cpu N is already locked up.\n  However, if watchdog is enabled the lockup will be detected anyway.\n\n- kthread_unpark() of watchdog/N could hang if cpu N got locked up after\n  kthread_park(). The occurrence of this scenario should be _very_ rare\n  in practice, in particular because it is not expected that temporary\n  deactivation will happen frequently, and if it happens at all it is\n  expected that the duration of deactivation will be short.\n\nThis patch (of 4): introduce watchdog_park_threads() and watchdog_unpark_threads()\n\nThese functions are intended to be used only from inside kernel/watchdog.c\nto park/unpark all watchdog threads that are specified in\nwatchdog_cpumask.\n\nSigned-off-by: Ulrich Obergfell <uobergfe@redhat.com>\nReviewed-by: Aaron Tomlin <atomlin@redhat.com>\nCc: Guenter Roeck <linux@roeck-us.net>\nCc: Don Zickus <dzickus@redhat.com>\nCc: Ulrich Obergfell <uobergfe@redhat.com>\nCc: Jiri Olsa <jolsa@kernel.org>\nCc: Michal Hocko <mhocko@suse.cz>\nCc: Stephane Eranian <eranian@google.com>\nCc: Chris Metcalf <cmetcalf@ezchip.com>\nCc: Frederic Weisbecker <fweisbec@gmail.com>\nCc: Peter Zijlstra <a.p.zijlstra@chello.nl>\nCc: Ingo Molnar <mingo@redhat.com>\nSigned-off-by: Andrew Morton <akpm@linux-foundation.org>\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>","distinct":true,"url":"https://api.github.com/repos/wyqwxj/linux/commits/81a4beef91ba4a9e8ad6054ca9933dff7e25ff28"},{"sha":"8c073d27d7ad293bf734cc8475689413afadab81","author":{"email":"2f076acc3232878642c0aa405d54beec6cc1a760@redhat.com","name":"Ulrich Obergfell"},"message":"watchdog: introduce watchdog_suspend() and watchdog_resume()\n\nThis interface can be utilized to deactivate the hard and soft lockup\ndetector temporarily.  Callers are expected to minimize the duration of\ndeactivation.  Multiple deactivations are allowed to occur in parallel but\nshould be rare in practice.\n\n[akpm@linux-foundation.org: remove unneeded static initialization]\nSigned-off-by: Ulrich Obergfell <uobergfe@redhat.com>\nReviewed-by: Aaron Tomlin <atomlin@redhat.com>\nCc: Guenter Roeck <linux@roeck-us.net>\nCc: Don Zickus <dzickus@redhat.com>\nCc: Ulrich Obergfell <uobergfe@redhat.com>\nCc: Jiri Olsa <jolsa@kernel.org>\nCc: Michal Hocko <mhocko@suse.cz>\nCc: Stephane Eranian <eranian@google.com>\nCc: Chris Metcalf <cmetcalf@ezchip.com>\nCc: Frederic Weisbecker <fweisbec@gmail.com>\nCc: Peter Zijlstra <a.p.zijlstra@chello.nl>\nCc: Ingo Molnar <mingo@redhat.com>\nSigned-off-by: Andrew Morton <akpm@linux-foundation.org>\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>","distinct":true,"url":"https://api.github.com/repos/wyqwxj/linux/commits/8c073d27d7ad293bf734cc8475689413afadab81"},{"sha":"d4bdd0b21c7652a8271f873cc755486b255c1bbd","author":{"email":"2f076acc3232878642c0aa405d54beec6cc1a760@redhat.com","name":"Ulrich Obergfell"},"message":"watchdog: use park/unpark functions in update_watchdog_all_cpus()\n\nRemove update_watchdog() and restart_watchdog_hrtimer() since these\nfunctions are no longer needed.  Changes of parameters such as the sample\nperiod are honored at the time when the watchdog threads are being\nunparked.\n\nSigned-off-by: Ulrich Obergfell <uobergfe@redhat.com>\nReviewed-by: Aaron Tomlin <atomlin@redhat.com>\nCc: Guenter Roeck <linux@roeck-us.net>\nCc: Don Zickus <dzickus@redhat.com>\nCc: Ulrich Obergfell <uobergfe@redhat.com>\nCc: Jiri Olsa <jolsa@kernel.org>\nCc: Michal Hocko <mhocko@suse.cz>\nCc: Stephane Eranian <eranian@google.com>\nCc: Chris Metcalf <cmetcalf@ezchip.com>\nCc: Frederic Weisbecker <fweisbec@gmail.com>\nCc: Peter Zijlstra <a.p.zijlstra@chello.nl>\nCc: Ingo Molnar <mingo@redhat.com>\nSigned-off-by: Andrew Morton <akpm@linux-foundation.org>\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>","distinct":true,"url":"https://api.github.com/repos/wyqwxj/linux/commits/d4bdd0b21c7652a8271f873cc755486b255c1bbd"},{"sha":"999bbe49ea0118b70ddf3f5d679f51dc7a97ae55","author":{"email":"2f076acc3232878642c0aa405d54beec6cc1a760@redhat.com","name":"Ulrich Obergfell"},"message":"watchdog: use suspend/resume interface in fixup_ht_bug()\n\nRemove watchdog_nmi_disable_all() and watchdog_nmi_enable_all() since\nthese functions are no longer needed.  If a subsystem has a need to\ndeactivate the watchdog temporarily, it should utilize the\nwatchdog_suspend() and watchdog_resume() functions.\n\n[akpm@linux-foundation.org: fix build with CONFIG_LOCKUP_DETECTOR=m]\nSigned-off-by: Ulrich Obergfell <uobergfe@redhat.com>\nReviewed-by: Aaron Tomlin <atomlin@redhat.com>\nCc: Guenter Roeck <linux@roeck-us.net>\nCc: Don Zickus <dzickus@redhat.com>\nCc: Ulrich Obergfell <uobergfe@redhat.com>\nCc: Jiri Olsa <jolsa@kernel.org>\nCc: Michal Hocko <mhocko@suse.cz>\nCc: Stephane Eranian <eranian@google.com>\nCc: Chris Metcalf <cmetcalf@ezchip.com>\nCc: Frederic Weisbecker <fweisbec@gmail.com>\nCc: Peter Zijlstra <a.p.zijlstra@chello.nl>\nCc: Ingo Molnar <mingo@redhat.com>\nSigned-off-by: Andrew Morton <akpm@linux-foundation.org>\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>","distinct":true,"url":"https://api.github.com/repos/wyqwxj/linux/commits/999bbe49ea0118b70ddf3f5d679f51dc7a97ae55"},{"sha":"ec6a90661a0d6ce1461d05c7a58a0a151154e14a","author":{"email":"2f076acc3232878642c0aa405d54beec6cc1a760@redhat.com","name":"Ulrich Obergfell"},"message":"watchdog: rename watchdog_suspend() and watchdog_resume()\n\nRename watchdog_suspend() to lockup_detector_suspend() and\nwatchdog_resume() to lockup_detector_resume() to avoid confusion with the\nwatchdog subsystem and to be consistent with the existing name\nlockup_detector_init().\n\nAlso provide comment blocks to explain the watchdog_running and\nwatchdog_suspended variables and their relationship.\n\nSigned-off-by: Ulrich Obergfell <uobergfe@redhat.com>\nReviewed-by: Aaron Tomlin <atomlin@redhat.com>\nCc: Guenter Roeck <linux@roeck-us.net>\nCc: Don Zickus <dzickus@redhat.com>\nCc: Ulrich Obergfell <uobergfe@redhat.com>\nCc: Jiri Olsa <jolsa@kernel.org>\nCc: Michal Hocko <mhocko@suse.cz>\nCc: Stephane Eranian <eranian@google.com>\nCc: Chris Metcalf <cmetcalf@ezchip.com>\nCc: Frederic Weisbecker <fweisbec@gmail.com>\nCc: Peter Zijlstra <a.p.zijlstra@chello.nl>\nCc: Ingo Molnar <mingo@redhat.com>\nSigned-off-by: Andrew Morton <akpm@linux-foundation.org>\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>","distinct":true,"url":"https://api.github.com/repos/wyqwxj/linux/commits/ec6a90661a0d6ce1461d05c7a58a0a151154e14a"},{"sha":"2ae44005b678431a5c7a55dafcd09421ba3fadf0","author":{"email":"980bdea81946be3dffddbcbbdb1b5761713ff28c@redhat.com","name":"Jesper Dangaard Brouer"},"message":"slub: fix spelling succedd to succeed\n\nWith this patchset the SLUB allocator now has both bulk alloc and free\nimplemented.\n\nThis patchset mostly optimizes the \"fastpath\" where objects are available\non the per CPU fastpath page.  This mostly amortize the less-heavy\nnone-locked cmpxchg_double used on fastpath.\n\nThe \"fallback\" bulking (e.g __kmem_cache_free_bulk) provides a good basis\nfor comparison.  Measurements[1] of the fallback functions\n__kmem_cache_{free,alloc}_bulk have been copied from slab_common.c and\nforced \"noinline\" to force a function call like slab_common.c.\n\nMeasurements on CPU CPU i7-4790K @ 4.00GHz\nBaseline normal fastpath (alloc+free cost): 42 cycles(tsc) 10.601 ns\n\nMeasurements last-patch with disabled debugging:\n\nBulk- fallback                   - this-patch\n  1 -  57 cycles(tsc) 14.448 ns  -  44 cycles(tsc) 11.236 ns  improved 22.8%\n  2 -  51 cycles(tsc) 12.768 ns  -  28 cycles(tsc)  7.019 ns  improved 45.1%\n  3 -  48 cycles(tsc) 12.232 ns  -  22 cycles(tsc)  5.526 ns  improved 54.2%\n  4 -  48 cycles(tsc) 12.025 ns  -  19 cycles(tsc)  4.786 ns  improved 60.4%\n  8 -  46 cycles(tsc) 11.558 ns  -  18 cycles(tsc)  4.572 ns  improved 60.9%\n 16 -  45 cycles(tsc) 11.458 ns  -  18 cycles(tsc)  4.658 ns  improved 60.0%\n 30 -  45 cycles(tsc) 11.499 ns  -  18 cycles(tsc)  4.568 ns  improved 60.0%\n 32 -  79 cycles(tsc) 19.917 ns  -  65 cycles(tsc) 16.454 ns  improved 17.7%\n 34 -  78 cycles(tsc) 19.655 ns  -  63 cycles(tsc) 15.932 ns  improved 19.2%\n 48 -  68 cycles(tsc) 17.049 ns  -  50 cycles(tsc) 12.506 ns  improved 26.5%\n 64 -  80 cycles(tsc) 20.009 ns  -  63 cycles(tsc) 15.929 ns  improved 21.3%\n128 -  94 cycles(tsc) 23.749 ns  -  86 cycles(tsc) 21.583 ns  improved  8.5%\n158 -  97 cycles(tsc) 24.299 ns  -  90 cycles(tsc) 22.552 ns  improved  7.2%\n250 - 102 cycles(tsc) 25.681 ns  -  98 cycles(tsc) 24.589 ns  improved  3.9%\n\nBenchmarking shows impressive improvements in the \"fastpath\" with a small\nnumber of objects in the working set.  Once the working set increases,\nresulting in activating the \"slowpath\" (that contains the heavier locked\ncmpxchg_double) the improvement decreases.\n\nI'm currently working on also optimizing the \"slowpath\" (as network stack\nuse-case hits this), but this patchset should provide a good foundation\nfor further improvements.  Rest of my patch queue in this area needs some\nmore work, but preliminary results are good.  I'm attending Netfilter\nWorkshop[2] next week, and I'll hopefully return working on further\nimprovements in this area.\n\nThis patch (of 6):\n\ns/succedd/succeed/\n\nSigned-off-by: Jesper Dangaard Brouer <brouer@redhat.com>\nCc: Christoph Lameter <cl@linux.com>\nCc: Pekka Enberg <penberg@kernel.org>\nCc: David Rientjes <rientjes@google.com>\nCc: Joonsoo Kim <iamjoonsoo.kim@lge.com>\nSigned-off-by: Andrew Morton <akpm@linux-foundation.org>\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>","distinct":true,"url":"https://api.github.com/repos/wyqwxj/linux/commits/2ae44005b678431a5c7a55dafcd09421ba3fadf0"},{"sha":"484748f0b65a1950b2b93f444a2287e8dd2cedd6","author":{"email":"ef3ecccf258fa062c5c6521a4887d40541963af7@linux.com","name":"Christoph Lameter"},"message":"slab: infrastructure for bulk object allocation and freeing\n\nAdd the basic infrastructure for alloc/free operations on pointer arrays.\nIt includes a generic function in the common slab code that is used in\nthis infrastructure patch to create the unoptimized functionality for slab\nbulk operations.\n\nAllocators can then provide optimized allocation functions for situations\nin which large numbers of objects are needed.  These optimization may\navoid taking locks repeatedly and bypass metadata creation if all objects\nin slab pages can be used to provide the objects required.\n\nAllocators can extend the skeletons provided and add their own code to the\nbulk alloc and free functions.  They can keep the generic allocation and\nfreeing and just fall back to those if optimizations would not work (like\nfor example when debugging is on).\n\nSigned-off-by: Christoph Lameter <cl@linux.com>\nSigned-off-by: Jesper Dangaard Brouer <brouer@redhat.com>\nCc: Pekka Enberg <penberg@kernel.org>\nCc: David Rientjes <rientjes@google.com>\nCc: Joonsoo Kim <iamjoonsoo.kim@lge.com>\nSigned-off-by: Andrew Morton <akpm@linux-foundation.org>\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>","distinct":true,"url":"https://api.github.com/repos/wyqwxj/linux/commits/484748f0b65a1950b2b93f444a2287e8dd2cedd6"},{"sha":"994eb764ec5ad57c9b7c5e72b892205039a84b69","author":{"email":"980bdea81946be3dffddbcbbdb1b5761713ff28c@redhat.com","name":"Jesper Dangaard Brouer"},"message":"slub bulk alloc: extract objects from the per cpu slab\n\nFirst piece: acceleration of retrieval of per cpu objects\n\nIf we are allocating lots of objects then it is advantageous to disable\ninterrupts and avoid the this_cpu_cmpxchg() operation to get these objects\nfaster.\n\nNote that we cannot do the fast operation if debugging is enabled, because\nwe would have to add extra code to do all the debugging checks.  And it\nwould not be fast anyway.\n\nNote also that the requirement of having interrupts disabled avoids having\nto do processor flag operations.\n\nAllocate as many objects as possible in the fast way and then fall back to\nthe generic implementation for the rest of the objects.\n\nMeasurements on CPU CPU i7-4790K @ 4.00GHz\nBaseline normal fastpath (alloc+free cost): 42 cycles(tsc) 10.554 ns\n\nBulk- fallback                   - this-patch\n  1 -  57 cycles(tsc) 14.432 ns  -  48 cycles(tsc) 12.155 ns  improved 15.8%\n  2 -  50 cycles(tsc) 12.746 ns  -  37 cycles(tsc)  9.390 ns  improved 26.0%\n  3 -  48 cycles(tsc) 12.180 ns  -  33 cycles(tsc)  8.417 ns  improved 31.2%\n  4 -  48 cycles(tsc) 12.015 ns  -  32 cycles(tsc)  8.045 ns  improved 33.3%\n  8 -  46 cycles(tsc) 11.526 ns  -  30 cycles(tsc)  7.699 ns  improved 34.8%\n 16 -  45 cycles(tsc) 11.418 ns  -  32 cycles(tsc)  8.205 ns  improved 28.9%\n 30 -  80 cycles(tsc) 20.246 ns  -  73 cycles(tsc) 18.328 ns  improved  8.8%\n 32 -  79 cycles(tsc) 19.946 ns  -  72 cycles(tsc) 18.208 ns  improved  8.9%\n 34 -  78 cycles(tsc) 19.659 ns  -  71 cycles(tsc) 17.987 ns  improved  9.0%\n 48 -  86 cycles(tsc) 21.516 ns  -  82 cycles(tsc) 20.566 ns  improved  4.7%\n 64 -  93 cycles(tsc) 23.423 ns  -  89 cycles(tsc) 22.480 ns  improved  4.3%\n128 - 100 cycles(tsc) 25.170 ns  -  99 cycles(tsc) 24.871 ns  improved  1.0%\n158 - 102 cycles(tsc) 25.549 ns  - 101 cycles(tsc) 25.375 ns  improved  1.0%\n250 - 101 cycles(tsc) 25.344 ns  - 100 cycles(tsc) 25.182 ns  improved  1.0%\n\nSigned-off-by: Christoph Lameter <cl@linux.com>\nSigned-off-by: Jesper Dangaard Brouer <brouer@redhat.com>\nCc: Pekka Enberg <penberg@kernel.org>\nCc: David Rientjes <rientjes@google.com>\nCc: Joonsoo Kim <iamjoonsoo.kim@lge.com>\nSigned-off-by: Andrew Morton <akpm@linux-foundation.org>\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>","distinct":true,"url":"https://api.github.com/repos/wyqwxj/linux/commits/994eb764ec5ad57c9b7c5e72b892205039a84b69"},{"sha":"ebe909e0fdb34b980c5cf636c495e4f0bb0dfda8","author":{"email":"980bdea81946be3dffddbcbbdb1b5761713ff28c@redhat.com","name":"Jesper Dangaard Brouer"},"message":"slub: improve bulk alloc strategy\n\nCall slowpath __slab_alloc() from within the bulk loop, as the side-effect\nof this call likely repopulates c->freelist.\n\nChoose to reenable local IRQs while calling slowpath.\n\nSaving some optimizations for later.  E.g.  it is possible to extract\nparts of __slab_alloc() and avoid the unnecessary and expensive (37\ncycles) local_irq_{save,restore}.  For now, be happy calling\n__slab_alloc() this lower icache impact of this func and I don't have to\nworry about correctness.\n\nMeasurements on CPU CPU i7-4790K @ 4.00GHz\nBaseline normal fastpath (alloc+free cost): 42 cycles(tsc) 10.601 ns\n\nBulk- fallback                   - this-patch\n  1 -  58 cycles(tsc) 14.516 ns  -  49 cycles(tsc) 12.459 ns  improved 15.5%\n  2 -  51 cycles(tsc) 12.930 ns  -  38 cycles(tsc)  9.605 ns  improved 25.5%\n  3 -  49 cycles(tsc) 12.274 ns  -  34 cycles(tsc)  8.525 ns  improved 30.6%\n  4 -  48 cycles(tsc) 12.058 ns  -  32 cycles(tsc)  8.036 ns  improved 33.3%\n  8 -  46 cycles(tsc) 11.609 ns  -  31 cycles(tsc)  7.756 ns  improved 32.6%\n 16 -  45 cycles(tsc) 11.451 ns  -  32 cycles(tsc)  8.148 ns  improved 28.9%\n 30 -  79 cycles(tsc) 19.865 ns  -  68 cycles(tsc) 17.164 ns  improved 13.9%\n 32 -  76 cycles(tsc) 19.212 ns  -  66 cycles(tsc) 16.584 ns  improved 13.2%\n 34 -  74 cycles(tsc) 18.600 ns  -  63 cycles(tsc) 15.954 ns  improved 14.9%\n 48 -  88 cycles(tsc) 22.092 ns  -  77 cycles(tsc) 19.373 ns  improved 12.5%\n 64 -  80 cycles(tsc) 20.043 ns  -  68 cycles(tsc) 17.188 ns  improved 15.0%\n128 -  99 cycles(tsc) 24.818 ns  -  89 cycles(tsc) 22.404 ns  improved 10.1%\n158 -  99 cycles(tsc) 24.977 ns  -  92 cycles(tsc) 23.089 ns  improved  7.1%\n250 - 106 cycles(tsc) 26.552 ns  -  99 cycles(tsc) 24.785 ns  improved  6.6%\n\nSigned-off-by: Jesper Dangaard Brouer <brouer@redhat.com>\nCc: Christoph Lameter <cl@linux.com>\nCc: Pekka Enberg <penberg@kernel.org>\nCc: David Rientjes <rientjes@google.com>\nCc: Joonsoo Kim <iamjoonsoo.kim@lge.com>\nSigned-off-by: Andrew Morton <akpm@linux-foundation.org>\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>","distinct":true,"url":"https://api.github.com/repos/wyqwxj/linux/commits/ebe909e0fdb34b980c5cf636c495e4f0bb0dfda8"},{"sha":"fbd02630c6e3c60feecc4688f5f98b015d264516","author":{"email":"980bdea81946be3dffddbcbbdb1b5761713ff28c@redhat.com","name":"Jesper Dangaard Brouer"},"message":"slub: initial bulk free implementation\n\nThis implements SLUB specific kmem_cache_free_bulk().  SLUB allocator now\nboth have bulk alloc and free implemented.\n\nChoose to reenable local IRQs while calling slowpath __slab_free().  In\nworst case, where all objects hit slowpath call, the performance should\nstill be faster than fallback function __kmem_cache_free_bulk(), because\nlocal_irq_{disable+enable} is very fast (7-cycles), while the fallback\ninvokes this_cpu_cmpxchg() which is slightly slower (9-cycles).\nNitpicking, this should be faster for N>=4, due to the entry cost of\nlocal_irq_{disable+enable}.\n\nDo notice that the save+restore variant is very expensive, this is key to\nwhy this optimization works.\n\nCPU: i7-4790K CPU @ 4.00GHz\n * local_irq_{disable,enable}:  7 cycles(tsc) - 1.821 ns\n * local_irq_{save,restore}  : 37 cycles(tsc) - 9.443 ns\n\nMeasurements on CPU CPU i7-4790K @ 4.00GHz\nBaseline normal fastpath (alloc+free cost): 43 cycles(tsc) 10.834 ns\n\nBulk- fallback                   - this-patch\n  1 -  58 cycles(tsc) 14.542 ns  -  43 cycles(tsc) 10.811 ns  improved 25.9%\n  2 -  50 cycles(tsc) 12.659 ns  -  27 cycles(tsc)  6.867 ns  improved 46.0%\n  3 -  48 cycles(tsc) 12.168 ns  -  21 cycles(tsc)  5.496 ns  improved 56.2%\n  4 -  47 cycles(tsc) 11.987 ns  -  24 cycles(tsc)  6.038 ns  improved 48.9%\n  8 -  46 cycles(tsc) 11.518 ns  -  17 cycles(tsc)  4.280 ns  improved 63.0%\n 16 -  45 cycles(tsc) 11.366 ns  -  17 cycles(tsc)  4.483 ns  improved 62.2%\n 30 -  45 cycles(tsc) 11.433 ns  -  18 cycles(tsc)  4.531 ns  improved 60.0%\n 32 -  75 cycles(tsc) 18.983 ns  -  58 cycles(tsc) 14.586 ns  improved 22.7%\n 34 -  71 cycles(tsc) 17.940 ns  -  53 cycles(tsc) 13.391 ns  improved 25.4%\n 48 -  80 cycles(tsc) 20.077 ns  -  65 cycles(tsc) 16.268 ns  improved 18.8%\n 64 -  71 cycles(tsc) 17.799 ns  -  53 cycles(tsc) 13.440 ns  improved 25.4%\n128 -  91 cycles(tsc) 22.980 ns  -  79 cycles(tsc) 19.899 ns  improved 13.2%\n158 - 100 cycles(tsc) 25.241 ns  -  90 cycles(tsc) 22.732 ns  improved 10.0%\n250 - 102 cycles(tsc) 25.583 ns  -  95 cycles(tsc) 23.916 ns  improved  6.9%\n\nSigned-off-by: Jesper Dangaard Brouer <brouer@redhat.com>\nCc: Christoph Lameter <cl@linux.com>\nCc: Pekka Enberg <penberg@kernel.org>\nCc: David Rientjes <rientjes@google.com>\nCc: Joonsoo Kim <iamjoonsoo.kim@lge.com>\nSigned-off-by: Andrew Morton <akpm@linux-foundation.org>\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>","distinct":true,"url":"https://api.github.com/repos/wyqwxj/linux/commits/fbd02630c6e3c60feecc4688f5f98b015d264516"}]}