From: Andrew Morton <akpm@linux-foundation.org>
To: Jeff Garzik <jeff@garzik.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
linux-ide@vger.kernel.org, LKML <linux-kernel@vger.kernel.org>
Subject: Re: [git patches] libata fixes
Date: Fri, 16 Jan 2009 09:31:01 -0800 [thread overview]
Message-ID: <20090116093101.6d77b69b.akpm@linux-foundation.org> (raw)
In-Reply-To: <20090116152721.GA6994@havoc.gtf.org>
On Fri, 16 Jan 2009 10:27:21 -0500 Jeff Garzik <jeff@garzik.org> wrote:
>
> And a new, oft-reposted, finally ready cfl driver.
>
> The ioctl fix is notable, an ugly bug.
>
> Please pull from 'upstream-linus' branch of
> master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev.git upstream-linus
>
> to receive the following updates:
>
> ...
>
> Andrew Morton (1):
> drivers/ata/pata_ali.c: s/isa_bridge/ali_isa_bridge/ to fix alpha build
hi, mom.
>
> ...
>
> -static int atiixp_init_one(struct pci_dev *dev, const struct pci_device_id *id)
> +static int atiixp_init_one(struct pci_dev *pdev, const struct pci_device_id *id)
> {
> static const struct ata_port_info info = {
> .flags = ATA_FLAG_SLAVE_POSS,
> @@ -241,8 +225,18 @@ static int atiixp_init_one(struct pci_dev *dev, const struct pci_device_id *id)
> .udma_mask = 0x3F,
> .port_ops = &atiixp_port_ops
> };
> - const struct ata_port_info *ppi[] = { &info, NULL };
> - return ata_pci_sff_init_one(dev, ppi, &atiixp_sht, NULL);
> + static const struct pci_bits atiixp_enable_bits[] = {
> + { 0x48, 1, 0x01, 0x00 },
> + { 0x48, 1, 0x08, 0x00 }
> + };
> + const struct ata_port_info *ppi[] = { &info, &info };
> + int i;
> +
> + for (i = 0; i < 2; i++)
s/2/ARRAY_SIZE/
> + if (!pci_test_config_bits(pdev, &atiixp_enable_bits[i]))
> + ppi[i] = &ata_dummy_port_info;
> +
> + return ata_pci_sff_init_one(pdev, ppi, &atiixp_sht, NULL);
> }
>
>
> ...
>
> --- /dev/null
> +++ b/drivers/ata/pata_octeon_cf.c
> @@ -0,0 +1,965 @@
> +/*
> + * Driver for the Octeon bootbus compact flash.
> + *
> + * 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.
> + *
> + * Copyright (C) 2005 - 2009 Cavium Networks
> + * Copyright (C) 2008 Wind River Systems
> + */
> +
> +#include <linux/kernel.h>
> +#include <linux/module.h>
> +#include <linux/libata.h>
> +#include <linux/irq.h>
> +#include <linux/platform_device.h>
> +#include <linux/workqueue.h>
> +#include <scsi/scsi_host.h>
> +
> +#include <asm/octeon/octeon.h>
> +
> +/*
> + * The Octeon bootbus compact flash interface is connected in at least
> + * 3 different configurations on various evaluation boards:
> + *
> + * -- 8 bits no irq, no DMA
> + * -- 16 bits no irq, no DMA
> + * -- 16 bits True IDE mode with DMA, but no irq.
> + *
> + * In the last case the DMA engine can generate an interrupt when the
> + * transfer is complete. For the first two cases only PIO is supported.
> + *
> + */
> +
> +#define DRV_NAME "pata_octeon_cf"
> +#define DRV_VERSION "2.1"
> +
> +
> +struct octeon_cf_port {
> + struct workqueue_struct *wq;
> + struct delayed_work delayed_finish;
> + struct ata_port *ap;
> + int dma_finished;
> +};
> +
> +static struct scsi_host_template octeon_cf_sht = {
> + ATA_PIO_SHT(DRV_NAME),
> +};
> +
> +/**
> + * Convert nanosecond based time to setting used in the
> + * boot bus timing register, based on timing multiple
> + */
There are comments in this file which use the kerneldoc token, but
which aren't in kerneldoc format.
> +static unsigned int ns_to_tim_reg(unsigned int tim_mult, unsigned int nsecs)
> +{
> + unsigned int val;
> +
> + /*
> + * Compute # of eclock periods to get desired duration in
> + * nanoseconds.
> + */
> + val = DIV_ROUND_UP(nsecs * (octeon_get_clock_rate() / 1000000),
> + 1000 * tim_mult);
> +
> + return val;
> +}
>
There's great potential for overflows here, but I couldn't be bothered
picking through it. Are we sure that it's watertight?
There's a 64-bit divide in there. Will it link on 32-bit platforms?
Or is this all 64-bit-only code?
wtf is an octeon anyway? (greps). Some MIPS thing. I guess it's
64-bit-only.
> +static void octeon_cf_set_boot_reg_cfg(int cs)
> +{
> + union cvmx_mio_boot_reg_cfgx reg_cfg;
> + reg_cfg.u64 = cvmx_read_csr(CVMX_MIO_BOOT_REG_CFGX(cs));
> + reg_cfg.s.dmack = 0; /* Don't assert DMACK on access */
> + reg_cfg.s.tim_mult = 2; /* Timing mutiplier 2x */
> + reg_cfg.s.rd_dly = 0; /* Sample on falling edge of BOOT_OE */
> + reg_cfg.s.sam = 0; /* Don't combine write and output enable */
> + reg_cfg.s.we_ext = 0; /* No write enable extension */
> + reg_cfg.s.oe_ext = 0; /* No read enable extension */
> + reg_cfg.s.en = 1; /* Enable this region */
> + reg_cfg.s.orbit = 0; /* Don't combine with previous region */
> + reg_cfg.s.ale = 0; /* Don't do address multiplexing */
> + cvmx_write_csr(CVMX_MIO_BOOT_REG_CFGX(cs), reg_cfg.u64);
> +}
> +
> +/**
> + * Called after libata determines the needed PIO mode. This
> + * function programs the Octeon bootbus regions to support the
> + * timing requirements of the PIO mode.
> + *
> + * @ap: ATA port information
> + * @dev: ATA device
> + */
That's getting more kerneldoccy, but isn't there yet.
> +static void octeon_cf_set_piomode(struct ata_port *ap, struct ata_device *dev)
> +{
> + struct octeon_cf_data *ocd = ap->dev->platform_data;
> + union cvmx_mio_boot_reg_timx reg_tim;
> + int cs = ocd->base_region;
> + int T;
> + struct ata_timing timing;
> +
> + int use_iordy;
> + int trh;
> + int pause;
> + /* These names are timing parameters from the ATA spec */
> + int t1;
> + int t2;
> + int t2i;
> +
> + T = (int)(2000000000000LL / octeon_get_clock_rate());
64/64 divide.
> + if (ata_timing_compute(dev, dev->pio_mode, &timing, T, T))
> + BUG();
> +
> + t1 = timing.setup;
> + if (t1)
> + t1--;
> + t2 = timing.active;
> + if (t2)
> + t2--;
> + t2i = timing.act8b;
> + if (t2i)
> + t2i--;
> +
> + trh = ns_to_tim_reg(2, 20);
> + if (trh)
> + trh--;
> +
> + pause = timing.cycle - timing.active - timing.setup - trh;
> + if (pause)
> + pause--;
> +
> + octeon_cf_set_boot_reg_cfg(cs);
> + if (ocd->dma_engine >= 0)
> + /* True IDE mode, program both chip selects. */
> + octeon_cf_set_boot_reg_cfg(cs + 1);
> +
> +
> + use_iordy = ata_pio_need_iordy(dev);
> +
> + reg_tim.u64 = cvmx_read_csr(CVMX_MIO_BOOT_REG_TIMX(cs));
> + /* Disable page mode */
> + reg_tim.s.pagem = 0;
> + /* Enable dynamic timing */
> + reg_tim.s.waitm = use_iordy;
> + /* Pages are disabled */
> + reg_tim.s.pages = 0;
> + /* We don't use multiplexed address mode */
> + reg_tim.s.ale = 0;
> + /* Not used */
> + reg_tim.s.page = 0;
> + /* Time after IORDY to coninue to assert the data */
> + reg_tim.s.wait = 0;
> + /* Time to wait to complete the cycle. */
> + reg_tim.s.pause = pause;
> + /* How long to hold after a write to de-assert CE. */
> + reg_tim.s.wr_hld = trh;
> + /* How long to wait after a read to de-assert CE. */
> + reg_tim.s.rd_hld = trh;
> + /* How long write enable is asserted */
> + reg_tim.s.we = t2;
> + /* How long read enable is asserted */
> + reg_tim.s.oe = t2;
> + /* Time after CE that read/write starts */
> + reg_tim.s.ce = ns_to_tim_reg(2, 5);
> + /* Time before CE that address is valid */
> + reg_tim.s.adr = 0;
> +
> + /* Program the bootbus region timing for the data port chip select. */
> + cvmx_write_csr(CVMX_MIO_BOOT_REG_TIMX(cs), reg_tim.u64);
> + if (ocd->dma_engine >= 0)
> + /* True IDE mode, program both chip selects. */
> + cvmx_write_csr(CVMX_MIO_BOOT_REG_TIMX(cs + 1), reg_tim.u64);
> +}
> +
>
> ...
>
> +static void octeon_cf_tf_read16(struct ata_port *ap, struct ata_taskfile *tf)
> +{
> + u16 blob;
> + /* The base of the registers is at ioaddr.data_addr. */
> + void __iomem *base = ap->ioaddr.data_addr;
> +
> + blob = __raw_readw(base + 0xc);
why __raw?
> + tf->feature = blob >> 8;
> +
> + blob = __raw_readw(base + 2);
> + tf->nsect = blob & 0xff;
> + tf->lbal = blob >> 8;
> +
> + blob = __raw_readw(base + 4);
> + tf->lbam = blob & 0xff;
> + tf->lbah = blob >> 8;
> +
> + blob = __raw_readw(base + 6);
> + tf->device = blob & 0xff;
> + tf->command = blob >> 8;
> +
> + if (tf->flags & ATA_TFLAG_LBA48) {
> + if (likely(ap->ioaddr.ctl_addr)) {
> + iowrite8(tf->ctl | ATA_HOB, ap->ioaddr.ctl_addr);
> +
> + blob = __raw_readw(base + 0xc);
> + tf->hob_feature = blob >> 8;
> +
> + blob = __raw_readw(base + 2);
> + tf->hob_nsect = blob & 0xff;
> + tf->hob_lbal = blob >> 8;
> +
> + blob = __raw_readw(base + 4);
> + tf->hob_lbam = blob & 0xff;
> + tf->hob_lbah = blob >> 8;
> +
> + iowrite8(tf->ctl, ap->ioaddr.ctl_addr);
> + ap->last_ctl = tf->ctl;
> + } else {
> + WARN_ON(1);
> + }
> + }
> +}
> +
>
> ...
>
> +static void octeon_cf_dma_setup(struct ata_queued_cmd *qc)
> +{
> + struct ata_port *ap = qc->ap;
> + struct octeon_cf_port *cf_port;
> +
> + cf_port = (struct octeon_cf_port *)ap->private_data;
Unneeded, undesirable cast of void* (multiple instances).
> + DPRINTK("ENTER\n");
> + /* issue r/w command */
> + qc->cursg = qc->sg;
> + cf_port->dma_finished = 0;
> + ap->ops->sff_exec_command(ap, &qc->tf);
> + DPRINTK("EXIT\n");
> +}
> +
>
> ...
>
> +static irqreturn_t octeon_cf_interrupt(int irq, void *dev_instance)
> +{
> + struct ata_host *host = dev_instance;
> + struct octeon_cf_port *cf_port;
> + int i;
> + unsigned int handled = 0;
> + unsigned long flags;
> +
> + spin_lock_irqsave(&host->lock, flags);
Would spin_lock() suffice here?
> + DPRINTK("ENTER\n");
> + for (i = 0; i < host->n_ports; i++) {
> + u8 status;
> + struct ata_port *ap;
> + struct ata_queued_cmd *qc;
> + union cvmx_mio_boot_dma_intx dma_int;
> + union cvmx_mio_boot_dma_cfgx dma_cfg;
> + struct octeon_cf_data *ocd;
> +
> + ap = host->ports[i];
> + ocd = ap->dev->platform_data;
> + if (!ap || (ap->flags & ATA_FLAG_DISABLED))
> + continue;
> +
> + ocd = ap->dev->platform_data;
> + cf_port = (struct octeon_cf_port *)ap->private_data;
> + dma_int.u64 =
> + cvmx_read_csr(CVMX_MIO_BOOT_DMA_INTX(ocd->dma_engine));
> + dma_cfg.u64 =
> + cvmx_read_csr(CVMX_MIO_BOOT_DMA_CFGX(ocd->dma_engine));
> +
> + qc = ata_qc_from_tag(ap, ap->link.active_tag);
> +
> + if (qc && (!(qc->tf.flags & ATA_TFLAG_POLLING)) &&
> + (qc->flags & ATA_QCFLAG_ACTIVE)) {
> + if (dma_int.s.done && !dma_cfg.s.en) {
> + if (!sg_is_last(qc->cursg)) {
> + qc->cursg = sg_next(qc->cursg);
> + handled = 1;
> + octeon_cf_dma_start(qc);
> + continue;
> + } else {
> + cf_port->dma_finished = 1;
> + }
> + }
> + if (!cf_port->dma_finished)
> + continue;
> + status = ioread8(ap->ioaddr.altstatus_addr);
> + if (status & (ATA_BUSY | ATA_DRQ)) {
> + /*
> + * We are busy, try to handle it
> + * later. This is the DMA finished
> + * interrupt, and it could take a
> + * little while for the card to be
> + * ready for more commands.
> + */
> + /* Clear DMA irq. */
> + dma_int.u64 = 0;
> + dma_int.s.done = 1;
> + cvmx_write_csr(CVMX_MIO_BOOT_DMA_INTX(ocd->dma_engine),
> + dma_int.u64);
> +
> + queue_delayed_work(cf_port->wq,
> + &cf_port->delayed_finish, 1);
> + handled = 1;
> + } else {
> + handled |= octeon_cf_dma_finished(ap, qc);
> + }
> + }
> + }
> + spin_unlock_irqrestore(&host->lock, flags);
> + DPRINTK("EXIT\n");
> + return IRQ_RETVAL(handled);
> +}
> +
>
> ...
>
next prev parent reply other threads:[~2009-01-16 17:31 UTC|newest]
Thread overview: 263+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-01-16 15:27 [git patches] libata fixes Jeff Garzik
2009-01-16 17:31 ` Andrew Morton [this message]
2009-01-16 18:21 ` Alan Cox
2009-01-16 18:45 ` Sergei Shtylyov
2009-01-16 18:49 ` Grant Grundler
2009-01-16 19:21 ` David Daney
2009-01-16 23:13 ` David Daney
-- strict thread matches above, loose matches on Subject: below --
2013-04-08 20:30 Jeff Garzik
2013-01-21 19:48 Jeff Garzik
2013-01-22 18:04 ` Linus Torvalds
2012-11-17 4:39 Jeff Garzik
2012-08-25 14:26 Jeff Garzik
2012-05-03 18:27 Jeff Garzik
2012-05-03 18:31 ` Sergei Shtylyov
2012-05-03 18:38 ` Jeff Garzik
2012-05-04 11:04 ` Sergei Shtylyov
2012-05-04 21:04 ` Calvin Walton
2012-04-18 18:46 Jeff Garzik
2012-04-18 19:34 ` Josh Boyer
2012-04-18 19:45 ` Jeff Garzik
2011-11-24 1:23 Jeff Garzik
2011-11-24 1:32 ` Linus Torvalds
2011-08-19 4:45 Jeff Garzik
2011-06-23 20:52 Jeff Garzik
2010-12-24 18:37 Jeff Garzik
2010-11-12 22:30 Jeff Garzik
2010-09-10 2:41 Jeff Garzik
2010-08-25 23:32 Jeff Garzik
2010-07-01 20:20 Jeff Garzik
2010-06-10 20:09 Jeff Garzik
2010-06-07 20:07 Jeff Garzik
2010-05-05 18:54 Jeff Garzik
2010-04-23 2:17 Jeff Garzik
2010-04-06 15:22 Jeff Garzik
2010-03-23 13:42 Jeff Garzik
2010-03-23 18:06 ` Pavel Roskin
2010-03-25 16:21 ` Tejun Heo
2010-03-26 20:17 ` Pavel Roskin
2010-03-26 21:59 ` Pavel Roskin
2010-03-17 20:04 Jeff Garzik
2010-03-17 22:22 ` Marc Dionne
2010-02-05 1:29 Jeff Garzik
2010-01-12 19:36 Jeff Garzik
2009-12-20 20:45 Jeff Garzik
2009-10-16 10:26 Jeff Garzik
2009-08-12 10:35 Jeff Garzik
2009-07-29 2:02 Jeff Garzik
2009-07-15 3:09 Jeff Garzik
2009-06-05 18:46 Jeff Garzik
2009-06-05 20:16 ` Alan Cox
2009-06-05 21:15 ` Jeff Garzik
2009-05-11 18:37 Jeff Garzik
2009-04-17 23:07 Jeff Garzik
2009-04-16 19:39 Jeff Garzik
2009-04-16 20:28 ` Mark Lord
2009-04-13 9:27 Jeff Garzik
2009-03-13 19:03 Jeff Garzik
2009-03-05 12:34 Jeff Garzik
2009-02-25 20:36 Jeff Garzik
2009-02-17 21:25 Jeff Garzik
2009-01-27 7:30 Jeff Garzik
2009-01-27 15:50 ` Linus Torvalds
2009-01-27 18:37 ` Jeff Garzik
2009-01-27 19:02 ` Linus Torvalds
2009-01-27 23:04 ` Tejun Heo
2009-01-13 15:39 Jeff Garzik
2008-12-16 11:05 Jeff Garzik
2008-12-09 5:51 Jeff Garzik
[not found] ` <200812091825.mB9IPRwq027199@lxorguk.ukuu.org.uk>
2008-12-09 18:28 ` Alan Cox
2008-12-01 19:06 Jeff Garzik
2008-11-11 8:06 Jeff Garzik
2008-11-04 6:20 Jeff Garzik
2008-10-31 5:49 Jeff Garzik
2008-10-31 13:20 ` Greg Freemyer
2008-11-02 13:21 ` Jeff Garzik
2008-11-02 20:18 ` Greg Freemyer
2008-11-02 23:42 ` Mark Lord
2008-10-23 0:48 Jeff Garzik
2008-09-13 20:59 Jeff Garzik
2008-06-19 0:59 Jeff Garzik
2008-06-13 7:03 Jeff Garzik
2008-06-04 10:45 Jeff Garzik
2008-05-30 22:13 Jeff Garzik
2008-04-29 22:09 Jeff Garzik
2008-04-25 5:36 Jeff Garzik
2008-04-12 5:28 Jeff Garzik
2008-04-09 7:04 Jeff Garzik
2008-04-04 8:23 Jeff Garzik
2008-03-29 20:09 Jeff Garzik
2008-03-25 2:50 Jeff Garzik
2008-03-17 12:35 Jeff Garzik
2008-03-17 18:29 ` Ingo Molnar
2008-03-17 18:31 ` Ingo Molnar
2008-03-11 1:23 Jeff Garzik
2008-03-05 12:57 Jeff Garzik
2008-02-24 5:35 Jeff Garzik
2008-02-24 17:21 ` Bartlomiej Zolnierkiewicz
2008-02-24 17:07 ` Alan Cox
2008-02-24 17:40 ` Bartlomiej Zolnierkiewicz
2008-02-20 17:25 Jeff Garzik
2008-02-15 21:20 Jeff Garzik
2008-02-11 19:51 Jeff Garzik
2008-01-15 21:42 Jeff Garzik
2008-01-15 3:44 Jeff Garzik
2008-01-10 22:43 Jeff Garzik
2007-12-18 2:00 Jeff Garzik
2007-12-07 20:34 Jeff Garzik
2007-12-07 21:27 ` Frans Pop
2007-12-04 20:10 Jeff Garzik
2007-12-01 23:35 Jeff Garzik
2007-11-26 16:16 Jeff Garzik
2007-11-19 4:36 Tejun Heo
2007-11-21 2:26 ` Jeff Garzik
2007-11-10 9:24 Jeff Garzik
2007-11-06 0:03 Jeff Garzik
2007-11-03 18:13 Jeff Garzik
2007-10-31 9:38 Mikael Pettersson
2007-10-31 9:40 ` Jeff Garzik
2007-10-30 18:45 Jeff Garzik
2007-10-30 18:54 ` Linus Torvalds
2007-10-30 19:12 ` Jeff Garzik
2007-10-30 19:31 ` Linus Torvalds
2007-10-30 19:46 ` Jan Engelhardt
2007-10-30 22:45 ` Junio C Hamano
2007-10-20 3:08 Jeff Garzik
2007-10-18 1:08 Jeff Garzik
2007-10-03 18:51 Jeff Garzik
2007-09-26 4:43 Jeff Garzik
2007-09-20 20:15 Jeff Garzik
2007-09-11 2:15 Jeff Garzik
2007-08-31 9:02 Jeff Garzik
2007-08-23 10:08 Jeff Garzik
2007-08-15 9:44 Jeff Garzik
2007-08-08 1:07 Jeff Garzik
2007-08-01 16:19 Jeff Garzik
2007-07-24 20:56 Jeff Garzik
2007-07-03 15:52 Jeff Garzik
2007-07-03 16:07 ` Alan Cox
2007-07-03 16:21 ` Linus Torvalds
2007-07-03 16:34 ` Alan Cox
2007-07-03 16:42 ` Linus Torvalds
2007-07-03 17:21 ` Alan Cox
2007-07-04 14:11 ` David Woodhouse
2007-07-02 14:52 Jeff Garzik
2007-06-28 14:29 Mikael Pettersson
2007-06-27 7:35 Jeff Garzik
2007-06-27 7:38 ` Andrew Morton
2007-06-27 7:47 ` Jeff Garzik
2007-06-27 15:48 ` Linus Torvalds
2007-06-21 0:06 Jeff Garzik
2007-06-10 3:31 Jeff Garzik
2007-05-26 0:06 Mikael Pettersson
2007-05-26 0:15 ` Jeff Garzik
2007-05-25 22:03 Jeff Garzik
2007-05-31 8:31 ` Albert Lee
2007-05-25 0:41 Jeff Garzik
2007-05-18 1:38 Jeff Garzik
2007-05-16 5:36 Jeff Garzik
2007-04-04 6:39 Jeff Garzik
2007-03-28 7:32 Jeff Garzik
2007-03-28 7:33 ` Jeff Garzik
2007-03-28 20:53 ` Linus Torvalds
2007-03-28 21:15 ` Andrew Morton
2007-03-28 21:33 ` Chuck Ebbert
2007-03-19 18:37 Jeff Garzik
2007-03-06 9:17 Jeff Garzik
2007-03-03 1:46 Jeff Garzik
2007-03-03 18:54 ` Paul Rolland
2007-03-03 19:33 ` Paul Rolland
2007-03-05 5:19 ` Tejun Heo
2007-03-05 9:52 ` Paul Rolland
2007-03-02 2:08 Jeff Garzik
2007-03-03 18:39 ` Paul Rolland
2007-03-05 5:13 ` Tejun Heo
2007-03-05 9:54 ` Paul Rolland
2007-03-05 15:45 ` Tejun Heo
2007-03-06 7:37 ` Paul Rolland
2007-03-09 12:49 ` Tejun Heo
2007-03-11 11:35 ` Paul Rolland
2007-03-11 16:43 ` Linus Torvalds
2007-03-11 18:34 ` Paul Rolland
2007-03-11 19:20 ` Paul Rolland
2007-03-11 20:04 ` Linus Torvalds
2007-03-11 22:25 ` Paul Rolland
2007-03-12 0:59 ` Linus Torvalds
2007-03-12 6:28 ` Tejun Heo
2007-03-12 6:30 ` Tejun Heo
2007-03-12 8:00 ` Paul Rolland
2007-03-12 8:04 ` Tejun Heo
2007-03-12 9:58 ` Paul Rolland
2007-03-17 17:59 ` Paul Rolland
2007-03-17 18:44 ` Alan Cox
2007-03-17 18:47 ` Paul Rolland
2007-03-17 18:56 ` Alan Cox
2007-03-17 19:29 ` Paul Rolland
2007-03-17 19:56 ` Alan Cox
2007-03-17 19:42 ` Tejun Heo
2007-03-17 19:47 ` Paul Rolland
2007-03-17 20:02 ` Tejun Heo
2007-03-17 20:08 ` Paul Rolland
2007-03-18 4:52 ` Tejun Heo
2007-03-18 10:09 ` Paul Rolland
2007-03-18 10:28 ` Tejun Heo
2007-03-18 10:33 ` Paul Rolland
2007-03-18 10:39 ` Tejun Heo
2007-03-18 10:50 ` Paul Rolland
2007-03-18 11:06 ` Paul Rolland
2007-03-19 4:37 ` Tejun Heo
2007-03-19 7:48 ` Paul Rolland
2007-03-19 7:55 ` Tejun Heo
2007-03-19 11:05 ` Alan Cox
2007-03-12 7:56 ` Paul Rolland
2007-03-17 17:56 ` Paul Rolland
2007-02-02 16:58 Jeff Garzik
2007-02-02 17:13 ` Linus Torvalds
2007-02-02 17:19 ` Jeff Garzik
2007-02-02 19:02 ` Alan
2007-02-02 21:43 ` Andrew Morton
2007-02-02 22:41 ` Linus Torvalds
2007-02-03 0:05 ` alan
2007-02-03 0:58 ` Linus Torvalds
2007-02-07 7:11 ` Conke Hu
2007-01-30 14:27 Jeff Garzik
2007-01-25 23:58 Jeff Garzik
2007-01-24 7:19 Jeff Garzik
2007-01-24 21:54 ` Brian King
2007-01-22 18:55 Jeff Garzik
2006-12-20 21:00 Jeff Garzik
2006-12-20 21:19 ` Stephen Frost
2006-12-16 17:27 Jeff Garzik
2006-11-30 10:48 Jeff Garzik
2006-11-14 15:04 Jeff Garzik
2006-11-14 16:32 ` Mark Lord
2006-11-14 16:41 ` Jeff Garzik
2006-11-14 18:11 ` Mark Lord
2006-11-02 3:11 Jeff Garzik
2006-11-01 2:13 Jeff Garzik
2006-11-01 14:06 ` John Stoffel
2006-11-01 14:30 ` Alan Cox
2006-11-02 0:02 ` Andrew Morton
2006-11-02 1:06 ` Jeff Garzik
2006-11-02 8:00 ` Jens Axboe
2006-10-21 19:55 Jeff Garzik
2006-10-11 9:05 Jeff Garzik
2006-09-11 12:58 Jeff Garzik
2006-08-24 8:13 Jeff Garzik
2006-08-24 8:29 ` Greg KH
2006-08-24 8:56 ` Greg KH
2006-08-24 9:00 ` Jeff Garzik
2006-08-09 6:25 Jeff Garzik
2006-08-09 18:47 ` Greg KH
2006-08-09 22:45 ` Greg KH
2006-08-10 12:23 ` Jeff Garzik
2006-07-29 5:41 Jeff Garzik
2006-07-17 17:42 Jeff Garzik
2006-05-24 7:05 Jeff Garzik
2006-05-20 4:47 Jeff Garzik
2006-03-31 15:22 Jeff Garzik
2006-02-25 22:03 Jeff Garzik
2006-02-21 5:17 Jeff Garzik
2006-02-17 21:41 Jeff Garzik
2006-02-09 18:47 Jeff Garzik
2005-09-14 13:13 Jeff Garzik
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20090116093101.6d77b69b.akpm@linux-foundation.org \
--to=akpm@linux-foundation.org \
--cc=jeff@garzik.org \
--cc=linux-ide@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).