aboutsummaryrefslogtreecommitdiffstats
BranchCommit messageAuthorAge
archive/unc-master-3.0P-FP: fix BUG_ON releated to priority inheritanceBjoern Brandenburg13 years
archived-2013.1uncachedev: mmap memory that is not cached by CPUsGlenn Elliott12 years
archived-private-masterMerge branch 'wip-2.6.34' into old-private-masterAndrea Bastoni15 years
archived-semi-partMerge branch 'wip-semi-part' of ssh://cvs/cvs/proj/litmus/repo/litmus2010 int...Andrea Bastoni15 years
demoFurther refinementsJonathan Herman14 years
ecrts-pgm-finalMerge branch 'wip-ecrts14-pgm' of ssh://rtsrv.cs.unc.edu/home/litmus/litmus-r...Glenn Elliott12 years
ecrts14-pgm-finalMerge branch 'wip-ecrts14-pgm' of ssh://rtsrv.cs.unc.edu/home/litmus/litmus-r...Glenn Elliott12 years
gpusync-rtss12Final GPUSync implementation.Glenn Elliott12 years
gpusync/stagingRename IKGLP R2DGLP.Glenn Elliott12 years
linux-tipMerge branch 'slab/urgent' of git://git.kernel.org/pub/scm/linux/kernel/git/p...Linus Torvalds15 years
litmus2008-patch-seriesadd i386 feather-trace implementationBjoern B. Brandenburg16 years
masterPSN-EDF: use inferred_sporadic_job_release_atBjoern Brandenburg9 years
pgmmake it compileGlenn Elliott12 years
prop/litmus-signalsInfrastructure for Litmus signals.Glenn Elliott13 years
prop/robust-tie-breakFixed bug in edf_higher_prio().Glenn Elliott13 years
stagingFix tracepoint compilation errorFelipe Cerqueira13 years
test9/23/2016Namhoon Kim9 years
tracing-develTest kernel tracing events capabilitiesAndrea Bastoni16 years
v2.6.34-with-arm-patchessmsc911x: Add spinlocks around registers accessCatalin Marinas15 years
v2015.1Add ARM syscall def for get_current_budgetBjoern Brandenburg10 years
wip-2011.2-bbbLitmus core: simplify np-section protocolBjoern B. Brandenburg14 years
wip-2011.2-bbb-traceRefactor sched_trace_log_message() -> debug_trace_log_message()Andrea Bastoni14 years
wip-2012.3-gpuSOBLIV draining support for C-EDF.Glenn Elliott12 years
wip-2012.3-gpu-preportpick up last C-RM fileGlenn Elliott12 years
wip-2012.3-gpu-rtss13Fix critical bug in GPU tracker.Glenn Elliott12 years
wip-2012.3-gpu-sobliv-budget-w-ksharkProper sobliv draining and many bug fixes.Glenn Elliott12 years
wip-aedzl-finalMake it easier to compile AEDZL interfaces in liblitmus.Glenn Elliott15 years
wip-aedzl-revisedAdd sched_trace data for Apative EDZLGlenn Elliott15 years
wip-arbit-deadlineFix compilation bug.Glenn Elliott13 years
wip-aux-tasksDescription of refined aux task inheritance.Glenn Elliott13 years
wip-bbbGSN-EDF & Core: improve debug TRACE'ing for NP sectionsBjoern B. Brandenburg14 years
wip-bbb-prio-donuse correct timestampBjoern B. Brandenburg14 years
wip-better-breakImplement hash-based EDF tie-breaking.Glenn Elliott13 years
wip-binary-heapMake C-EDF work with simplified binheap_deleteGlenn Elliott13 years
wip-budgetAdded support for choices in budget policy enforcement.Glenn Elliott15 years
wip-colorSummarize schedulability with final recordJonathan Herman13 years
wip-color-jlhsched_color: Fixed two bugs causing crashing on experiment restart and a rare...Jonathan Herman13 years
wip-d10-hz1000Enable HZ=1000 on District 10Bjoern B. Brandenburg15 years
wip-default-clusteringFeature: Make default C-EDF clustering compile-time configurable.Glenn Elliott15 years
wip-dissipation-jericksoUpdate from 2.6.36 to 2.6.36.4Jeremy Eric/* * The DSP56001 Device Driver, saviour of the Free World(tm) * * Authors: Fredrik Noring <noring@nocrew.org> * lars brinkhoff <lars@nocrew.org> * Tomas Berndtsson <tomas@nocrew.org> * * First version May 1996 * * History: * 97-01-29 Tomas Berndtsson, * Integrated with Linux 2.1.21 kernel sources. * 97-02-15 Tomas Berndtsson, * Fixed for kernel 2.1.26 * * BUGS: * Hmm... there must be something here :) * * Copyright (C) 1996,1997 Fredrik Noring, lars brinkhoff & Tomas Berndtsson * * This file is subject to the terms and conditions of the GNU General Public * License. See the file COPYING in the main directory of this archive * for more details. */ #include <linux/module.h> #include <linux/major.h> #include <linux/types.h> #include <linux/errno.h> #include <linux/delay.h> /* guess what */ #include <linux/fs.h> #include <linux/mm.h> #include <linux/init.h> #include <linux/device.h> #include <linux/mutex.h> #include <linux/firmware.h> #include <linux/platform_device.h> #include <linux/uaccess.h> /* For put_user and get_user */ #include <asm/atarihw.h> #include <asm/traps.h> #include <asm/dsp56k.h> /* minor devices */ #define DSP56K_DEV_56001 0 /* The only device so far */ #define TIMEOUT 10 /* Host port timeout in number of tries */ #define MAXIO 2048 /* Maximum number of words before sleep */ #define DSP56K_MAX_BINARY_LENGTH (3*64*1024) #define DSP56K_TX_INT_ON dsp56k_host_interface.icr |= DSP56K_ICR_TREQ #define DSP56K_RX_INT_ON dsp56k_host_interface.icr |= DSP56K_ICR_RREQ #define DSP56K_TX_INT_OFF dsp56k_host_interface.icr &= ~DSP56K_ICR_TREQ #define DSP56K_RX_INT_OFF dsp56k_host_interface.icr &= ~DSP56K_ICR_RREQ #define DSP56K_TRANSMIT (dsp56k_host_interface.isr & DSP56K_ISR_TXDE) #define DSP56K_RECEIVE (dsp56k_host_interface.isr & DSP56K_ISR_RXDF) #define handshake(count, maxio, timeout, ENABLE, f) \ { \ long i, t, m; \ while (count > 0) { \ m = min_t(unsigned long, count, maxio); \ for (i = 0; i < m; i++) { \ for (t = 0; t < timeout && !ENABLE; t++) \ msleep(20); \ if(!ENABLE) \ return -EIO; \ f; \ } \ count -= m; \ if (m == maxio) msleep(20); \ } \ } #define tx_wait(n) \ { \ int t; \ for(t = 0; t < n && !DSP56K_TRANSMIT; t++) \ msleep(10); \ if(!DSP56K_TRANSMIT) { \ return -EIO; \ } \ } #define rx_wait(n) \ { \ int t; \ for(t = 0; t < n && !DSP56K_RECEIVE; t++) \ msleep(10); \ if(!DSP56K_RECEIVE) { \ return -EIO; \ } \ } static DEFINE_MUTEX(dsp56k_mutex); static struct dsp56k_device { unsigned long in_use; long maxio, timeout; int tx_wsize, rx_wsize; } dsp56k; static struct class *dsp56k_class; static int dsp56k_reset(void) { u_char status; /* Power down the DSP */ sound_ym.rd_data_reg_sel = 14; status = sound_ym.rd_data_reg_sel & 0xef; sound_ym.wd_data = status; sound_ym.wd_data = status | 0x10; udelay(10); /* Power up the DSP */ sound_ym.rd_data_reg_sel = 14; sound_ym.wd_data = sound_ym.rd_data_reg_sel & 0xef; return 0; } static int dsp56k_upload(u_char __user *bin, int len) { struct platform_device *pdev; const struct firmware *fw; const char fw_name[] = "dsp56k/bootstrap.bin"; int err; int i; dsp56k_reset(); pdev = platform_device_register_simple("dsp56k", 0, NULL, 0); if (IS_ERR(pdev)) { printk(KERN_ERR "Failed to register device for \"%s\"\n", fw_name); return -EINVAL; } err = request_firmware(&fw, fw_name, &pdev->dev); platform_device_unregister(pdev); if (err) { printk(KERN_ERR "Failed to load image \"%s\" err %d\n", fw_name, err); return err; } if (fw->size % 3) { printk(KERN_ERR "Bogus length %d in image \"%s\"\n", fw->size, fw_name); release_firmware(fw); return -EINVAL; } for (i = 0; i < fw->size; i = i + 3) { /* tx_wait(10); */ dsp56k_host_interface.data.b[1] = fw->data[i]; dsp56k_host_interface.data.b[2] = fw->data[i + 1]; dsp56k_host_interface.data.b[3] = fw->data[i + 2]; } release_firmware(fw); for (; i < 512; i++) { /* tx_wait(10); */ dsp56k_host_interface.data.b[1] = 0; dsp56k_host_interface.data.b[2] = 0; dsp56k_host_interface.data.b[3] = 0; } for (i = 0; i < len; i++) { tx_wait(10); get_user(dsp56k_host_interface.data.b[1], bin++); get_user(dsp56k_host_interface.data.b[2], bin++); get_user(dsp56k_host_interface.data.b[3], bin++); } tx_wait(10); dsp56k_host_interface.data.l = 3; /* Magic execute */ return 0; } static ssize_t dsp56k_read(struct file *file, char __user *buf, size_t count, loff_t *ppos) { struct inode *inode = file_inode(file); int dev = iminor(inode) & 0x0f; switch(dev) { case DSP56K_DEV_56001: { long n; /* Don't do anything if nothing is to be done */ if (!count) return 0; n = 0; switch (dsp56k.rx_wsize) { case 1: /* 8 bit */ { handshake(count, dsp56k.maxio, dsp56k.timeout, DSP56K_RECEIVE, put_user(dsp56k_host_interface.data.b[3], buf+n++)); return n; } case 2: /* 16 bit */ { short __user *data; count /= 2; data = (short __user *) buf; handshake(count, dsp56k.maxio, dsp56k.timeout, DSP56K_RECEIVE, put_user(dsp56k_host_interface.data.w[1], data+n++)); return 2*n; } case 3: /* 24 bit */ { count /= 3; handshake(count, dsp56k.maxio, dsp56k.timeout, DSP56K_RECEIVE, put_user(dsp56k_host_interface.data.b[1], buf+n++); put_user(dsp56k_host_interface.data.b[2], buf+n++); put_user(dsp56k_host_interface.data.b[3], buf+n++)); return 3*n; } case 4: /* 32 bit */ { long __user *data; count /= 4; data = (long __user *) buf; handshake(count, dsp56k.maxio, dsp56k.timeout, DSP56K_RECEIVE, put_user(dsp56k_host_interface.data.l, data+n++)); return 4*n; } } return -EFAULT; } default: printk(KERN_ERR "DSP56k driver: Unknown minor device: %d\n", dev); return -ENXIO; } } static ssize_t dsp56k_write(struct file *file, const char __user *buf, size_t count, loff_t *ppos) { struct inode *inode = file_inode(file); int dev = iminor(inode) & 0x0f; switch(dev) { case DSP56K_DEV_56001: { long n; /* Don't do anything if nothing is to be done */ if (!count) return 0; n = 0; switch (dsp56k.tx_wsize) { case 1: /* 8 bit */ { handshake(count, dsp56k.maxio, dsp56k.timeout, DSP56K_TRANSMIT, get_user(dsp56k_host_interface.data.b[3], buf+n++)); return n; } case 2: /* 16 bit */ { const short __user *data; count /= 2; data = (const short __user *)buf; handshake(count, dsp56k.maxio, dsp56k.timeout, DSP56K_TRANSMIT, get_user(dsp56k_host_interface.data.w[1], data+n++)); return 2*n; } case 3: /* 24 bit */ { count /= 3; handshake(count, dsp56k.maxio, dsp56k.timeout, DSP56K_TRANSMIT, get_user(dsp56k_host_interface.data.b[1], buf+n++); get_user(dsp56k_host_interface.data.b[2], buf+n++); get_user(dsp56k_host_interface.data.b[3], buf+n++)); return 3*n; } case 4: /* 32 bit */ { const long __user *data; count /= 4; data = (const long __user *)buf; handshake(count, dsp56k.maxio, dsp56k.timeout, DSP56K_TRANSMIT, get_user(dsp56k_host_interface.data.l, data+n++)); return 4*n; } } return -EFAULT; } default: printk(KERN_ERR "DSP56k driver: Unknown minor device: %d\n", dev); return -ENXIO; } } static long dsp56k_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { int dev = iminor(file_inode(file)) & 0x0f; void __user *argp = (void __user *)arg; switch(dev) { case DSP56K_DEV_56001: switch(cmd) { case DSP56K_UPLOAD: { char __user *bin; int r, len; struct dsp56k_upload __user *binary = argp; if(get_user(len, &binary->len) < 0) return -EFAULT; if(get_user(bin, &binary->bin) < 0) return -EFAULT; if (len == 0) { return -EINVAL; /* nothing to upload?!? */ } if (len > DSP56K_MAX_BINARY_LENGTH) { return -EINVAL; } mutex_lock(&dsp56k_mutex); r = dsp56k_upload(bin, len); mutex_unlock(&dsp56k_mutex); if (r < 0) { return r; } break; } case DSP56K_SET_TX_WSIZE: if (arg > 4 || arg < 1) return -EINVAL; mutex_lock(&dsp56k_mutex); dsp56k.tx_wsize = (int) arg; mutex_unlock(&dsp56k_mutex); break; case DSP56K_SET_RX_WSIZE: if (arg > 4 || arg < 1) return -EINVAL; mutex_lock(&dsp56k_mutex); dsp56k.rx_wsize = (int) arg; mutex_unlock(&dsp56k_mutex); break; case DSP56K_HOST_FLAGS: { int dir, out, status; struct dsp56k_host_flags __user *hf = argp; if(get_user(dir, &hf->dir) < 0) return -EFAULT; if(get_user(out, &hf->out) < 0) return -EFAULT; mutex_lock(&dsp56k_mutex); if ((dir & 0x1) && (out & 0x1)) dsp56k_host_interface.icr |= DSP56K_ICR_HF0; else if (dir & 0x1) dsp56k_host_interface.icr &= ~DSP56K_ICR_HF0; if ((dir & 0x2) && (out & 0x2)) dsp56k_host_interface.icr |= DSP56K_ICR_HF1; else if (dir & 0x2) dsp56k_host_interface.icr &= ~DSP56K_ICR_HF1; status = 0; if (dsp56k_host_interface.icr & DSP56K_ICR_HF0) status |= 0x1; if (dsp56k_host_interface.icr & DSP56K_ICR_HF1) status |= 0x2; if (dsp56k_host_interface.isr & DSP56K_ISR_HF2) status |= 0x4; if (dsp56k_host_interface.isr & DSP56K_ISR_HF3) status |= 0x8; mutex_unlock(&dsp56k_mutex); return put_user(status, &hf->status); } case DSP56K_HOST_CMD: if (arg > 31 || arg < 0) return -EINVAL; mutex_lock(&dsp56k_mutex); dsp56k_host_interface.cvr = (u_char)((arg & DSP56K_CVR_HV_MASK) | DSP56K_CVR_HC); mutex_unlock(&dsp56k_mutex); break; default: return -EINVAL; } return 0; default: printk(KERN_ERR "DSP56k driver: Unknown minor device: %d\n", dev); return -ENXIO; } } /* As of 2.1.26 this should be dsp56k_poll, * but how do I then check device minor number? * Do I need this function at all??? */ #if 0 static unsigned int dsp56k_poll(struct file *file, poll_table *wait) { int dev = iminor(file_inode(file)) & 0x0f; switch(dev) { case DSP56K_DEV_56001: /* poll_wait(file, ???, wait); */ return POLLIN | POLLRDNORM | POLLOUT; default: printk("DSP56k driver: Unknown minor device: %d\n", dev); return 0; } } #endif static int dsp56k_open(struct inode *inode, struct file *file) { int dev = iminor(inode) & 0x0f; int ret = 0; mutex_lock(&dsp56k_mutex); switch(dev) { case DSP56K_DEV_56001: if (test_and_set_bit(0, &dsp56k.in_use)) { ret = -EBUSY; goto out; } dsp56k.timeout = TIMEOUT; dsp56k.maxio = MAXIO; dsp56k.rx_wsize = dsp56k.tx_wsize = 4; DSP56K_TX_INT_OFF; DSP56K_RX_INT_OFF; /* Zero host flags */ dsp56k_host_interface.icr &= ~DSP56K_ICR_HF0; dsp56k_host_interface.icr &= ~DSP56K_ICR_HF1; break; default: ret = -ENODEV; } out: mutex_unlock(&dsp56k_mutex); return ret; } static int dsp56k_release(struct inode *inode, struct file *file) { int dev = iminor(inode) & 0x0f; switch(dev) { case DSP56K_DEV_56001: clear_bit(0, &dsp56k.in_use); break; default: printk(KERN_ERR "DSP56k driver: Unknown minor device: %d\n", dev); return -ENXIO; } return 0; } static const struct file_operations dsp56k_fops = { .owner = THIS_MODULE, .read = dsp56k_read, .write = dsp56k_write, .unlocked_ioctl = dsp56k_ioctl, .open = dsp56k_open, .release = dsp56k_release, .llseek = noop_llseek, }; /****** Init and module functions ******/ static char banner[] __initdata = KERN_INFO "DSP56k driver installed\n"; static int __init dsp56k_init_driver(void) { int err = 0; if(!MACH_IS_ATARI || !ATARIHW_PRESENT(DSP56K)) { printk("DSP56k driver: Hardware not present\n"); return -ENODEV; } if(register_chrdev(DSP56K_MAJOR, "dsp56k", &dsp56k_fops)) { printk("DSP56k driver: Unable to register driver\n"); return -ENODEV; } dsp56k_class = class_create(THIS_MODULE, "dsp56k"); if (IS_ERR(dsp56k_class)) { err = PTR_ERR(dsp56k_class); goto out_chrdev; } device_create(dsp56k_class, NULL, MKDEV(DSP56K_MAJOR, 0), NULL, "dsp56k"); printk(banner); goto out; out_chrdev: unregister_chrdev(DSP56K_MAJOR, "dsp56k"); out: return err; } module_init(dsp56k_init_driver); static void __exit dsp56k_cleanup_driver(void) { device_destroy(dsp56k_class, MKDEV(DSP56K_MAJOR, 0)); class_destroy(dsp56k_class); unregister_chrdev(DSP56K_MAJOR, "dsp56k"); } module_exit(dsp56k_cleanup_driver); MODULE_LICENSE("GPL"); MODULE_FIRMWARE("dsp56k/bootstrap.bin");
an> v2.6.28-rc4commit f7160c7573...Linus Torvalds17 years v2.6.28-rc3commit 45beca08dd...Linus Torvalds17 years v2.6.28-rc2commit 0173a3265b...Linus Torvalds17 years v2.6.28-rc1commit 57f8f7b60d...Linus Torvalds17 years v2.6.27commit 3fa8749e58...Linus Torvalds17 years v2.6.27-rc9commit 4330ed8ed4...Linus Torvalds17 years v2.6.27-rc8commit 94aca1dac6...Linus Torvalds17 years v2.6.27-rc7commit 72d31053f6...Linus Torvalds17 years v2.6.27-rc6commit adee14b2e1...Linus Torvalds17 years v2.6.27-rc5commit 24342c34a0...Linus Torvalds17 years v2.6.27-rc4commit 6a55617ed5...Linus Torvalds17 years v2.6.27-rc3commit 30a2f3c60a...Linus Torvalds17 years v2.6.27-rc2commit 0967d61ea0...Linus Torvalds17 years v2.6.27-rc1commit 6e86841d05...Linus Torvalds17 years v2.6.26commit bce7f793da...Linus Torvalds17 years v2.6.26-rc9commit b7279469d6...Linus Torvalds17 years v2.6.26-rc8commit 543cf4cb3f...Linus Torvalds17 years v2.6.26-rc7commit d70ac829b7...Linus Torvalds17 years v2.6.26-rc6commit 5dd34572ad...Linus Torvalds17 years v2.6.26-rc5commit 53c8ba9540...Linus Torvalds17 years v2.6.26-rc4commit e490517a03...Linus Torvalds17 years v2.6.26-rc3commit b8291ad07a...Linus Torvalds17 years v2.6.26-rc2commit 492c2e476e...Linus Torvalds17 years v2.6.26-rc1commit 2ddcca36c8...Linus Torvalds17 years v2.6.25commit 4b119e21d0...Linus Torvalds17 years v2.6.25-rc9commit 120dd64cac...Linus Torvalds17 years v2.6.25-rc8commit 0e81a8ae37...Linus Torvalds17 years v2.6.25-rc7commit 05dda977f2...Linus Torvalds17 years v2.6.25-rc6commit a978b30af3...Linus Torvalds18 years v2.6.25-rc5commit cdeeeae056...Linus Torvalds18 years v2.6.25-rc4commit 29e8c3c304...Linus Torvalds18 years v2.6.25-rc3commit bfa274e243...Linus Torvalds18 years v2.6.25-rc2commit 101142c37b...Linus Torvalds18 years v2.6.25-rc1commit 19af35546d...Linus Torvalds18 years v2.6.24commit 49914084e7...Linus Torvalds18 years v2.6.24-rc8commit cbd9c88369...Linus Torvalds18 years v2.6.24-rc7commit 3ce5445046...Linus Torvalds18 years v2.6.24-rc6commit ea67db4cdb...Linus Torvalds18 years v2.6.24-rc5commit 82d29bf6dc...Linus Torvalds18 years v2.6.24-rc4commit 09b56adc98...Linus Torvalds18 years v2.6.24-rc3commit d9f8bcbf67...Linus Torvalds18 years v2.6.24-rc2commit dbeeb816e8...Linus Torvalds18 years v2.6.24-rc1commit c9927c2bf4...Linus Torvalds18 years v2.6.23commit bbf25010f1...Linus Torvalds18 years v2.6.23-rc9commit 3146b39c18...Linus Torvalds18 years v2.6.23-rc8commit 4942de4a0e...Linus Torvalds18 years v2.6.23-rc7commit 81cfe79b9c...Linus Torvalds18 years v2.6.23-rc6commit 0d4cbb5e7f...Linus Torvalds18 years v2.6.23-rc5commit 40ffbfad6b...Linus Torvalds18 years v2.6.23-rc4commit b07d68b5ca...Linus Torvalds18 years v2.6.23-rc3commit 39d3520c92...Linus Torvalds18 years v2.6.23-rc2commit d4ac2477fa...Linus Torvalds18 years v2.6.23-rc1commit f695baf2df...Linus Torvalds18 years v2.6.22commit 7dcca30a32...Linus Torvalds18 years v2.6.22-rc7commit a38d6181ff...Linus Torvalds18 years v2.6.22-rc6commit 189548642c...Linus Torvalds18 years v2.6.22-rc5commit 188e1f81ba...Linus Torvalds18 years v2.6.22-rc4commit 5ecd3100e6...Linus Torvalds18 years v2.6.22-rc3commit c420bc9f09...Linus Torvalds18 years v2.6.22-rc2commit 55b637c6a0...Linus Torvalds18 years v2.6.22-rc1commit 39403865d2...Linus Torvalds18 years v2.6.21commit de46c33745...Linus Torvalds18 years v2.6.21-rc7commit 94a05509a9...Linus Torvalds18 years v2.6.21-rc6commit a21bd69e15...Linus Torvalds18 years v2.6.21-rc5commit e0f2e3a06b...Linus Torvalds18 years v2.6.21-rc4commit db98e0b434...Linus Torvalds19 years v2.6.21-rc3commit 08e15e81a4...Linus Torvalds19 years v2.6.21-rc2commit 606135a308...Linus Torvalds19 years v2.6.21-rc1commit c8f71b01a5...Linus Torvalds19 years v2.6.20commit 62d0cfcb27...Linus Torvalds19 years v2.6.20-rc7commit f56df2f4db...Linus Torvalds19 years v2.6.20-rc6commit 99abfeafb5...Linus Torvalds19 years v2.6.20-rc5commit a8b3485287...Linus Torvalds19 years v2.6.20-rc4commit bf81b46482...Linus Torvalds19 years v2.6.20-rc3commit 669df1b478...Linus Torvalds19 years v2.6.20-rc2commit 3bf8ba38f3...Linus Torvalds19 years v2.6.20-rc1commit cc016448b0...Linus Torvalds19 years v2.6.19commit 0215ffb08c...Linus Torvalds19 years v2.6.19-rc6commit 44597f65f6...Linus Torvalds19 years v2.6.19-rc5commit 80c2188127...Linus Torvalds19 years v2.6.19-rc4commit ae99a78af3...Linus Torvalds19 years v2.6.19-rc3commit 7059abedd2...Linus Torvalds19 years v2.6.19-rc2commit b4bd8c6643...Linus Torvalds19 years v2.6.19-rc1commit d223a60106...Linus Torvalds19 years v2.6.18commit e478bec0ba...Linus Torvalds19 years v2.6.18-rc7commit 95064a75eb...Linus Torvalds19 years v2.6.18-rc6commit c336923b66...Linus Torvalds19 years v2.6.18-rc5commit 60d4684068...Linus Torvalds19 years v2.6.18-rc4commit 9f737633e6...Linus Torvalds19 years v2.6.18-rc3commit b6ff50833a...Linus Torvalds19 years v2.6.18-rc2commit 82d6897fef...Linus Torvalds19 years v2.6.18-rc1commit 120bda20c6...Linus Torvalds19 years v2.6.17commit 427abfa28a...Linus Torvalds19 years v2.6.17-rc6commit 1def630a6a...Linus Torvalds19 years v2.6.17-rc5commit a8bd60705a...Linus Torvalds19 years v2.6.17-rc4commit d8c3291c73...Linus Torvalds19 years v2.6.17-rc3commit 2be4d50295...Linus Torvalds19 years v2.6.17-rc2commit 8bbde0e6d5...Linus Torvalds19 years v2.6.17-rc1commit 6246b6128b...Linus Torvalds19 years v2.6.16commit 7705a8792b...Linus Torvalds20 years v2.6.16-rc6commit 535744878e...Linus Torvalds20 years v2.6.16-rc5commit b9a33cebac...Linus Torvalds20 years v2.6.16-rc4commit bd71c2b174...Linus Torvalds20 years v2.6.16-rc3commit e9bb4c9929...Linus Torvalds20 years v2.6.16-rc2commit 826eeb53a6...Linus Torvalds20 years v2.6.16-rc1commit 2664b25051...Linus Torvalds20 years v2.6.15commit 88026842b0...Linus Torvalds20 years v2.6.15-rc7commit f89f5948fc...Linus Torvalds20 years v2.6.15-rc6commit df7addbb45...Linus Torvalds20 years v2.6.15-rc5commit 436b0f76f2...Linus Torvalds20 years v2.6.15-rc4commit 5666c0947e...Linus Torvalds20 years v2.6.15-rc3commit 624f54be20...Linus Torvalds20 years v2.6.15-rc2commit 3bedff1d73...Linus Torvalds20 years v2.6.15-rc1commit cd52d1ee9a...Linus Torvalds20 years v2.6.14commit 741b2252a5...Linus Torvalds20 years v2.6.14-rc5commit 93918e9afc...Linus Torvalds20 years v2.6.14-rc4commit 907a426179...Linus Torvalds20 years v2.6.14-rc3commit 1c9426e8a5...Linus Torvalds20 years v2.6.14-rc2commit 676d55ae30...Linus Torvalds20 years v2.6.14-rc1commit 2f4ba45a75...Linus Torvalds20 years v2.6.13commit 02b3e4e2d7...Linus Torvalds20 years v2.6.13-rc7commit 0572e3da3f...Linus Torvalds20 years v2.6.13-rc6commit 6fc32179de...Linus Torvalds20 years v2.6.13-rc5commit 9a351e30d7...Linus Torvalds20 years v2.6.13-rc4commit 6395352334...Linus Torvalds20 years v2.6.11tree c39ae07f39... v2.6.11-treetree c39ae07f39... v2.6.12commit 9ee1c939d1... v2.6.12-rc2commit 1da177e4c3... v2.6.12-rc3commit a2755a80f4... v2.6.12-rc4commit 88d7bd8cb9... v2.6.12-rc5commit 2a24ab628a... v2.6.12-rc6commit 7cef5677ef... v2.6.13-rc1commit 4c91aedb75... v2.6.13-rc2commit a18bcb7450... v2.6.13-rc3commit c32511e271...