)]}'
{
  "log": [
    {
      "commit": "3ddfbcf19b15ccd25a0b4b2dc2e38000e08de739",
      "tree": "ca77158ab291453ed39e87f2d81beef9e8d1a560",
      "parents": [
        "f6d3577da14e877b79517c883d1139ee6ad7da45"
      ],
      "author": {
        "name": "David Gibson",
        "email": "david@gibson.dropbear.id.au",
        "time": "Thu Nov 10 12:56:55 2005 +1100"
      },
      "committer": {
        "name": "Paul Mackerras",
        "email": "paulus@samba.org",
        "time": "Thu Nov 10 13:10:38 2005 +1100"
      },
      "message": "[PATCH] powerpc: Consolidate asm compatibility macros\n\nThis patch consolidates macros used to generate assembly for\ncompatibility across different CPUs or configs.  A new header,\nasm-powerpc/asm-compat.h contains the main compatibility macros.  It\nuses some preprocessor magic to make the macros suitable both for use\nin .S files, and in inline asm in .c files.  Headers (bitops.h,\nuaccess.h, atomic.h, bug.h) which had their own such compatibility\nmacros are changed to use asm-compat.h.\n\nppc_asm.h is now for use in .S files *only*, and a #error enforces\nthat.  As such, we\u0027re a lot more careless about namespace pollution\nhere than in asm-compat.h.\n\nWhile we\u0027re at it, this patch adds a call to the PPC405_ERR77 macro in\nfutex.h which should have had it already, but didn\u0027t.\n\nBuilt and booted on pSeries, Maple and iSeries (ARCH\u003dpowerpc).  Built\nfor 32-bit powermac (ARCH\u003dpowerpc) and Walnut (ARCH\u003dppc).\n\nSigned-off-by: David Gibson \u003cdwg@au1.ibm.com\u003e\nSigned-off-by: Paul Mackerras \u003cpaulus@samba.org\u003e\n"
    },
    {
      "commit": "2ff2ae7a0d7bfd813325663dc6353d034db7473d",
      "tree": "293cfb483a6dde5dd22cb1711f4abf2542da6182",
      "parents": [
        "847aeb6bad0876ff9c250725e905a41c6050157c"
      ],
      "author": {
        "name": "David Gibson",
        "email": "david@gibson.dropbear.id.au",
        "time": "Wed Nov 02 13:58:22 2005 +1100"
      },
      "committer": {
        "name": "Paul Mackerras",
        "email": "paulus@samba.org",
        "time": "Wed Nov 02 14:48:18 2005 +1100"
      },
      "message": "[PATCH] powerpc: Merge futex.h\n\nThis patch merges the ppc32 and ppc64 versions of futex.h, essentially\nby taking the ppc64 version as the powerpc version.  The old ppc32\nversion did not implement the futex_atomic_op_inuser() callback (it\nalways returned -ENOSYS), so FUTEX_WAKE_OP would not work on ppc32.\nIn fact the ppc64 version of this function is almost suitable for\nppc32 as well - the only change needed is to extend ppc_asm.h with a\nmacro expanding to to the right pseudo-op to store a pointer (either\n\".long\" or \".llong\").\n\nBuilt and booted on pSeries.  Built for 32-bit powermac.\n\nSigned-off-by: David Gibson \u003cdavid@gibson.dropbear.id.au\u003e\nSigned-off-by: Paul Mackerras \u003cpaulus@samba.org\u003e\n"
    },
    {
      "commit": "feaf7cf153335fe7100b65ed6f4585c3574fe69a",
      "tree": "c57198f01b5f12ffe8ce90f4e1399505c1f84a02",
      "parents": [
        "2bfadee32f1501faa3184d574f6a769f17236c87"
      ],
      "author": {
        "name": "Becky Bruce",
        "email": "bgill@freescale.com",
        "time": "Thu Sep 22 14:20:04 2005 -0500"
      },
      "committer": {
        "name": "Paul Mackerras",
        "email": "paulus@samba.org",
        "time": "Sun Sep 25 22:38:46 2005 +1000"
      },
      "message": "[PATCH] powerpc: merge atomic.h, memory.h\n\npowerpc: Merge atomic.h and memory.h into powerpc\n\nMerged atomic.h into include/powerpc.  Moved asm-style HMT_ defines from\nmemory.h into ppc_asm.h, where there were already HMT_defines; moved c-style\nHMT_ defines to processor.h. Renamed memory.h to synch.h to better reflect\nits contents.\n\nSigned-off-by: Kumar Gala \u003ckumar.gala@freescale.com\u003e\nSigned-off-by: Becky Bruce \u003cbecky.bruce@freescale.com\u003e\nSigned-off-by: Jon Loeliger \u003clinuxppc@jdl.com\u003e\nSigned-off-by: Paul Mackerras \u003cpaulus@samba.org\u003e\n"
    },
    {
      "commit": "4732efbeb997189d9f9b04708dc26bf8613ed721",
      "tree": "885308bb2b521e52e13aaa8a67c78b2ab3c18cd8",
      "parents": [
        "5b039e681b8c5f30aac9cc04385cc94be45d0823"
      ],
      "author": {
        "name": "Jakub Jelinek",
        "email": "jakub@redhat.com",
        "time": "Tue Sep 06 15:16:25 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@g5.osdl.org",
        "time": "Wed Sep 07 16:57:17 2005 -0700"
      },
      "message": "[PATCH] FUTEX_WAKE_OP: pthread_cond_signal() speedup\n\nATM pthread_cond_signal is unnecessarily slow, because it wakes one waiter\n(which at least on UP usually means an immediate context switch to one of\nthe waiter threads).  This waiter wakes up and after a few instructions it\nattempts to acquire the cv internal lock, but that lock is still held by\nthe thread calling pthread_cond_signal.  So it goes to sleep and eventually\nthe signalling thread is scheduled in, unlocks the internal lock and wakes\nthe waiter again.\n\nNow, before 2003-09-21 NPTL was using FUTEX_REQUEUE in pthread_cond_signal\nto avoid this performance issue, but it was removed when locks were\nredesigned to the 3 state scheme (unlocked, locked uncontended, locked\ncontended).\n\nFollowing scenario shows why simply using FUTEX_REQUEUE in\npthread_cond_signal together with using lll_mutex_unlock_force in place of\nlll_mutex_unlock is not enough and probably why it has been disabled at\nthat time:\n\nThe number is value in cv-\u003e__data.__lock.\n        thr1            thr2            thr3\n0       pthread_cond_wait\n1       lll_mutex_lock (cv-\u003e__data.__lock)\n0       lll_mutex_unlock (cv-\u003e__data.__lock)\n0       lll_futex_wait (\u0026cv-\u003e__data.__futex, futexval)\n0                       pthread_cond_signal\n1                       lll_mutex_lock (cv-\u003e__data.__lock)\n1                                       pthread_cond_signal\n2                                       lll_mutex_lock (cv-\u003e__data.__lock)\n2                                         lll_futex_wait (\u0026cv-\u003e__data.__lock, 2)\n2                       lll_futex_requeue (\u0026cv-\u003e__data.__futex, 0, 1, \u0026cv-\u003e__data.__lock)\n                          # FUTEX_REQUEUE, not FUTEX_CMP_REQUEUE\n2                       lll_mutex_unlock_force (cv-\u003e__data.__lock)\n0                         cv-\u003e__data.__lock \u003d 0\n0                         lll_futex_wake (\u0026cv-\u003e__data.__lock, 1)\n1       lll_mutex_lock (cv-\u003e__data.__lock)\n0       lll_mutex_unlock (cv-\u003e__data.__lock)\n          # Here, lll_mutex_unlock doesn\u0027t know there are threads waiting\n          # on the internal cv\u0027s lock\n\nNow, I believe it is possible to use FUTEX_REQUEUE in pthread_cond_signal,\nbut it will cost us not one, but 2 extra syscalls and, what\u0027s worse, one of\nthese extra syscalls will be done for every single waiting loop in\npthread_cond_*wait.\n\nWe would need to use lll_mutex_unlock_force in pthread_cond_signal after\nrequeue and lll_mutex_cond_lock in pthread_cond_*wait after lll_futex_wait.\n\nAnother alternative is to do the unlocking pthread_cond_signal needs to do\n(the lock can\u0027t be unlocked before lll_futex_wake, as that is racy) in the\nkernel.\n\nI have implemented both variants, futex-requeue-glibc.patch is the first\none and futex-wake_op{,-glibc}.patch is the unlocking inside of the kernel.\n The kernel interface allows userland to specify how exactly an unlocking\noperation should look like (some atomic arithmetic operation with optional\nconstant argument and comparison of the previous futex value with another\nconstant).\n\nIt has been implemented just for ppc*, x86_64 and i?86, for other\narchitectures I\u0027m including just a stub header which can be used as a\nstarting point by maintainers to write support for their arches and ATM\nwill just return -ENOSYS for FUTEX_WAKE_OP.  The requeue patch has been\n(lightly) tested just on x86_64, the wake_op patch on ppc64 kernel running\n32-bit and 64-bit NPTL and x86_64 kernel running 32-bit and 64-bit NPTL.\n\nWith the following benchmark on UP x86-64 I get:\n\nfor i in nptl-orig nptl-requeue nptl-wake_op; do echo time elf/ld.so --library-path .:$i /tmp/bench; \\\nfor j in 1 2; do echo ( time elf/ld.so --library-path .:$i /tmp/bench ) 2\u003e\u00261; done; done\ntime elf/ld.so --library-path .:nptl-orig /tmp/bench\nreal 0m0.655s user 0m0.253s sys 0m0.403s\nreal 0m0.657s user 0m0.269s sys 0m0.388s\ntime elf/ld.so --library-path .:nptl-requeue /tmp/bench\nreal 0m0.496s user 0m0.225s sys 0m0.271s\nreal 0m0.531s user 0m0.242s sys 0m0.288s\ntime elf/ld.so --library-path .:nptl-wake_op /tmp/bench\nreal 0m0.380s user 0m0.176s sys 0m0.204s\nreal 0m0.382s user 0m0.175s sys 0m0.207s\n\nThe benchmark is at:\nhttp://sourceware.org/ml/libc-alpha/2005-03/txt00001.txt\nOlder futex-requeue-glibc.patch version is at:\nhttp://sourceware.org/ml/libc-alpha/2005-03/txt00002.txt\nOlder futex-wake_op-glibc.patch version is at:\nhttp://sourceware.org/ml/libc-alpha/2005-03/txt00003.txt\nWill post a new version (just x86-64 fixes so that the patch\napplies against pthread_cond_signal.S) to libc-hacker ml soon.\n\nAttached is the kernel FUTEX_WAKE_OP patch as well as a simple-minded\ntestcase that will not test the atomicity of the operation, but at least\ncheck if the threads that should have been woken up are woken up and\nwhether the arithmetic operation in the kernel gave the expected results.\n\nAcked-by: Ingo Molnar \u003cmingo@redhat.com\u003e\nCc: Ulrich Drepper \u003cdrepper@redhat.com\u003e\nCc: Jamie Lokier \u003cjamie@shareable.org\u003e\nCc: Rusty Russell \u003crusty@rustcorp.com.au\u003e\nSigned-off-by: Yoichi Yuasa \u003cyuasa@hh.iij4u.or.jp\u003e\nSigned-off-by: Andrew Morton \u003cakpm@osdl.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@osdl.org\u003e\n"
    }
  ]
}
