{"push_id":1199663354,"size":8,"distinct_size":8,"ref":"refs/heads/master","head":"205a2027c949343d7371a4b423060c070f912ec9","before":"672319500681fecc1286e02c9c4ec3bbe4e33191","commits":[{"sha":"91afda48195f51a6d46f2d6997ce70ff53a4ec3a","author":{"name":"Huang Ying","email":"20e98aa45f942f6313f9d1ea174221d2bc2a5e32@intel.com"},"message":"lib, Add lock-less NULL terminated single list\n\nCmpxchg is used to implement adding new entry to the list, deleting\nall entries from the list, deleting first entry of the list and some\nother operations.\n\nBecause this is a single list, so the tail can not be accessed in O(1).\n\nIf there are multiple producers and multiple consumers, llist_add can\nbe used in producers and llist_del_all can be used in consumers.  They\ncan work simultaneously without lock.  But llist_del_first can not be\nused here.  Because llist_del_first depends on list->first->next does\nnot changed if list->first is not changed during its operation, but\nllist_del_first, llist_add, llist_add (or llist_del_all, llist_add,\nllist_add) sequence in another consumer may violate that.\n\nIf there are multiple producers and one consumer, llist_add can be\nused in producers and llist_del_all or llist_del_first can be used in\nthe consumer.\n\nThis can be summarized as follow:\n\n           |   add    | del_first |  del_all\n add       |    -     |     -     |     -\n del_first |          |     L     |     L\n del_all   |          |           |     -\n\nWhere \"-\" stands for no lock is needed, while \"L\" stands for lock is\nneeded.\n\nThe list entries deleted via llist_del_all can be traversed with\ntraversing function such as llist_for_each etc.  But the list entries\ncan not be traversed safely before deleted from the list.  The order\nof deleted entries is from the newest to the oldest added one.  If you\nwant to traverse from the oldest to the newest, you must reverse the\norder by yourself before traversing.\n\nThe basic atomic operation of this list is cmpxchg on long.  On\narchitectures that don't have NMI-safe cmpxchg implementation, the\nlist can NOT be used in NMI handler.  So code uses the list in NMI\nhandler should depend on CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG.\n\nSigned-off-by: Huang Ying <ying.huang@intel.com>\nReviewed-by: Andi Kleen <ak@linux.intel.com>\nReviewed-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>\nCc: Andrew Morton <akpm@linux-foundation.org>\nSigned-off-by: Len Brown <len.brown@intel.com>","distinct":true,"url":"https://api.github.com/repos/Noob-X/WCS-S8073/commits/91afda48195f51a6d46f2d6997ce70ff53a4ec3a"},{"sha":"b9131d7ae4e32b39b01f7d5171650c6f46db3a8c","author":{"name":"Huang Ying","email":"20e98aa45f942f6313f9d1ea174221d2bc2a5e32@intel.com"},"message":"lib, Make gen_pool memory allocator lockless\n\nThis version of the gen_pool memory allocator supports lockless\noperation.\n\nThis makes it safe to use in NMI handlers and other special\nunblockable contexts that could otherwise deadlock on locks.  This is\nimplemented by using atomic operations and retries on any conflicts.\nThe disadvantage is that there may be livelocks in extreme cases.  For\nbetter scalability, one gen_pool allocator can be used for each CPU.\n\nThe lockless operation only works if there is enough memory available.\nIf new memory is added to the pool a lock has to be still taken.  So\nany user relying on locklessness has to ensure that sufficient memory\nis preallocated.\n\nThe basic atomic operation of this allocator is cmpxchg on long.  On\narchitectures that don't have NMI-safe cmpxchg implementation, the\nallocator can NOT be used in NMI handler.  So code uses the allocator\nin NMI handler should depend on CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG.\n\nSigned-off-by: Huang Ying <ying.huang@intel.com>\nReviewed-by: Andi Kleen <ak@linux.intel.com>\nReviewed-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>\nCc: Andrew Morton <akpm@linux-foundation.org>\nSigned-off-by: Len Brown <len.brown@intel.com>","distinct":true,"url":"https://api.github.com/repos/Noob-X/WCS-S8073/commits/b9131d7ae4e32b39b01f7d5171650c6f46db3a8c"},{"sha":"21eac2fc711e463e66d55fb6f538707e3f2c8e73","author":{"name":"Rusty Russell","email":"69f5932eb9977dcad4aeec4104f9f99d5dd1ae66@rustcorp.com.au"},"message":"ida: simplified functions for id allocation\n\nThe current hyper-optimized functions are overkill if you simply want to\nallocate an id for a device.  Create versions which use an internal\nlock.\n\nIn followup patches, numerous drivers are converted to use this\ninterface.\n\nThanks to Tejun for feedback.\n\nSigned-off-by: Rusty Russell <rusty@rustcorp.com.au>\nAcked-by: Tejun Heo <tj@kernel.org>\nAcked-by: Jonathan Cameron <jic23@cam.ac.uk>\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/Noob-X/WCS-S8073/commits/21eac2fc711e463e66d55fb6f538707e3f2c8e73"},{"sha":"606416113db3ba2d939ac0a88cef5a3b3f4414e0","author":{"name":"Paul Bolle","email":"9321cd92933daf9a2a45952d44f5811c9d660b31@tiscali.nl"},"message":"Fix kernel-doc comment typo '@id'\n\nSigned-off-by: Paul Bolle <pebolle@tiscali.nl>\nSigned-off-by: Jiri Kosina <jkosina@suse.cz>","distinct":true,"url":"https://api.github.com/repos/Noob-X/WCS-S8073/commits/606416113db3ba2d939ac0a88cef5a3b3f4414e0"},{"sha":"596d237542f96ace03b3f0fe320d0e804a8b721f","author":{"name":"Wang Sheng-Hui","email":"cbd4769a116bad2a74190756821d649aa60d5409@gmail.com"},"message":"lib/idr.c: fix comment for ida_get_new_above()\n\nSigned-off-by: Wang Sheng-Hui <shhuiw@gmail.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/Noob-X/WCS-S8073/commits/596d237542f96ace03b3f0fe320d0e804a8b721f"},{"sha":"3f61f67d2d8a73060682b5fa6d51f55195eae8d1","author":{"name":"Tejun Heo","email":"e1d87360d7f4d7b7ebaddc11b54e50a559aaba57@kernel.org"},"message":"ida: make ida_simple_get/put() IRQ safe\n\nIt's often convenient to be able to release resource from IRQ context.\nMake ida_simple_*() use irqsave/restore spin ops so that they are IRQ\nsafe.\n\nSigned-off-by: Tejun Heo <tj@kernel.org>\nAcked-by: Rusty Russell <rusty@rustcorp.com.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/Noob-X/WCS-S8073/commits/3f61f67d2d8a73060682b5fa6d51f55195eae8d1"},{"sha":"7d219653e1aa1f136d8e886fd437bc5e465d6f2c","author":{"name":"Hugh Dickins","email":"11bd16bbccd141ee47d9426ad06afbc74b915cf0@google.com"},"message":"idr: make idr_get_next() good for rcu_read_lock()\n\nMake one small adjustment to idr_get_next(): take the height from the top\nlayer (stable under RCU) instead of from the root (unprotected by RCU), as\nidr_find() does: so that it can be used with RCU locking.  Copied comment\non RCU locking from idr_find().\n\nSigned-off-by: Hugh Dickins <hughd@google.com>\nAcked-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>\nAcked-by: Li Zefan <lizf@cn.fujitsu.com>\nCc: Eric Dumazet <eric.dumazet@gmail.com>\nAcked-by: Tejun Heo <tj@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/Noob-X/WCS-S8073/commits/7d219653e1aa1f136d8e886fd437bc5e465d6f2c"},{"sha":"205a2027c949343d7371a4b423060c070f912ec9","author":{"name":"Tejun Heo","email":"e1d87360d7f4d7b7ebaddc11b54e50a559aaba57@kernel.org"},"message":"idr: fix top layer handling\n\ncommit 326cf0f0f308933c10236280a322031f0097205d upstream.\n\nMost functions in idr fail to deal with the high bits when the idr\ntree grows to the maximum height.\n\n* idr_get_empty_slot() stops growing idr tree once the depth reaches\n  MAX_IDR_LEVEL - 1, which is one depth shallower than necessary to\n  cover the whole range.  The function doesn't even notice that it\n  didn't grow the tree enough and ends up allocating the wrong ID\n  given sufficiently high @starting_id.\n\n  For example, on 64 bit, if the starting id is 0x7fffff01,\n  idr_get_empty_slot() will grow the tree 5 layer deep, which only\n  covers the 30 bits and then proceed to allocate as if the bit 30\n  wasn't specified.  It ends up allocating 0x3fffff01 without the bit\n  30 but still returns 0x7fffff01.\n\n* __idr_remove_all() will not remove anything if the tree is fully\n  grown.\n\n* idr_find() can't find anything if the tree is fully grown.\n\n* idr_for_each() and idr_get_next() can't iterate anything if the tree\n  is fully grown.\n\nFix it by introducing idr_max() which returns the maximum possible ID\ngiven the depth of tree and replacing the id limit checks in all\naffected places.\n\nAs the idr_layer pointer array pa[] needs to be 1 larger than the\nmaximum depth, enlarge pa[] arrays by one.\n\nWhile this plugs the discovered issues, the whole code base is\nhorrible and in desparate need of rewrite.  It's fragile like hell,\n\nSigned-off-by: Tejun Heo <tj@kernel.org>\nCc: Rusty Russell <rusty@rustcorp.com.au>\nSigned-off-by: Andrew Morton <akpm@linux-foundation.org>\nSigned-off-by: Linus Torvalds <torvalds@linux-foundation.org>\n[bwh: Backported to 3.2:\n - Adjust context\n - s/MAX_IDR_LEVEL/MAX_LEVEL/; s/MAX_IDR_SHIFT/MAX_ID_SHIFT/\n - Drop change to idr_alloc()]\nSigned-off-by: Ben Hutchings <ben@decadent.org.uk>\nCc: Qiang Huang <h.huangqiang@huawei.com>\nCc: Li Zefan <lizefan@huawei.com>\nCc: Jianguo Wu <wujianguo@huawei.com>\nSigned-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>","distinct":true,"url":"https://api.github.com/repos/Noob-X/WCS-S8073/commits/205a2027c949343d7371a4b423060c070f912ec9"}]}
{"actor":{"display_login":"Noob-X"}}