)]}'
{
  "log": [
    {
      "commit": "5e7f5a178bba45c5aca3448fddecabd4e28f1f6b",
      "tree": "761019b04370c87f7fba955dea631e3008f010f6",
      "parents": [
        "e1b004c3ef9c59db5f013528628b51c8653155ec"
      ],
      "author": {
        "name": "Patrick Pannuto",
        "email": "ppannuto@codeaurora.org",
        "time": "Mon Aug 02 15:01:04 2010 -0700"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Wed Aug 04 11:00:45 2010 +0200"
      },
      "message": "timer: Added usleep_range timer\n\nusleep_range is a finer precision implementations of msleep\nand is designed to be a drop-in replacement for udelay where\na precise sleep / busy-wait is unnecessary.\n\nSince an easy interface to hrtimers could lead to an undesired\nproliferation of interrupts, we provide only a \"range\" API,\nforcing the caller to think about an acceptable tolerance on\nboth ends and hopefully avoiding introducing another interrupt.\n\nINTRO\n\nAs discussed here ( http://lkml.org/lkml/2007/8/3/250 ), msleep(1) is not\nprecise enough for many drivers (yes, sleep precision is an unfair notion,\nbut consistently sleeping for ~an order of magnitude greater than requested\nis worth fixing). This patch adds a usleep API so that udelay does not have\nto be used. Obviously not every udelay can be replaced (those in atomic\ncontexts or being used for simple bitbanging come to mind), but there are\nmany, many examples of\n\nmydriver_write(...)\n/* Wait for hardware to latch */\nudelay(100)\n\nin various drivers where a busy-wait loop is neither beneficial nor\nnecessary, but msleep simply does not provide enough precision and people\nare using a busy-wait loop instead.\n\nCONCERNS FROM THE RFC\n\nWhy is udelay a problem / necessary? Most callers of udelay are in device/\ndriver initialization code, which is serial...\n\n\tAs I see it, there is only benefit to sleeping over a delay; the\n\tnotion of \"refactoring\" areas that use udelay was presented, but\n\tI see usleep as the refactoring. Consider i2c, if the bus is busy,\n\tyou need to wait a bit (say 100us) before trying again, your\n\tcurrent options are:\n\n\t\t* udelay(100)\n\t\t* msleep(1) \u003c-- As noted above, actually as high as ~20ms\n\t\t\t\ton some platforms, so not really an option\n\t\t* Manually set up an hrtimer to try again in 100us (which\n\t\t  is what usleep does anyway...)\n\n\tPeople choose the udelay route because it is EASY; we need to\n\tprovide a better easy route.\n\n\tDevice / driver / boot code is *currently* serial, but every few\n\tmonths someone makes noise about parallelizing boot, and IMHO, a\n\tlittle forward-thinking now is one less thing to worry about\n\tif/when that ever happens\n\nudelay\u0027s could be preempted\n\n\tSure, but if udelay plans on looping 1000 times, and it gets\n\tpreempted on loop 200, whenever it\u0027s scheduled again, it is\n\tgoing to do the next 800 loops.\n\nIs the interruptible case needed?\n\n\tProbably not, but I see usleep as a very logical parallel to msleep,\n\tso it made sense to include the \"full\" API. Processors are getting\n\tfaster (albeit not as quickly as they are becoming more parallel),\n\tso if someone wanted to be interruptible for a few usecs, why not\n\tlet them? If this is a contentious point, I\u0027m happy to remove it.\n\nOTHER THOUGHTS\n\nI believe there is also value in exposing the usleep_range option; it gives\nthe scheduler a lot more flexibility and allows the programmer to express\nhis intent much more clearly; it\u0027s something I would hope future driver\nwriters will take advantage of.\n\nTo get the results in the NUMBERS section below, I literally s/udelay/usleep\nthe kernel tree; I had to go in and undo the changes to the USB drivers, but\neverything else booted successfully; I find that extremely telling in and\nof itself -- many people are using a delay API where a sleep will suit them\njust fine.\n\nSOME ATTEMPTS AT NUMBERS\n\nIt turns out that calculating quantifiable benefit on this is challenging,\nso instead I will simply present the current state of things, and I hope\nthis to be sufficient:\n\nHow many udelay calls are there in 2.6.35-rc5?\n\n\tudealy(ARG) \u003e\u003d\t| COUNT\n\t1000\t\t| 319\n\t500\t\t| 414\n\t100\t\t| 1146\n\t20\t\t| 1832\n\nI am working on Android, so that is my focus for this. The following table\nis a modified usleep that simply printk\u0027s the amount of time requested to\nsleep; these tests were run on a kernel with udelay \u003e\u003d 20 --\u003e usleep\n\n\"boot\" is power-on to lock screen\n\"power collapse\" is when the power button is pushed and the device suspends\n\"resume\" is when the power button is pushed and the lock screen is displayed\n         (no touchscreen events or anything, just turning on the display)\n\"use device\" is from the unlock swipe to clicking around a bit; there is no\n\tsd card in this phone, so fail loading music, video, camera\n\n\tACTION\t\t| TOTAL NUMBER OF USLEEP CALLS\t| NET TIME (us)\n\tboot\t\t| 22\t\t\t\t| 1250\n\tpower-collapse\t| 9\t\t\t\t| 1200\n\tresume\t\t| 5\t\t\t\t| 500\n\tuse device\t| 59\t\t\t\t| 7700\n\nThe most interesting category to me is the \"use device\" field; 7700us of\nbusy-wait time that could be put towards better responsiveness, or at the\nleast less power usage.\n\nSigned-off-by: Patrick Pannuto \u003cppannuto@codeaurora.org\u003e\nCc: apw@canonical.com\nCc: corbet@lwn.net\nCc: arjan@linux.intel.com\nCc: Randy Dunlap \u003crdunlap@xenotime.net\u003e\nCc: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "e1b004c3ef9c59db5f013528628b51c8653155ec",
      "tree": "2c60763d361df84131852c3351c7fc0cd754614d",
      "parents": [
        "af5ab277ded04bd9bc6b048c5a2f0e7d70ef0867"
      ],
      "author": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Wed Aug 04 10:53:00 2010 +0200"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Wed Aug 04 10:53:00 2010 +0200"
      },
      "message": "Revert \"timer: Added usleep[_range] timer\"\n\nThis reverts commit 22b8f15c2f7130bb0386f548428df2ffd4e81903 to merge\nan advanced version.\n\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "22b8f15c2f7130bb0386f548428df2ffd4e81903",
      "tree": "4ed7ac08115afdce20d21bd923cd1071c2249dda",
      "parents": [
        "866e26115cba6b59cec669b6307599e3e4440491"
      ],
      "author": {
        "name": "Patrick Pannuto",
        "email": "ppannuto@codeaurora.org",
        "time": "Mon Jul 19 15:09:26 2010 -0700"
      },
      "committer": {
        "name": "Thomas Gleixner",
        "email": "tglx@linutronix.de",
        "time": "Fri Jul 23 15:08:12 2010 +0200"
      },
      "message": "timer: Added usleep[_range] timer\n\nusleep[_range] are finer precision implementations of msleep\nand are designed to be drop-in replacements for udelay where\na precise sleep / busy-wait is unnecessary. They also allow\nan easy interface to specify slack when a precise (ish)\nwakeup is unnecessary to help minimize wakeups\n\nSigned-off-by: Patrick Pannuto \u003cppannuto@codeaurora.org\u003e\nCc: akinobu.mita@gmail.com\nCc: sboyd@codeaurora.org\nAcked-by: Arjan van de Ven \u003carjan@linux.intel.com\u003e\nLKML-Reference: \u003c4C44CDD2.1070708@codeaurora.org\u003e\nSigned-off-by: Thomas Gleixner \u003ctglx@linutronix.de\u003e\n"
    },
    {
      "commit": "f3f3149f35b9195ef4b761b1353fc0766b5f53be",
      "tree": "96e67c82e8ea6ce57ce5f83a8036f87a8d534867",
      "parents": [
        "6ff10de374cc68ff2024247793176dc8a1b317ea"
      ],
      "author": {
        "name": "Alok Kataria",
        "email": "akataria@vmware.com",
        "time": "Mon Jun 23 18:21:56 2008 -0700"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Tue Jun 24 13:53:46 2008 +0200"
      },
      "message": "x86: use cpu_khz for loops_per_jiffy calculation, cleanup\n\nAs suggested by Ingo, remove all references to tsc from init/calibrate.c\n\nTSC is x86 specific, and using tsc in variable names in a generic file should\nbe avoided. lpj_tsc is now called lpj_fine, since it is related to fine tuning\nof lpj value. Also tsc_rate_*  is called timer_rate_*\n\nSigned-off-by: Alok N Kataria \u003cakataria@vmware.com\u003e\nCc: Arjan van de Ven \u003carjan@infradead.org\u003e\nCc: Daniel Hecht \u003cdhecht@vmware.com\u003e\nCc: Tim Mann \u003cmann@vmware.com\u003e\nCc: Zach Amsden \u003czach@vmware.com\u003e\nCc: Sahil Rihan \u003csrihan@vmware.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "3da757daf86e498872855f0b5e101f763ba79499",
      "tree": "bffffafed7322c66a1b886b661cfd8a8a7f5a924",
      "parents": [
        "e01b70ef3eb3080fecc35e15f68cd274c0a48163"
      ],
      "author": {
        "name": "Alok Kataria",
        "email": "akataria@vmware.com",
        "time": "Fri Jun 20 15:06:33 2008 -0700"
      },
      "committer": {
        "name": "Ingo Molnar",
        "email": "mingo@elte.hu",
        "time": "Mon Jun 23 22:51:33 2008 +0200"
      },
      "message": "x86: use cpu_khz for loops_per_jiffy calculation\n\nOn the x86 platform we can use the value of tsc_khz computed during tsc\ncalibration to calculate the loops_per_jiffy value. Its very important\nto keep the error in lpj values to minimum as any error in that may\nresult in kernel panic in check_timer. In virtualization environment, On\na highly overloaded host the guest delay calibration may sometimes\nresult in errors beyond the ~50% that timer_irq_works can handle,\nresulting in the guest panicking.\n\nDoes some formating changes to lpj_setup code to now have a single\nprintk to print the bogomips value.\n\nWe do this only for the boot processor because the AP\u0027s can have\ndifferent base frequencies or the BIOS might boot a AP at a different\nfrequency.\n\nSigned-off-by: Alok N Kataria \u003cakataria@vmware.com\u003e\nCc: Arjan van de Ven \u003carjan@infradead.org\u003e\nCc: Daniel Hecht \u003cdhecht@vmware.com\u003e\nCc: Tim Mann \u003cmann@vmware.com\u003e\nCc: Zach Amsden \u003czach@vmware.com\u003e\nCc: Sahil Rihan \u003csrihan@vmware.com\u003e\nSigned-off-by: Ingo Molnar \u003cmingo@elte.hu\u003e\n"
    },
    {
      "commit": "5cba6d22e35a05adb28fdea191b232501518c455",
      "tree": "65ebdb01d81cbe218cbdedc6e52f759a1b18cc0a",
      "parents": [
        "daa49ff50a0cd1ddf88019e9afc41e26640ab1c4"
      ],
      "author": {
        "name": "Andrew Morton",
        "email": "akpm@linux-foundation.org",
        "time": "Tue Mar 04 14:28:45 2008 -0800"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@woody.linux-foundation.org",
        "time": "Tue Mar 04 16:35:12 2008 -0800"
      },
      "message": "ndelay(): switch to C function to avoid 64-bit division\n\nWe should be able to do ndelay(some_u64), but that can cause a call to\n__divdi3() to be emitted because the ndelay() macros does a divide.\n\nFix it by switching to static inline which will force the u64 arg to be\ntreated as an unsigned long.  udelay() takes an unsigned long arg.\n\n[bunk@kernel.org: reported m68k build breakage]\nCc: Adrian Bunk \u003cbunk@kernel.org\u003e\nCc: Evgeniy Polyakov \u003cjohnpol@2ka.mipt.ru\u003e\nCc: Martin Michlmayr \u003ctbm@cyrius.com\u003e\nCc: Herbert Xu \u003cherbert@gondor.apana.org.au\u003e\nCc: Ralf Baechle \u003cralf@linux-mips.org\u003e\nCc: Thomas Gleixner \u003ctglx@linutronix.de\u003e\nCc: Ingo Molnar \u003cmingo@elte.hu\u003e\nCc: Adrian Bunk \u003cbunk@kernel.org\u003e\nSigned-off-by: Andrew Morton \u003cakpm@linux-foundation.org\u003e\nSigned-off-by: Linus Torvalds \u003ctorvalds@linux-foundation.org\u003e\n"
    },
    {
      "commit": "1e92a550e80fef01ebcc0bcd0896109cdb986c72",
      "tree": "6cdb7bc6c6ad51644f9b899b2604d26fe7cd540b",
      "parents": [
        "ddf5f75a16b3e7460ffee881795aa168dffcd0cf"
      ],
      "author": {
        "name": "Anton Blanchard",
        "email": "anton@samba.org",
        "time": "Thu Jun 15 14:11:22 2006 +1000"
      },
      "committer": {
        "name": "Paul Mackerras",
        "email": "paulus@samba.org",
        "time": "Wed Jun 21 15:01:33 2006 +1000"
      },
      "message": "[POWERPC] Fix mdelay badness on shared processor partitions\n\nOn partitioned PPC64 systems where a partition is given 1/10 of a\nprocessor, we have seen mdelay() delaying for 10 times longer than it\nshould.  The reason is that the generic mdelay(n) does n delays of 1\nmillisecond each.  However, with 1/10 of a processor, we only get a\none-millisecond timeslice every 10ms.  Thus each 1 millisecond delay\nloop ends up taking 10ms elapsed time.\n\nThe solution is just to use the PPC64 udelay function, which uses the\ntimebase to ensure that the delay is based on elapsed time rather than\nhow much processing time the partition has been given.  (Yes, the\ngeneric mdelay uses the PPC64 udelay, but the problem is that the\nstart time gets reset every millisecond, and each time it gets reset\nwe lose another 9ms.)\n\nSigned-off-by: Anton Blanchard \u003canton@samba.org\u003e\nSigned-off-by: Paul Mackerras \u003cpaulus@samba.org\u003e\nAcked-by: Andrew Morton \u003cakpm@osdl.org\u003e\n"
    },
    {
      "commit": "1da177e4c3f41524e886b7f1b8a0c1fc7321cac2",
      "tree": "0bba044c4ce775e45a88a51686b5d9f90697ea9d",
      "parents": [],
      "author": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "committer": {
        "name": "Linus Torvalds",
        "email": "torvalds@ppc970.osdl.org",
        "time": "Sat Apr 16 15:20:36 2005 -0700"
      },
      "message": "Linux-2.6.12-rc2\n\nInitial git repository build. I\u0027m not bothering with the full history,\neven though we have it. We can create a separate \"historical\" git\narchive of that later if we want to, and in the meantime it\u0027s about\n3.2GB when imported into git - space that would just make the early\ngit days unnecessarily complicated, when we don\u0027t have a lot of good\ninfrastructure for it.\n\nLet it rip!\n"
    }
  ]
}
