* [PATCH 2.6.22-rc7 1/3] libata: clean up horkage handling
@ 2007-07-05 4:31 Tejun Heo
2007-07-05 4:35 ` [PATCH 2.6.22-rc7 2/3] libata: implement HORKAGE_SETXFER Tejun Heo
` (2 more replies)
0 siblings, 3 replies; 10+ messages in thread
From: Tejun Heo @ 2007-07-05 4:31 UTC (permalink / raw)
To: Jeff Garzik, linux-ide, Alan Cox
Horkage handling had the following problems.
* dev->horkage was positioned after ATA_DEVICE_CLEAR_OFFSET, so it was
cleared before the device is configured. This broke
HORKAGE_DIAGNOSTIC.
* Some used dev->horkage while others called ata_device_blacklisted()
directly. This was at best confusing.
This patch moves dev->horkage right after dev->flags and set the field
according to the blacklist during device configuration. All users
test against dev->horkage. ata_device_blacklisted() now has only one
user, make it static. While at it, rename it to ata_dev_blacklisted()
for consistency.
Signed-off-by: Tejun Heo <htejun@gmail.com>
---
drivers/ata/libata-core.c | 13 ++++++++-----
include/linux/libata.h | 3 +--
2 files changed, 9 insertions(+), 7 deletions(-)
Index: work/drivers/ata/libata-core.c
===================================================================
--- work.orig/drivers/ata/libata-core.c
+++ work/drivers/ata/libata-core.c
@@ -71,6 +71,7 @@ static unsigned int ata_dev_init_params(
u16 heads, u16 sectors);
static unsigned int ata_dev_set_xfermode(struct ata_device *dev);
static void ata_dev_xfermask(struct ata_device *dev);
+static unsigned long ata_dev_blacklisted(const struct ata_device *dev);
unsigned int ata_print_id = 1;
static struct workqueue_struct *ata_wq;
@@ -1814,7 +1815,7 @@ static void ata_dev_config_ncq(struct at
desc[0] = '\0';
return;
}
- if (ata_device_blacklisted(dev) & ATA_HORKAGE_NONCQ) {
+ if (dev->horkage & ATA_HORKAGE_NONCQ) {
snprintf(desc, desc_sz, "NCQ (not used)");
return;
}
@@ -1862,6 +1863,9 @@ int ata_dev_configure(struct ata_device
if (ata_msg_probe(ap))
ata_dev_printk(dev, KERN_DEBUG, "%s: ENTER\n", __FUNCTION__);
+ /* set horkage */
+ dev->horkage |= ata_dev_blacklisted(dev);
+
/* set _SDD */
rc = ata_acpi_push_id(dev);
if (rc) {
@@ -2042,7 +2046,7 @@ int ata_dev_configure(struct ata_device
dev->max_sectors = ATA_MAX_SECTORS;
}
- if (ata_device_blacklisted(dev) & ATA_HORKAGE_MAX_SEC_128)
+ if (dev->horkage & ATA_HORKAGE_MAX_SEC_128)
dev->max_sectors = min_t(unsigned int, ATA_MAX_SECTORS_128,
dev->max_sectors);
@@ -3809,7 +3813,7 @@ static const struct ata_blacklist_entry
{ }
};
-unsigned long ata_device_blacklisted(const struct ata_device *dev)
+static unsigned long ata_dev_blacklisted(const struct ata_device *dev)
{
unsigned char model_num[ATA_ID_PROD_LEN + 1];
unsigned char model_rev[ATA_ID_FW_REV_LEN + 1];
@@ -3839,7 +3843,7 @@ static int ata_dma_blacklisted(const str
if ((dev->ap->flags & ATA_FLAG_PIO_POLLING) &&
(dev->flags & ATA_DFLAG_CDB_INTR))
return 1;
- return (ata_device_blacklisted(dev) & ATA_HORKAGE_NODMA) ? 1 : 0;
+ return (dev->horkage & ATA_HORKAGE_NODMA) ? 1 : 0;
}
/**
@@ -6875,7 +6879,6 @@ EXPORT_SYMBOL_GPL(ata_host_resume);
EXPORT_SYMBOL_GPL(ata_id_string);
EXPORT_SYMBOL_GPL(ata_id_c_string);
EXPORT_SYMBOL_GPL(ata_id_to_dma_mode);
-EXPORT_SYMBOL_GPL(ata_device_blacklisted);
EXPORT_SYMBOL_GPL(ata_scsi_simulate);
EXPORT_SYMBOL_GPL(ata_pio_need_iordy);
Index: work/include/linux/libata.h
===================================================================
--- work.orig/include/linux/libata.h
+++ work/include/linux/libata.h
@@ -428,6 +428,7 @@ struct ata_device {
struct ata_port *ap;
unsigned int devno; /* 0 or 1 */
unsigned long flags; /* ATA_DFLAG_xxx */
+ unsigned int horkage; /* List of broken features */
struct scsi_device *sdev; /* attached SCSI device */
/* n_sector is used as CLEAR_OFFSET, read comment above CLEAR_OFFSET */
u64 n_sectors; /* size of device, if ATA */
@@ -456,7 +457,6 @@ struct ata_device {
/* error history */
struct ata_ering ering;
int spdn_cnt;
- unsigned int horkage; /* List of broken features */
#ifdef CONFIG_ATA_ACPI
/* ACPI objects info */
acpi_handle obj_handle;
@@ -772,7 +772,6 @@ extern void ata_id_string(const u16 *id,
extern void ata_id_c_string(const u16 *id, unsigned char *s,
unsigned int ofs, unsigned int len);
extern void ata_id_to_dma_mode(struct ata_device *dev, u8 unknown);
-extern unsigned long ata_device_blacklisted(const struct ata_device *dev);
extern void ata_bmdma_setup (struct ata_queued_cmd *qc);
extern void ata_bmdma_start (struct ata_queued_cmd *qc);
extern void ata_bmdma_stop(struct ata_queued_cmd *qc);
^ permalink raw reply [flat|nested] 10+ messages in thread* [PATCH 2.6.22-rc7 2/3] libata: implement HORKAGE_SETXFER 2007-07-05 4:31 [PATCH 2.6.22-rc7 1/3] libata: clean up horkage handling Tejun Heo @ 2007-07-05 4:35 ` Tejun Heo 2007-07-05 4:39 ` [PATCH 2.6.22-rc7 3/3] libata: pata_via CX700 quirks Tejun Heo 2007-07-05 12:27 ` [PATCH 2.6.22-rc7 2/3] libata: implement HORKAGE_SETXFER Alan Cox 2007-07-05 12:28 ` [PATCH 2.6.22-rc7 1/3] libata: clean up horkage handling Alan Cox 2007-07-11 1:38 ` Jeff Garzik 2 siblings, 2 replies; 10+ messages in thread From: Tejun Heo @ 2007-07-05 4:35 UTC (permalink / raw) To: Jeff Garzik, linux-ide, Alan Cox Make CFA SETXFER failure handling into HORKAGE. This will be used to allow other cases to ignore SETXFER failure. Signed-off-by: Tejun Heo <htejun@gmail.com> --- drivers/ata/libata-core.c | 15 ++++++++++----- include/linux/libata.h | 1 + 2 files changed, 11 insertions(+), 5 deletions(-) Index: work/drivers/ata/libata-core.c =================================================================== --- work.orig/drivers/ata/libata-core.c +++ work/drivers/ata/libata-core.c @@ -1898,7 +1898,7 @@ int ata_dev_configure(struct ata_device * common ATA, ATAPI feature tests */ - /* find max transfer mode; for printk only */ + /* determine xfermask */ xfer_mask = ata_id_xfermask(id); if (ata_msg_probe(ap)) @@ -1919,8 +1919,13 @@ int ata_dev_configure(struct ata_device "supports DRM functions and may " "not be fully accessable.\n"); snprintf(revbuf, 7, "CFA"); - } - else + + /* Old CFA may refuse SETFEATURES_XFER, which + * is just fine + */ + if (!(xfer_mask & ~ATA_MASK_PIO)) + dev->horkage |= ATA_HORKAGE_SETXFER; + } else snprintf(revbuf, 7, "ATA-%d", ata_id_major_version(id)); dev->n_sectors = ata_id_n_sectors(id); @@ -2775,8 +2780,8 @@ static int ata_dev_set_mode(struct ata_d dev->flags |= ATA_DFLAG_PIO; err_mask = ata_dev_set_xfermode(dev); - /* Old CFA may refuse this command, which is just fine */ - if (dev->xfer_shift == ATA_SHIFT_PIO && ata_id_is_cfa(dev->id)) + + if (dev->horkage & ATA_HORKAGE_SETXFER) err_mask &= ~AC_ERR_DEV; if (err_mask) { Index: work/include/linux/libata.h =================================================================== --- work.orig/include/linux/libata.h +++ work/include/linux/libata.h @@ -298,6 +298,7 @@ enum { ATA_HORKAGE_NODMA = (1 << 1), /* DMA problems */ ATA_HORKAGE_NONCQ = (1 << 2), /* Don't use NCQ */ ATA_HORKAGE_MAX_SEC_128 = (1 << 3), /* Limit max sects to 128 */ + ATA_HORKAGE_SETXFER = (1 << 4), /* SETFEATURES_XFER may fail */ }; enum hsm_task_states { ^ permalink raw reply [flat|nested] 10+ messages in thread
* [PATCH 2.6.22-rc7 3/3] libata: pata_via CX700 quirks 2007-07-05 4:35 ` [PATCH 2.6.22-rc7 2/3] libata: implement HORKAGE_SETXFER Tejun Heo @ 2007-07-05 4:39 ` Tejun Heo 2007-07-05 12:34 ` Alan Cox 2007-07-05 12:27 ` [PATCH 2.6.22-rc7 2/3] libata: implement HORKAGE_SETXFER Alan Cox 1 sibling, 1 reply; 10+ messages in thread From: Tejun Heo @ 2007-07-05 4:39 UTC (permalink / raw) To: Jeff Garzik, linux-ide, Alan Cox For some reason, via decided that combined SATA/PATA setup in sata_via isn't good enough and added a SATA port without SCR access to CX700. For yet another unknown reason, slave slot of the SATA port dislikes SETXFER. This patch implements two quirks for CX700 - VIA_SATA_PATA and VIA_BAD_SLAVE_SETXFER. SATA_PATA indicates that the first port is SATA and BAD_SLAVE_SETXFER indicates slave port may fail SETXFER. http://bugzilla.kernel.org/show_bug.cgi?id=8563 Signed-off-by: Tejun Heo <htejun@gmail.com> --- drivers/ata/pata_via.c | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) Index: work/drivers/ata/pata_via.c =================================================================== --- work.orig/drivers/ata/pata_via.c +++ work/drivers/ata/pata_via.c @@ -84,6 +84,8 @@ enum { VIA_BAD_ID = 0x100, /* Has wrong vendor ID (0x1107) */ VIA_BAD_AST = 0x200, /* Don't touch Address Setup Timing */ VIA_NO_ENABLES = 0x400, /* Has no enablebits */ + VIA_BAD_SLAVE_SETXFER = 0x0800, /* SETXFER on slave device may fail */ + VIA_SATA_PATA = 0x1000, /* SATA/PATA combined configuration */ }; /* @@ -99,7 +101,7 @@ static const struct via_isa_bridge { } via_isa_bridges[] = { { "vt8237s", PCI_DEVICE_ID_VIA_8237S, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, { "vt8251", PCI_DEVICE_ID_VIA_8251, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, - { "cx700", PCI_DEVICE_ID_VIA_CX700, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, + { "cx700", PCI_DEVICE_ID_VIA_CX700, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST | VIA_SATA_PATA | VIA_BAD_SLAVE_SETXFER }, { "vt6410", PCI_DEVICE_ID_VIA_6410, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST | VIA_NO_ENABLES}, { "vt8237a", PCI_DEVICE_ID_VIA_8237A, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, { "vt8237", PCI_DEVICE_ID_VIA_8237, 0x00, 0x2f, VIA_UDMA_133 | VIA_BAD_AST }, @@ -168,6 +170,9 @@ static int via_cable_detect(struct ata_p if (via_cable_override(pdev)) return ATA_CBL_PATA40_SHORT; + if ((config->flags & VIA_SATA_PATA) && ap->port_no == 0) + return ATA_CBL_SATA; + /* Early chips are 40 wire */ if ((config->flags & VIA_UDMA) < VIA_UDMA_66) return ATA_CBL_PATA40; @@ -292,6 +297,15 @@ static void via_do_set_mode(struct ata_p pci_write_config_byte(pdev, 0x50 + offset, ut); } +static void via_dev_config(struct ata_device *dev) +{ + const struct via_isa_bridge *config = dev->ap->host->private_data; + + /* some new VIA chips have problem with SETXFER on slave slot */ + if (dev->devno && (config->flags & VIA_BAD_SLAVE_SETXFER)) + dev->horkage |= ATA_HORKAGE_SETXFER; +} + static void via_set_piomode(struct ata_port *ap, struct ata_device *adev) { const struct via_isa_bridge *config = ap->host->private_data; @@ -334,6 +348,7 @@ static struct scsi_host_template via_sht static struct ata_port_operations via_port_ops = { .port_disable = ata_port_disable, + .dev_config = via_dev_config, .set_piomode = via_set_piomode, .set_dmamode = via_set_dmamode, .mode_filter = ata_pci_default_filter, @@ -370,6 +385,7 @@ static struct ata_port_operations via_po static struct ata_port_operations via_port_ops_noirq = { .port_disable = ata_port_disable, + .dev_config = via_dev_config, .set_piomode = via_set_piomode, .set_dmamode = via_set_dmamode, .mode_filter = ata_pci_default_filter, ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2.6.22-rc7 3/3] libata: pata_via CX700 quirks 2007-07-05 4:39 ` [PATCH 2.6.22-rc7 3/3] libata: pata_via CX700 quirks Tejun Heo @ 2007-07-05 12:34 ` Alan Cox 2007-07-05 12:39 ` Tejun Heo 0 siblings, 1 reply; 10+ messages in thread From: Alan Cox @ 2007-07-05 12:34 UTC (permalink / raw) To: Tejun Heo; +Cc: Jeff Garzik, linux-ide On Thu, 5 Jul 2007 13:39:49 +0900 Tejun Heo <htejun@gmail.com> wrote: > For some reason, via decided that combined SATA/PATA setup in sata_via > isn't good enough and added a SATA port without SCR access to CX700. (It seems to be an integrated PATA/SATA bridge of some sort) > For yet another unknown reason, slave slot of the SATA port dislikes > SETXFER. > > This patch implements two quirks for CX700 - VIA_SATA_PATA and > VIA_BAD_SLAVE_SETXFER. SATA_PATA indicates that the first port is > SATA and BAD_SLAVE_SETXFER indicates slave port may fail SETXFER. This makes no sense. If the SETXFER failed how did the device get into the mode it is in ? How will change down work ? Why does the old IDE driver work ? I think this needs a lot more explanation NAK ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2.6.22-rc7 3/3] libata: pata_via CX700 quirks 2007-07-05 12:34 ` Alan Cox @ 2007-07-05 12:39 ` Tejun Heo 0 siblings, 0 replies; 10+ messages in thread From: Tejun Heo @ 2007-07-05 12:39 UTC (permalink / raw) To: Alan Cox; +Cc: Jeff Garzik, linux-ide Alan Cox wrote: > This makes no sense. If the SETXFER failed how did the device get into > the mode it is in ? How will change down work ? Why does the old IDE > driver work ? IDE ignores SETXFER failure and for SATA devices SETXFER doesn't really mean anything (unless it's bridged). In this case, IDE didn't seem to be seeing SETXFER failures but the chip being quite weird (SETXFER failure is associated with the specific device slot not the device itself. it's probably a bridge problem.) and from the vendor it's from, I thought whatever works is okay. > I think this needs a lot more explanation Feel free to re-open bug 8563. I'd be happy to help. :-) Thanks. -- tejun ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2.6.22-rc7 2/3] libata: implement HORKAGE_SETXFER 2007-07-05 4:35 ` [PATCH 2.6.22-rc7 2/3] libata: implement HORKAGE_SETXFER Tejun Heo 2007-07-05 4:39 ` [PATCH 2.6.22-rc7 3/3] libata: pata_via CX700 quirks Tejun Heo @ 2007-07-05 12:27 ` Alan Cox 2007-07-05 12:22 ` Tejun Heo 1 sibling, 1 reply; 10+ messages in thread From: Alan Cox @ 2007-07-05 12:27 UTC (permalink / raw) To: Tejun Heo; +Cc: Jeff Garzik, linux-ide On Thu, 5 Jul 2007 13:35:01 +0900 Tejun Heo <htejun@gmail.com> wrote: > Make CFA SETXFER failure handling into HORKAGE. This will be used to > allow other cases to ignore SETXFER failure. NAK > + /* Old CFA may refuse SETFEATURES_XFER, which > + * is just fine > + */ > + if (!(xfer_mask & ~ATA_MASK_PIO)) > + dev->horkage |= ATA_HORKAGE_SETXFER; > + } else This is specifically done for PIO. An XFER failure for non PIO modes is a serious failure and happens in the real world sometimes. > - /* Old CFA may refuse this command, which is just fine */ > - if (dev->xfer_shift == ATA_SHIFT_PIO && ata_id_is_cfa(dev->id)) > + > + if (dev->horkage & ATA_HORKAGE_SETXFER) > err_mask &= ~AC_ERR_DEV; ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2.6.22-rc7 2/3] libata: implement HORKAGE_SETXFER 2007-07-05 12:27 ` [PATCH 2.6.22-rc7 2/3] libata: implement HORKAGE_SETXFER Alan Cox @ 2007-07-05 12:22 ` Tejun Heo 2007-07-05 12:38 ` Alan Cox 0 siblings, 1 reply; 10+ messages in thread From: Tejun Heo @ 2007-07-05 12:22 UTC (permalink / raw) To: Alan Cox; +Cc: Jeff Garzik, linux-ide Alan Cox wrote: > On Thu, 5 Jul 2007 13:35:01 +0900 > Tejun Heo <htejun@gmail.com> wrote: > >> Make CFA SETXFER failure handling into HORKAGE. This will be used to >> allow other cases to ignore SETXFER failure. > > NAK > >> + /* Old CFA may refuse SETFEATURES_XFER, which >> + * is just fine >> + */ >> + if (!(xfer_mask & ~ATA_MASK_PIO)) >> + dev->horkage |= ATA_HORKAGE_SETXFER; >> + } else > > This is specifically done for PIO. An XFER failure for non PIO modes is a > serious failure and happens in the real world sometimes. Hmmm... That's what "if (!(xfer_mask & ~ATA_MASK_PIO))" test was for. Or is it not enough? -- tejun ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2.6.22-rc7 2/3] libata: implement HORKAGE_SETXFER 2007-07-05 12:22 ` Tejun Heo @ 2007-07-05 12:38 ` Alan Cox 0 siblings, 0 replies; 10+ messages in thread From: Alan Cox @ 2007-07-05 12:38 UTC (permalink / raw) To: Tejun Heo; +Cc: Jeff Garzik, linux-ide On Thu, 05 Jul 2007 21:22:44 +0900 Tejun Heo <htejun@gmail.com> wrote: > Alan Cox wrote: > > On Thu, 5 Jul 2007 13:35:01 +0900 > > Tejun Heo <htejun@gmail.com> wrote: > > > >> Make CFA SETXFER failure handling into HORKAGE. This will be used to > >> allow other cases to ignore SETXFER failure. > > > > NAK > > > >> + /* Old CFA may refuse SETFEATURES_XFER, which > >> + * is just fine > >> + */ > >> + if (!(xfer_mask & ~ATA_MASK_PIO)) > >> + dev->horkage |= ATA_HORKAGE_SETXFER; > >> + } else > > > > This is specifically done for PIO. An XFER failure for non PIO modes is a > > serious failure and happens in the real world sometimes. > > Hmmm... That's what "if (!(xfer_mask & ~ATA_MASK_PIO))" test was for. > Or is it not enough? Actually you are correct the test is sufficient because we can't end up adding modes later. Un-NAK ;) Alan ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2.6.22-rc7 1/3] libata: clean up horkage handling 2007-07-05 4:31 [PATCH 2.6.22-rc7 1/3] libata: clean up horkage handling Tejun Heo 2007-07-05 4:35 ` [PATCH 2.6.22-rc7 2/3] libata: implement HORKAGE_SETXFER Tejun Heo @ 2007-07-05 12:28 ` Alan Cox 2007-07-11 1:38 ` Jeff Garzik 2 siblings, 0 replies; 10+ messages in thread From: Alan Cox @ 2007-07-05 12:28 UTC (permalink / raw) To: Tejun Heo; +Cc: Jeff Garzik, linux-ide On Thu, 5 Jul 2007 13:31:27 +0900 Tejun Heo <htejun@gmail.com> wrote: > Horkage handling had the following problems. > > * dev->horkage was positioned after ATA_DEVICE_CLEAR_OFFSET, so it was > cleared before the device is configured. This broke > HORKAGE_DIAGNOSTIC. > > * Some used dev->horkage while others called ata_device_blacklisted() > directly. This was at best confusing. > > This patch moves dev->horkage right after dev->flags and set the field > according to the blacklist during device configuration. All users > test against dev->horkage. ata_device_blacklisted() now has only one > user, make it static. While at it, rename it to ata_dev_blacklisted() > for consistency. > > Signed-off-by: Tejun Heo <htejun@gmail.com> Nice clean up Acked-by: Alan Cox <alan@redhat.com> ^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH 2.6.22-rc7 1/3] libata: clean up horkage handling 2007-07-05 4:31 [PATCH 2.6.22-rc7 1/3] libata: clean up horkage handling Tejun Heo 2007-07-05 4:35 ` [PATCH 2.6.22-rc7 2/3] libata: implement HORKAGE_SETXFER Tejun Heo 2007-07-05 12:28 ` [PATCH 2.6.22-rc7 1/3] libata: clean up horkage handling Alan Cox @ 2007-07-11 1:38 ` Jeff Garzik 2 siblings, 0 replies; 10+ messages in thread From: Jeff Garzik @ 2007-07-11 1:38 UTC (permalink / raw) To: Tejun Heo; +Cc: linux-ide, Alan Cox Tejun Heo wrote: > Horkage handling had the following problems. > > * dev->horkage was positioned after ATA_DEVICE_CLEAR_OFFSET, so it was > cleared before the device is configured. This broke > HORKAGE_DIAGNOSTIC. > > * Some used dev->horkage while others called ata_device_blacklisted() > directly. This was at best confusing. > > This patch moves dev->horkage right after dev->flags and set the field > according to the blacklist during device configuration. All users > test against dev->horkage. ata_device_blacklisted() now has only one > user, make it static. While at it, rename it to ata_dev_blacklisted() > for consistency. > > Signed-off-by: Tejun Heo <htejun@gmail.com> > --- > drivers/ata/libata-core.c | 13 ++++++++----- > include/linux/libata.h | 3 +-- > 2 files changed, 9 insertions(+), 7 deletions(-) applied ^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2007-07-11 1:38 UTC | newest] Thread overview: 10+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2007-07-05 4:31 [PATCH 2.6.22-rc7 1/3] libata: clean up horkage handling Tejun Heo 2007-07-05 4:35 ` [PATCH 2.6.22-rc7 2/3] libata: implement HORKAGE_SETXFER Tejun Heo 2007-07-05 4:39 ` [PATCH 2.6.22-rc7 3/3] libata: pata_via CX700 quirks Tejun Heo 2007-07-05 12:34 ` Alan Cox 2007-07-05 12:39 ` Tejun Heo 2007-07-05 12:27 ` [PATCH 2.6.22-rc7 2/3] libata: implement HORKAGE_SETXFER Alan Cox 2007-07-05 12:22 ` Tejun Heo 2007-07-05 12:38 ` Alan Cox 2007-07-05 12:28 ` [PATCH 2.6.22-rc7 1/3] libata: clean up horkage handling Alan Cox 2007-07-11 1:38 ` Jeff Garzik
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).