diff options
author | Scott Long <scottl@FreeBSD.org> | 2013-09-24 16:50:53 +0000 |
---|---|---|
committer | Scott Long <scottl@FreeBSD.org> | 2013-09-24 16:50:53 +0000 |
commit | 185884259b58c3ef8203268c1c201095c7170d63 (patch) | |
tree | ccab290b4cfbac27db6123e5df329c2ca4e9a641 /sys/dev/iir/iir.c | |
parent | febdb468801f35e51c6c5c22221cfce9197c6f3b (diff) |
Update the CAM API for FreeBSD 10:
- Remove the timeout_ch field. It's been deprecated since FreeBSD 7.0;
MPSAFE drivers should be managing their own timeout storage. The
remaining non-MPSAFE drivers have been modified to also manage their own
storage, and should be considered for updating to MPSAFE (or removal)
during the FreeBSD 10.x lifecycle.
- Add fields related to soft timeouts and quality of service, to be used
in upcoming work.
- Add room for more flags in the CCB header and path_inq structures.
- Begin support for extended 64-bit LUNs.
- Bump the CAM version number to 0x18, but add compat shims. Tested with
camcontrol and smartctl.
Reviewed by: nathanw, ken, kib
Approved by: re
Obtained from: Netflix
Notes
Notes:
svn path=/head/; revision=255853
Diffstat (limited to 'sys/dev/iir/iir.c')
-rw-r--r-- | sys/dev/iir/iir.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/sys/dev/iir/iir.c b/sys/dev/iir/iir.c index 684fce3298e1..1090042ff511 100644 --- a/sys/dev/iir/iir.c +++ b/sys/dev/iir/iir.c @@ -270,6 +270,7 @@ iir_init(struct gdt_softc *gdt) gccb->gc_map_flag = TRUE; gccb->gc_scratch = &gdt->sc_gcscratch[GDT_SCRATCH_SZ * i]; gccb->gc_scratch_busbase = gdt->sc_gcscratch_busbase + GDT_SCRATCH_SZ * i; + callout_handle_init(&gccb->gc_timeout_ch); SLIST_INSERT_HEAD(&gdt->sc_free_gccb, gccb, sle); } gdt->sc_init_level++; @@ -1239,7 +1240,7 @@ gdtexecuteccb(void *arg, bus_dma_segment_t *dm_segs, int nseg, int error) ccb->ccb_h.status |= CAM_SIM_QUEUED; /* timeout handling */ - ccb->ccb_h.timeout_ch = + gccb->gc_timeout_ch = timeout(iir_timeout, (caddr_t)gccb, (ccb->ccb_h.timeout * hz) / 1000); @@ -1747,7 +1748,7 @@ gdt_sync_event(struct gdt_softc *gdt, int service, printf("\n"); return (0); } else { - untimeout(iir_timeout, gccb, ccb->ccb_h.timeout_ch); + untimeout(iir_timeout, gccb, gccb->gc_timeout_ch); if (gdt->sc_status == GDT_S_BSY) { GDT_DPRINTF(GDT_D_DEBUG, ("gdt_sync_event(%p) gccb %p busy\n", gdt, gccb)); |