2.6.x libata update
PATCH 1/1 2.6.x libata update
Please pull from 'upstream-linus' branch of master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev.git
to receive today's fixes and updates, including a fix for "I've lost sdb" problem reported on lkml against -mm.
drivers/scsi/ahci.c | 55 ++++++++++++------------------ drivers/scsi/ata_piix.c | 15 ++++---- drivers/scsi/libata-core.c | 80 +++++++++++++++----------------------------- drivers/scsi/libata-scsi.c | 46 +++++++++++++++---------- drivers/scsi/libata.h | 2 - drivers/scsi/pdc_adma.c | 26 +++++++------- drivers/scsi/sata_mv.c | 41 ++++++---------------- drivers/scsi/sata_nv.c | 3 + drivers/scsi/sata_promise.c | 19 ++++------ drivers/scsi/sata_qstor.c | 25 ++++++------- drivers/scsi/sata_sil.c | 7 ++- drivers/scsi/sata_sil24.c | 41 +++++++++------------- drivers/scsi/sata_sis.c | 13 +++++-- drivers/scsi/sata_svw.c | 3 + drivers/scsi/sata_sx4.c | 13 +++---- drivers/scsi/sata_uli.c | 5 ++ drivers/scsi/sata_via.c | 38 +++++++++++--------- drivers/scsi/sata_vsc.c | 3 + include/linux/libata.h | 30 ++++++++++++++-- 19 files changed, 232 insertions(+), 233 deletions(-)
Jeff Garzik:
[libata] remove ata_chk_err(), ->check_err() hook. [libata] change ata_qc_complete() to take error mask as second arg [libata] fix legacy IDE probing
[libata ata_piix] use dev_printk() where appropriate [libata ata_piix] fix native mode probe, after recent updates [libata] use dev_printk() throughout drivers
drivers/scsi/ahci.c +23 -32
@@ -41,6 +41,7 @@#include <linux/interrupt.h> #include <linux/sched.h> #include <linux/dma-mapping.h> +#include <linux/device.h> #include "scsi.h" #include <scsi/scsi_host.h> #include <linux/libata.h>
@@ -192,7 +193,6 @@ static void ahci_port_stop(struct ata_postatic void ahci_tf_read (struct ata_port *ap,struct ata_taskfile *tf);static void ahci_qc_prep (struct ata_queued_cmd *qc);static u8 ahci_check_status (struct ata_port *ap); -static u8 ahci_check_err (struct ata_port *ap);static inline int ahci_host_intr (struct ata_port *ap,struct ata_queued_cmd *qc);static void ahci_remove_one (struct pci_dev *pdev);
@@ -221,7 +221,6 @@ static const struct ata_port_operations .check_status = ahci_check_status, .check_altstatus = ahci_check_status, - .check_err = ahci_check_err, .dev_select = ata_noop_dev_select, .tf_read = ahci_tf_read,
@@ -458,13 +457,6 @@ static u8 ahci_check_status(struct ata_preturn readl (mmio +PORT_TFDATA ) &0xFF ; } -static u8 ahci_check_err (struct ata_port *ap) -{ -void __iomem *mmio = (void __iomem *) ap->ioaddr.cmd_addr; - -return (readl (mmio +PORT_TFDATA ) >>8 ) &0xFF ; -} -static void ahci_tf_read (struct ata_port *ap,struct ata_taskfile *tf) {struct ahci_port_priv *pp = ap->private_data;
@@ -609,7 +601,7 @@ static void ahci_eng_timeout(struct ata_* not being called from the SCSI EH. */ qc->scsidone = scsi_finish_command; -ata_qc_complete (qc,ATA_ERR ); +ata_qc_complete (qc,AC_ERR_OTHER ); }spin_unlock_irqrestore (&host_set->lock, flags);
@@ -638,7 +630,7 @@ static inline int ahci_host_intr(structif (status &PORT_IRQ_FATAL ) {ahci_intr_error (ap, status);if (qc) -ata_qc_complete (qc,ATA_ERR ); +ata_qc_complete (qc,AC_ERR_OTHER ); }return 1 ;
@@ -683,10 +675,10 @@ static irqreturn_t ahci_interrupt (int iif (!ahci_host_intr (ap, qc))if (ata_ratelimit ()) {struct pci_dev *pdev = -to_pci_dev (ap->host_set->dev); -printk (KERN_WARNING -"ahci(%s): unhandled interrupt on port %u\n" , -pci_name (pdev), i); +to_pci_dev (ap->host_set->dev); +dev_printk (KERN_WARNING , &pdev->dev, +"unhandled interrupt on port %u\n" , + i); }VPRINTK ("port %u\n" , i);
@@ -694,10 +686,9 @@ static irqreturn_t ahci_interrupt (int iVPRINTK ("port %u (no irq)\n" , i);if (ata_ratelimit ()) {struct pci_dev *pdev = -to_pci_dev (ap->host_set->dev); -printk (KERN_WARNING -"ahci(%s): interrupt on disabled port %u\n" , -pci_name (pdev), i); +to_pci_dev (ap->host_set->dev); +dev_printk (KERN_WARNING , &pdev->dev, +"interrupt on disabled port %u\n" , i); } }
@@ -769,8 +760,8 @@ static int ahci_host_init(struct ata_pro tmp =readl (mmio +HOST_CTL );if (tmp &HOST_RESET ) { - printk(KERN_ERR DRV_NAME "(%s): controller reset failed (0x%x)\n", - pci_name(pdev), tmp); +dev_printk (KERN_ERR , &pdev->dev, +"controller reset failed (0x%x)\n" , tmp);return -EIO ; }
@@ -798,22 +789,22 @@ static int ahci_host_init(struct ata_proif (rc) { rc =pci_set_consistent_dma_mask (pdev,DMA_32BIT_MASK );if (rc) { - printk(KERN_ERR DRV_NAME "(%s): 64-bit DMA enable failed\n", - pci_name(pdev)); +dev_printk (KERN_ERR , &pdev->dev, +"64-bit DMA enable failed\n" );return rc; } } }else { rc =pci_set_dma_mask (pdev,DMA_32BIT_MASK );if (rc) { - printk(KERN_ERR DRV_NAME "(%s): 32-bit DMA enable failed\n", - pci_name(pdev)); +dev_printk (KERN_ERR , &pdev->dev, +"32-bit DMA enable failed\n" );return rc; } rc =pci_set_consistent_dma_mask (pdev,DMA_32BIT_MASK );if (rc) { - printk(KERN_ERR DRV_NAME "(%s): 32-bit consistent DMA enable failed\n", - pci_name(pdev)); +dev_printk (KERN_ERR , &pdev->dev, +"32-bit consistent DMA enable failed\n" );return rc; } }
@@ -916,10 +907,10 @@ static void ahci_print_info(struct ata_pelse scc_s ="unknown" ; - printk(KERN_INFO DRV_NAME "(%s) AHCI %02x%02x.%02x%02x " + dev_printk(KERN_INFO, &pdev->dev, + "AHCI %02x%02x.%02x%02x " "%u slots %u ports %s Gbps 0x%x impl %s mode\n" , -pci_name (pdev), (vers >> 24) & 0xff, (vers >> 16) & 0xff,
@@ -932,11 +923,11 @@ static void ahci_print_info(struct ata_p impl, scc_s); - printk(KERN_INFO DRV_NAME "(%s) flags: " + dev_printk(KERN_INFO, &pdev->dev, + "flags: " "%s%s%s%s%s%s" "%s%s%s%s%s%s%s\n" , -pci_name (pdev), cap & (1 << 31) ? "64bit " : "", cap & (1 << 30) ? "ncq " : "",
@@ -969,7 +960,7 @@ static int ahci_init_one (struct pci_devVPRINTK ("ENTER\n" );if (!printed_version++) - printk(KERN_DEBUG DRV_NAME " version " DRV_VERSION "\n"); +dev_printk (KERN_DEBUG , &pdev->dev,"version " DRV_VERSION "\n" ); rc =pci_enable_device (pdev);if (rc)
drivers/scsi/ata_piix.c +9 -6
@@ -45,6 +45,7 @@#include <linux/init.h> #include <linux/blkdev.h> #include <linux/delay.h> +#include <linux/device.h> #include "scsi.h" #include <scsi/scsi_host.h> #include <linux/libata.h>
@@ -621,18 +622,19 @@ static int piix_init_one (struct pci_dev {static int printed_version;struct ata_port_info *port_info[2 ]; -unsigned int combined =0 , n_ports =1 ; +unsigned int combined =0 ;unsigned int pata_chan =0 , sata_chan =0 ;if (!printed_version++) - printk(KERN_DEBUG DRV_NAME " version " DRV_VERSION "\n"); +dev_printk (KERN_DEBUG , &pdev->dev, +"version " DRV_VERSION "\n" );/* no hotplugging support (FIXME) */ if (!in_module_init)return -ENODEV ; port_info[0 ] = &piix_port_info[ent->driver_data]; - port_info[1 ] =NULL ; + port_info[1 ] = &piix_port_info[ent->driver_data];if (port_info[0 ]->host_flags &PIIX_FLAG_AHCI ) {u8 tmp;
@@ -670,12 +672,13 @@ static int piix_init_one (struct pci_dev port_info[sata_chan] = &piix_port_info[ent->driver_data]; port_info[sata_chan]->host_flags |=ATA_FLAG_SLAVE_POSS ; port_info[pata_chan] = &piix_port_info[ich5_pata]; - n_ports++; - printk(KERN_WARNING DRV_NAME ": combined mode detected\n"); +dev_printk (KERN_WARNING , &pdev->dev, +"combined mode detected (p=%u, s=%u)\n" , + pata_chan, sata_chan); } -return ata_pci_init_one (pdev, port_info, n_ports); +return ata_pci_init_one (pdev, port_info,2 ); }static int __init piix_init (void )
drivers/scsi/libata-core.c +28 -52
218 lines not on this page · raw message
drivers/scsi/libata-scsi.c +28 -18
100 lines not on this page · raw message
drivers/scsi/libata.h +1 -1
@@ -39,7 +39,7 @@ struct ata_scsi_args {/* libata-core.c */ extern int atapi_enabled; -extern int ata_qc_complete_noop (struct ata_queued_cmd *qc,u8 drv_stat); +extern int ata_qc_complete_noop (struct ata_queued_cmd *qc,unsigned int err_mask);extern struct ata_queued_cmd *ata_qc_new_init (struct ata_port *ap,struct ata_device *dev);extern void ata_rwcmd_protocol (struct ata_queued_cmd *qc);
drivers/scsi/pdc_adma.c +14 -12
@@ -40,6 +40,7 @@#include <linux/delay.h> #include <linux/interrupt.h> #include <linux/sched.h> +#include <linux/device.h> #include "scsi.h" #include <scsi/scsi_host.h> #include <asm/io.h>
@@ -451,7 +452,7 @@ static inline unsigned int adma_intr_pktstruct adma_port_priv *pp;struct ata_queued_cmd *qc;void __iomem *chan =ADMA_REGS (mmio_base, port_no); -u8 drv_stat =0 , status =readb (chan +ADMA_STATUS ); +u8 status =readb (chan +ADMA_STATUS );if (status ==0 )continue ;
@@ -464,11 +465,14 @@ static inline unsigned int adma_intr_pktcontinue ; qc =ata_qc_from_tag (ap, ap->active_tag);if (qc && (!(qc->tf.ctl &ATA_NIEN ))) { +unsigned int err_mask =0 ; +if ((status & (aPERR | aPSD | aUIRQ))) - drv_stat =ATA_ERR ; + err_mask =AC_ERR_OTHER ;else if (pp->pkt[0 ] != cDONE) - drv_stat =ATA_ERR ; -ata_qc_complete (qc, drv_stat); + err_mask =AC_ERR_OTHER ; + +ata_qc_complete (qc, err_mask); } }return handled;
@@ -498,7 +502,7 @@ static inline unsigned int adma_intr_mmi/* complete taskfile transaction */ pp->state = adma_state_idle; -ata_qc_complete (qc, status); +ata_qc_complete (qc,ac_err_mask (status)); handled =1 ; } }
@@ -623,16 +627,14 @@ static int adma_set_dma_masks(struct pci rc =pci_set_dma_mask (pdev,DMA_32BIT_MASK );if (rc) { - printk(KERN_ERR DRV_NAME -"(%s): 32-bit DMA enable failed\n" , - pci_name(pdev)); +dev_printk (KERN_ERR , &pdev->dev, +"32-bit DMA enable failed\n" );return rc; } rc =pci_set_consistent_dma_mask (pdev,DMA_32BIT_MASK );if (rc) { - printk(KERN_ERR DRV_NAME -"(%s): 32-bit consistent DMA enable failed\n" , - pci_name(pdev)); +dev_printk (KERN_ERR , &pdev->dev, +"32-bit consistent DMA enable failed\n" );return rc; }return 0 ;
@@ -648,7 +650,7 @@ static int adma_ata_init_one(struct pci_int rc, port_no;if (!printed_version++) - printk(KERN_DEBUG DRV_NAME " version " DRV_VERSION "\n"); +dev_printk (KERN_DEBUG , &pdev->dev,"version " DRV_VERSION "\n" ); rc =pci_enable_device (pdev);if (rc)
drivers/scsi/sata_mv.c +12 -29
107 lines not on this page · raw message
drivers/scsi/sata_nv.c +2 -1
@@ -61,6 +61,7 @@#include <linux/blkdev.h> #include <linux/delay.h> #include <linux/interrupt.h> +#include <linux/device.h> #include "scsi.h" #include <scsi/scsi_host.h> #include <linux/libata.h>
@@ -383,7 +384,7 @@ static int nv_init_one (struct pci_dev *return -ENODEV ;if (!printed_version++) - printk(KERN_DEBUG DRV_NAME " version " DRV_VERSION "\n"); +dev_printk (KERN_DEBUG , &pdev->dev,"version " DRV_VERSION "\n" ); rc =pci_enable_device (pdev);if (rc)
drivers/scsi/sata_promise.c +9 -10
@@ -38,6 +38,7 @@#include <linux/delay.h> #include <linux/interrupt.h> #include <linux/sched.h> +#include <linux/device.h> #include "scsi.h" #include <scsi/scsi_host.h> #include <linux/libata.h>
@@ -399,7 +400,8 @@ static void pdc_eng_timeout(struct ata_pcase ATA_PROT_DMA :case ATA_PROT_NODATA :printk (KERN_ERR "ata%u: command timeout\n" , ap->id); -ata_qc_complete (qc,ata_wait_idle (ap) |ATA_ERR ); + drv_stat =ata_wait_idle (ap); +ata_qc_complete (qc,__ac_err_mask (drv_stat));break ;default :
@@ -408,7 +410,7 @@ static void pdc_eng_timeout(struct ata_pprintk (KERN_ERR "ata%u: unknown timeout, cmd 0x%x stat 0x%x\n" , ap->id, qc->tf.command, drv_stat); -ata_qc_complete (qc, drv_stat); +ata_qc_complete (qc,ac_err_mask (drv_stat));break ; }
@@ -420,24 +422,21 @@ out:static inline unsigned int pdc_host_intr (struct ata_port *ap,struct ata_queued_cmd *qc) { -u8 status; -unsigned int handled =0 , have_err =0 ; +unsigned int handled =0 , err_mask =0 ;u32 tmp;void __iomem *mmio = (void __iomem *) ap->ioaddr.cmd_addr +PDC_GLOBAL_CTL ; tmp =readl (mmio);if (tmp &PDC_ERR_MASK ) { - have_err =1 ; + err_mask =AC_ERR_DEV ;pdc_reset_port (ap); }switch (qc->tf.protocol) {case ATA_PROT_DMA :case ATA_PROT_NODATA : - status =ata_wait_idle (ap); -if (have_err) - status |=ATA_ERR ; -ata_qc_complete (qc, status); + err_mask |=ac_err_mask (ata_wait_idle (ap)); +ata_qc_complete (qc, err_mask); handled =1 ;break ;
@@ -635,7 +634,7 @@ static int pdc_ata_init_one (struct pci_int rc;if (!printed_version++) - printk(KERN_DEBUG DRV_NAME " version " DRV_VERSION "\n"); +dev_printk (KERN_DEBUG , &pdev->dev,"version " DRV_VERSION "\n" );/* * If this driver happens to only be useful on Apple's K2, then
drivers/scsi/sata_qstor.c +12 -13
@@ -35,6 +35,7 @@#include <linux/delay.h> #include <linux/interrupt.h> #include <linux/sched.h> +#include <linux/device.h> #include "scsi.h" #include <scsi/scsi_host.h> #include <asm/io.h>
@@ -400,11 +401,12 @@ static inline unsigned int qs_intr_pkt(s qc =ata_qc_from_tag (ap, ap->active_tag);if (qc && (!(qc->tf.ctl &ATA_NIEN ))) {switch (sHST) { -case 0 :/* sucessful CPB */ +case 0 :/* successful CPB */ case 3 :/* device error */ pp->state = qs_state_idle;qs_enter_reg_mode (qc->ap); -ata_qc_complete (qc, sDST); +ata_qc_complete (qc, +ac_err_mask (sDST));break ;default :break ;
@@ -441,7 +443,7 @@ static inline unsigned int qs_intr_mmio(/* complete taskfile transaction */ pp->state = qs_state_idle; -ata_qc_complete (qc, status); +ata_qc_complete (qc,ac_err_mask (status)); handled =1 ; } }
@@ -599,25 +601,22 @@ static int qs_set_dma_masks(struct pci_dif (rc) { rc =pci_set_consistent_dma_mask (pdev,DMA_32BIT_MASK );if (rc) { - printk(KERN_ERR DRV_NAME -"(%s): 64-bit DMA enable failed\n" , - pci_name(pdev)); +dev_printk (KERN_ERR , &pdev->dev, +"64-bit DMA enable failed\n" );return rc; } } }else { rc =pci_set_dma_mask (pdev,DMA_32BIT_MASK );if (rc) { - printk(KERN_ERR DRV_NAME -"(%s): 32-bit DMA enable failed\n" , - pci_name(pdev)); +dev_printk (KERN_ERR , &pdev->dev, +"32-bit DMA enable failed\n" );return rc; } rc =pci_set_consistent_dma_mask (pdev,DMA_32BIT_MASK );if (rc) { - printk(KERN_ERR DRV_NAME -"(%s): 32-bit consistent DMA enable failed\n" , - pci_name(pdev)); +dev_printk (KERN_ERR , &pdev->dev, +"32-bit consistent DMA enable failed\n" );return rc; } }
@@ -634,7 +633,7 @@ static int qs_ata_init_one(struct pci_deint rc, port_no;if (!printed_version++) - printk(KERN_DEBUG DRV_NAME " version " DRV_VERSION "\n"); +dev_printk (KERN_DEBUG , &pdev->dev,"version " DRV_VERSION "\n" ); rc =pci_enable_device (pdev);if (rc)
drivers/scsi/sata_sil.c +4 -3
@@ -41,6 +41,7 @@#include <linux/blkdev.h> #include <linux/delay.h> #include <linux/interrupt.h> +#include <linux/device.h> #include "scsi.h" #include <scsi/scsi_host.h> #include <linux/libata.h>
@@ -386,7 +387,7 @@ static int sil_init_one (struct pci_devu8 cls;if (!printed_version++) - printk(KERN_DEBUG DRV_NAME " version " DRV_VERSION "\n"); +dev_printk (KERN_DEBUG , &pdev->dev,"version " DRV_VERSION "\n" );/* * If this driver happens to only be useful on Apple's K2, then
@@ -463,8 +464,8 @@ static int sil_init_one (struct pci_devwriteb (cls, mmio_base +SIL_FIFO_W3 ); } }else - printk(KERN_WARNING DRV_NAME "(%s): cache line size not set. Driver may not function\n", -pci_name (pdev)); +dev_printk (KERN_WARNING , &pdev->dev, +"cache line size not set. Driver may not function\n" );if (ent->driver_data == sil_3114) { irq_mask =SIL_MASK_4PORT ;
drivers/scsi/sata_sil24.c +17 -24
132 lines not on this page · raw message
drivers/scsi/sata_sis.c +10 -3
@@ -38,6 +38,7 @@#include <linux/blkdev.h> #include <linux/delay.h> #include <linux/interrupt.h> +#include <linux/device.h> #include "scsi.h" #include <scsi/scsi_host.h> #include <linux/libata.h>
@@ -237,6 +238,7 @@ static void sis_scr_write (struct ata_postatic int sis_init_one (struct pci_dev *pdev,const struct pci_device_id *ent) { +static int printed_version;struct ata_probe_ent *probe_ent =NULL ;int rc;u32 genctl;
@@ -245,6 +247,9 @@ static int sis_init_one (struct pci_devu8 pmr;u8 port2_start; +if (!printed_version++) +dev_printk (KERN_INFO , &pdev->dev,"version " DRV_VERSION "\n" ); + rc =pci_enable_device (pdev);if (rc)return rc;
@@ -288,16 +293,18 @@ static int sis_init_one (struct pci_devpci_read_config_byte (pdev,SIS_PMR , &pmr);if (ent->device !=0x182 ) {if ((pmr &SIS_PMR_COMBINED ) ==0 ) { -printk (KERN_INFO "sata_sis: Detected SiS 180/181 chipset in SATA mode\n" ); +dev_printk (KERN_INFO , &pdev->dev, +"Detected SiS 180/181 chipset in SATA mode\n" ); port2_start =64 ; }else { -printk (KERN_INFO "sata_sis: Detected SiS 180/181 chipset in combined mode\n" ); +dev_printk (KERN_INFO , &pdev->dev, +"Detected SiS 180/181 chipset in combined mode\n" ); port2_start=0 ; } }else { -printk (KERN_INFO "sata_sis: Detected SiS 182 chipset\n" ); +dev_printk (KERN_INFO , &pdev->dev,"Detected SiS 182 chipset\n" ); port2_start =0x20 ; }
drivers/scsi/sata_svw.c +2 -1
@@ -44,6 +44,7 @@#include <linux/blkdev.h> #include <linux/delay.h> #include <linux/interrupt.h> +#include <linux/device.h> #include "scsi.h" #include <scsi/scsi_host.h> #include <linux/libata.h>
@@ -362,7 +363,7 @@ static int k2_sata_init_one (struct pci_int i;if (!printed_version++) - printk(KERN_DEBUG DRV_NAME " version " DRV_VERSION "\n"); +dev_printk (KERN_DEBUG , &pdev->dev,"version " DRV_VERSION "\n" );/* * If this driver happens to only be useful on Apple's K2, then
drivers/scsi/sata_sx4.c +7 -6
@@ -38,6 +38,7 @@#include <linux/delay.h> #include <linux/interrupt.h> #include <linux/sched.h> +#include <linux/device.h> #include "scsi.h" #include <scsi/scsi_host.h> #include <linux/libata.h>
@@ -718,7 +719,7 @@ static inline unsigned int pdc20621_hostVPRINTK ("ata%u: read hdma, 0x%x 0x%x\n" , ap->id,readl (mmio +0x104 ),readl (mmio +PDC_HDMA_CTLSTAT ));/* get drive status; clear intr; complete txn */ -ata_qc_complete (qc,ata_wait_idle (ap)); +ata_qc_complete (qc,ac_err_mask (ata_wait_idle (ap)));pdc20621_pop_hdma (qc); }
@@ -756,7 +757,7 @@ static inline unsigned int pdc20621_hostVPRINTK ("ata%u: write ata, 0x%x 0x%x\n" , ap->id,readl (mmio +0x104 ),readl (mmio +PDC_HDMA_CTLSTAT ));/* get drive status; clear intr; complete txn */ -ata_qc_complete (qc,ata_wait_idle (ap)); +ata_qc_complete (qc,ac_err_mask (ata_wait_idle (ap)));pdc20621_pop_hdma (qc); } handled =1 ;
@@ -766,7 +767,7 @@ static inline unsigned int pdc20621_host status =ata_busy_wait (ap,ATA_BUSY |ATA_DRQ ,1000 );DPRINTK ("BUS_NODATA (drv_stat 0x%X)\n" , status); -ata_qc_complete (qc, status); +ata_qc_complete (qc,ac_err_mask (status)); handled =1 ; }else {
@@ -881,7 +882,7 @@ static void pdc_eng_timeout(struct ata_pcase ATA_PROT_DMA :case ATA_PROT_NODATA :printk (KERN_ERR "ata%u: command timeout\n" , ap->id); -ata_qc_complete (qc,ata_wait_idle (ap) |ATA_ERR ); +ata_qc_complete (qc,__ac_err_mask (ata_wait_idle (ap)));break ;default :
@@ -890,7 +891,7 @@ static void pdc_eng_timeout(struct ata_pprintk (KERN_ERR "ata%u: unknown timeout, cmd 0x%x stat 0x%x\n" , ap->id, qc->tf.command, drv_stat); -ata_qc_complete (qc, drv_stat); +ata_qc_complete (qc,ac_err_mask (drv_stat));break ; }
@@ -1385,7 +1386,7 @@ static int pdc_sata_init_one (struct pciint rc;if (!printed_version++) - printk(KERN_DEBUG DRV_NAME " version " DRV_VERSION "\n"); +dev_printk (KERN_DEBUG , &pdev->dev,"version " DRV_VERSION "\n" );/* * If this driver happens to only be useful on Apple's K2, then
drivers/scsi/sata_uli.c +5 -0
@@ -32,6 +32,7 @@#include <linux/blkdev.h> #include <linux/delay.h> #include <linux/interrupt.h> +#include <linux/device.h> #include "scsi.h" #include <scsi/scsi_host.h> #include <linux/libata.h>
@@ -178,12 +179,16 @@ static void uli_scr_write (struct ata_postatic int uli_init_one (struct pci_dev *pdev,const struct pci_device_id *ent) { +static int printed_version;struct ata_probe_ent *probe_ent;struct ata_port_info *ppi;int rc;unsigned int board_idx = (unsigned int ) ent->driver_data;int pci_dev_busy =0 ; +if (!printed_version++) +dev_printk (KERN_INFO , &pdev->dev,"version " DRV_VERSION "\n" ); + rc =pci_enable_device (pdev);if (rc)return rc;
drivers/scsi/sata_via.c +21 -17
@@ -41,6 +41,7 @@#include <linux/init.h> #include <linux/blkdev.h> #include <linux/delay.h> +#include <linux/device.h> #include "scsi.h" #include <scsi/scsi_host.h> #include <linux/libata.h>
@@ -259,15 +260,15 @@ static void svia_configure(struct pci_deu8 tmp8;pci_read_config_byte (pdev,PCI_INTERRUPT_LINE , &tmp8); - printk(KERN_INFO DRV_NAME "(%s): routed to hard irq line %d\n", -pci_name (pdev), +dev_printk (KERN_INFO , &pdev->dev,"routed to hard irq line %d\n" , (int ) (tmp8 &0xf0 ) ==0xf0 ?0 : tmp8 &0x0f );/* make sure SATA channels are enabled */ pci_read_config_byte (pdev,SATA_CHAN_ENAB , &tmp8);if ((tmp8 &ALL_PORTS ) !=ALL_PORTS ) { - printk(KERN_DEBUG DRV_NAME "(%s): enabling SATA channels (0x%x)\n", - pci_name(pdev), (int) tmp8); +dev_printk (KERN_DEBUG , &pdev->dev, +"enabling SATA channels (0x%x)\n" , + (int ) tmp8); tmp8 |=ALL_PORTS ;pci_write_config_byte (pdev,SATA_CHAN_ENAB , tmp8); }
@@ -275,8 +276,9 @@ static void svia_configure(struct pci_de/* make sure interrupts for each channel sent to us */ pci_read_config_byte (pdev,SATA_INT_GATE , &tmp8);if ((tmp8 &ALL_PORTS ) !=ALL_PORTS ) { - printk(KERN_DEBUG DRV_NAME "(%s): enabling SATA channel interrupts (0x%x)\n", - pci_name(pdev), (int) tmp8); +dev_printk (KERN_DEBUG , &pdev->dev, +"enabling SATA channel interrupts (0x%x)\n" , + (int ) tmp8); tmp8 |=ALL_PORTS ;pci_write_config_byte (pdev,SATA_INT_GATE , tmp8); }
@@ -284,8 +286,9 @@ static void svia_configure(struct pci_de/* make sure native mode is enabled */ pci_read_config_byte (pdev,SATA_NATIVE_MODE , &tmp8);if ((tmp8 &NATIVE_MODE_ALL ) !=NATIVE_MODE_ALL ) { - printk(KERN_DEBUG DRV_NAME "(%s): enabling SATA channel native mode (0x%x)\n", - pci_name(pdev), (int) tmp8); +dev_printk (KERN_DEBUG , &pdev->dev, +"enabling SATA channel native mode (0x%x)\n" , + (int ) tmp8); tmp8 |=NATIVE_MODE_ALL ;pci_write_config_byte (pdev,SATA_NATIVE_MODE , tmp8); }
@@ -303,7 +306,7 @@ static int svia_init_one (struct pci_devu8 tmp8;if (!printed_version++) - printk(KERN_DEBUG DRV_NAME " version " DRV_VERSION "\n"); +dev_printk (KERN_DEBUG , &pdev->dev,"version " DRV_VERSION "\n" ); rc =pci_enable_device (pdev);if (rc)
@@ -318,8 +321,9 @@ static int svia_init_one (struct pci_devif (board_id == vt6420) {pci_read_config_byte (pdev,SATA_PATA_SHARING , &tmp8);if (tmp8 &SATA_2DEV ) { - printk(KERN_ERR DRV_NAME "(%s): SATA master/slave not supported (0x%x)\n", - pci_name(pdev), (int) tmp8); +dev_printk (KERN_ERR , &pdev->dev, +"SATA master/slave not supported (0x%x)\n" , + (int ) tmp8); rc = -EIO ; goto err_out_regions; }
@@ -332,10 +336,11 @@ static int svia_init_one (struct pci_devfor (i =0 ; i <ARRAY_SIZE (svia_bar_sizes); i++)if ((pci_resource_start (pdev, i) ==0 ) || (pci_resource_len (pdev, i) < bar_sizes[i])) { - printk(KERN_ERR DRV_NAME "(%s): invalid PCI BAR %u (sz 0x%lx, val 0x%lx)\n", -pci_name (pdev), i, -pci_resource_start (pdev, i), - pci_resource_len(pdev, i)); +dev_printk (KERN_ERR , &pdev->dev, +"invalid PCI BAR %u (sz 0x%lx, val 0x%lx)\n" , + i, +pci_resource_start (pdev, i), +pci_resource_len (pdev, i)); rc = -ENODEV ; goto err_out_regions; }
@@ -353,8 +358,7 @@ static int svia_init_one (struct pci_dev probe_ent =vt6421_init_probe_ent (pdev);if (!probe_ent) { - printk(KERN_ERR DRV_NAME "(%s): out of memory\n", - pci_name(pdev)); +dev_printk (KERN_ERR , &pdev->dev,"out of memory\n" ); rc = -ENOMEM ; goto err_out_regions; }
drivers/scsi/sata_vsc.c +2 -1
@@ -42,6 +42,7 @@#include <linux/delay.h> #include <linux/interrupt.h> #include <linux/dma-mapping.h> +#include <linux/device.h> #include "scsi.h" #include <scsi/scsi_host.h> #include <linux/libata.h>
@@ -295,7 +296,7 @@ static int __devinit vsc_sata_init_one (int rc;if (!printed_version++) - printk(KERN_DEBUG DRV_NAME " version " DRV_VERSION "\n"); +dev_printk (KERN_DEBUG , &pdev->dev,"version " DRV_VERSION "\n" ); rc =pci_enable_device (pdev);if (rc)
include/linux/libata.h +26 -4
@@ -172,6 +172,13 @@ enum hsm_task_states { HSM_ST_ERR, }; +enum ata_completion_errors { +AC_ERR_OTHER = (1 <<0 ), +AC_ERR_DEV = (1 <<1 ), +AC_ERR_ATA_BUS = (1 <<2 ), +AC_ERR_HOST_BUS = (1 <<3 ), +}; +/* forward declarations */ struct scsi_device ;struct ata_port_operations ;
@@ -179,7 +186,7 @@ struct ata_port;struct ata_queued_cmd ;/* typedefs */ -typedef int (*ata_qc_cb_t ) (struct ata_queued_cmd *qc,u8 drv_stat); +typedef int (*ata_qc_cb_t ) (struct ata_queued_cmd *qc,unsigned int err_mask);struct ata_ioports {unsigned long cmd_addr;
@@ -347,7 +354,6 @@ struct ata_port_operations {void (*exec_command)(struct ata_port *ap,const struct ata_taskfile *tf);u8 (*check_status)(struct ata_port *ap);u8 (*check_altstatus)(struct ata_port *ap); -u8 (*check_err)(struct ata_port *ap);void (*dev_select)(struct ata_port *ap,unsigned int device);void (*phy_reset) (struct ata_port *ap);
@@ -434,7 +440,6 @@ extern void ata_noop_dev_select (structextern void ata_std_dev_select (struct ata_port *ap,unsigned int device);extern u8 ata_check_status (struct ata_port *ap);extern u8 ata_altstatus (struct ata_port *ap); -extern u8 ata_chk_err (struct ata_port *ap);extern void ata_exec_command (struct ata_port *ap,const struct ata_taskfile *tf);extern int ata_port_start (struct ata_port *ap);extern void ata_port_stop (struct ata_port *ap);
@@ -455,7 +460,7 @@ extern void ata_bmdma_start (struct ata_extern void ata_bmdma_stop (struct ata_queued_cmd *qc);extern u8 ata_bmdma_status (struct ata_port *ap);extern void ata_bmdma_irq_clear (struct ata_port *ap); -extern void ata_qc_complete (struct ata_queued_cmd *qc,u8 drv_stat); +extern void ata_qc_complete (struct ata_queued_cmd *qc,unsigned int err_mask);extern void ata_eng_timeout (struct ata_port *ap);extern void ata_scsi_simulate (u16 *id,struct scsi_cmnd *cmd,void (*done)(struct scsi_cmnd *));
@@ -718,4 +723,21 @@ static inline int ata_try_flush_cache(co ata_id_has_flush_ext(dev->id); } +static inline unsigned int ac_err_mask (u8 status) +{ +if (status &ATA_BUSY ) +return AC_ERR_ATA_BUS ; +if (status & (ATA_ERR |ATA_DF )) +return AC_ERR_DEV ; +return 0 ; +} + +static inline unsigned int __ac_err_mask (u8 status) +{ +unsigned int mask =ac_err_mask (status); +if (mask ==0 ) +return AC_ERR_OTHER ; +return mask; +} +#endif /* __LINUX_LIBATA_H__ */
Quoted 3 lines · Jeff Garzik
Please pull from 'upstream-linus' branch of
master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev.git
Linus may not receive this. For me at least, large amounts of incoming and outgoing OSDL email have been disappearing into the ether for the past 12 hours or so.
Quoted 4 lines · Andrew Morton
Linus may not receive this. For me at least, large amounts of incoming and outgoing OSDL email have been disappearing into the ether for the past 12 hours or so.
Apparently the osdl mail server (and bugzilla etc) had a disk failure overnight.
My (and yours, Andrew) mail should be starting to trickle in now. Just a little bit delayed ;)
Linus
Quoted 7 lines · Andrew Morton
Quoted 2 lines · Jeff Garzik
Please pull from 'upstream-linus' branch of
master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/libata-dev.gitLinus may not receive this. For me at least, large amounts of incoming and outgoing OSDL email have been disappearing into the ether for the past 12 hours or so.
It's probably delayed. I got the "could not deliver for 4 hours, connection with smtp.osdl.org timed out" warning on the original "Is this a viable option?" question, and Linus has since replied, so it went through...
Rob
P.S. The git source also wanted the -dev version of libcurl installed, whatever that is. Been happily banging on this box for months without ever needing it. Am now reading through the git tutorial. Very dry.
I read through the git bisect source (well, the bits in rev-list.c anyway), and yeah it's cheating mightily with the "distance" thing, and by supplying "good" and "bad" you're actually making the greater than or less than decisions yourself. Whee.
If all else fails, it's got a sort-by-date function in there, so if you plug the date thing in for the good and bad you at least get something consistent, but I can see Linus's warnings about huge, evil, unintelligible revisions from jumping around like that.
Of course you don't have to make the ordering decision right away: I get two halves, and can bisect each one all the way to binary tree without having to make a single greater than or less than decision. Then when putting the tree back together, the criteria is "which direction produces the smallest cumulative patch", which isn't nicely resolving in my head into code yet but I'm working on it...
Need to get a kernel tree to play with, which means finishing this tutorial.
Need... more... caffeine.
Still Rob