On Fri, May 06, 2011 at 10:52:19AM -0700, Matthew Dempsky wrote:
> If you have a sili(4) or ahci(4), I'd appreciate a quick test of the
> diff below.  As long as you can still mount your disks without
> panicking, then it worked. :)
> 
> One test for each is sufficient, so please reply to the list to save
> others from redundant effort.
Works fine with this on amd64:

ahci1 at pci0 dev 17 function 0 "ATI SBx00 SATA" rev 0x00: apic 4 int 22, AHCI 
1.1

Cheers,
Jasper

> Index: ata/atascsi.c
> ===================================================================
> RCS file: /home/mdempsky/anoncvs/cvs/src/sys/dev/ata/atascsi.c,v
> retrieving revision 1.104
> diff -u -p -r1.104 atascsi.c
> --- ata/atascsi.c     5 May 2011 19:23:05 -0000       1.104
> +++ ata/atascsi.c     6 May 2011 17:41:20 -0000
> @@ -1590,10 +1590,12 @@ atascsi_io_get(void *cookie)
>  void
>  atascsi_io_put(void *cookie, void *io)
>  {
> -     struct ata_xfer         *xa = io;
> +     struct atascsi_host_port        *ahp = cookie;
> +     struct atascsi                  *as = ahp->ahp_as;
> +     struct ata_xfer                 *xa = io;
>  
>       xa->state = ATA_S_COMPLETE; /* XXX this state machine is dumb */
> -     xa->ata_put_xfer(xa);
> +     as->as_methods->ata_put_xfer(xa);
>  }
>  
>  void
> Index: ata/atascsi.h
> ===================================================================
> RCS file: /home/mdempsky/anoncvs/cvs/src/sys/dev/ata/atascsi.h,v
> retrieving revision 1.45
> diff -u -p -r1.45 atascsi.h
> --- ata/atascsi.h     26 Jan 2011 21:41:00 -0000      1.45
> +++ ata/atascsi.h     5 May 2011 19:33:35 -0000
> @@ -18,6 +18,9 @@
>   * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
>   */
>  
> +#ifndef _DEV_ATA_ATASCSI_H_
> +#define _DEV_ATA_ATASCSI_H_
> +
>  struct atascsi;
>  struct scsi_link;
>  
> @@ -327,8 +330,6 @@ struct ata_xfer {
>       void                    *atascsi_private;
>  
>       int                     pmp_port;
> -
> -     void                    (*ata_put_xfer)(struct ata_xfer *);
>  };
>  
>  /*
> @@ -339,6 +340,7 @@ struct atascsi_methods {
>       int                     (*probe)(void *, int, int);
>       void                    (*free)(void *, int, int);
>       struct ata_xfer *       (*ata_get_xfer)(void *, int);
> +     void                    (*ata_put_xfer)(struct ata_xfer *);
>       void                    (*ata_cmd)(struct ata_xfer *);
>  };
>  
> @@ -368,3 +370,5 @@ int               atascsi_probe_dev(struct atascsi *,
>  int          atascsi_detach_dev(struct atascsi *, int, int, int);
>  
>  void         ata_complete(struct ata_xfer *);
> +
> +#endif /* _DEV_ATA_ATASCSI_H_ */
> Index: ic/sili.c
> ===================================================================
> RCS file: /home/mdempsky/anoncvs/cvs/src/sys/dev/ic/sili.c,v
> retrieving revision 1.47
> diff -u -p -r1.47 sili.c
> --- ic/sili.c 26 Jan 2011 21:41:00 -0000      1.47
> +++ ic/sili.c 5 May 2011 19:34:11 -0000
> @@ -211,6 +211,7 @@ struct atascsi_methods sili_atascsi_meth
>       sili_ata_probe,
>       sili_ata_free,
>       sili_ata_get_xfer,
> +     sili_ata_put_xfer,
>       sili_ata_cmd
>  };
>  
> @@ -833,7 +834,6 @@ sili_ccb_alloc(struct sili_port *sp)
>               ccb->ccb_xa.fis = (struct ata_fis_h2d *)&prb->fis;
>               ccb->ccb_xa.packetcmd = ((struct sili_prb_packet *)prb)->cdb;
>               ccb->ccb_xa.tag = i;
> -             ccb->ccb_xa.ata_put_xfer = sili_ata_put_xfer;
>               ccb->ccb_xa.state = ATA_S_COMPLETE;
>  
>               sili_put_ccb(ccb);
> Index: pci/ahci.c
> ===================================================================
> RCS file: /home/mdempsky/anoncvs/cvs/src/sys/dev/pci/ahci.c,v
> retrieving revision 1.177
> diff -u -p -r1.177 ahci.c
> --- pci/ahci.c        24 Apr 2011 11:09:48 -0000      1.177
> +++ pci/ahci.c        5 May 2011 19:33:58 -0000
> @@ -622,6 +622,7 @@ struct atascsi_methods ahci_atascsi_meth
>       ahci_ata_probe,
>       ahci_ata_free,
>       ahci_ata_get_xfer,
> +     ahci_ata_put_xfer,
>       ahci_ata_cmd
>  };
>  
> @@ -1227,8 +1228,6 @@ nomem:
>                   (struct ata_fis_h2d *)ccb->ccb_cmd_table->cfis;
>               ccb->ccb_xa.packetcmd = ccb->ccb_cmd_table->acmd;
>               ccb->ccb_xa.tag = i;
> -
> -             ccb->ccb_xa.ata_put_xfer = ahci_ata_put_xfer;
>  
>               ccb->ccb_xa.state = ATA_S_COMPLETE;
>               ahci_put_ccb(ccb);
> 

-- 
Cheers,
Jasper

"Capable, generous men do not create victims, they nurture them."

Reply via email to