55 static void xbuf_restart_callback(void *arg);
56 static void xbuf_enqueue(struct buf *bp, ddi_xbuf_attr_t xap);
57 static int xbuf_brk_done(struct buf *bp);
58
59
60 /*
61 * Note: Should this be exposed to the caller.... do we want to give the
62 * caller the fexibility of specifying the parameters for the thread pool?
63 * Note: these values are just estimates at this time, based upon what
64 * seems reasonable for the sd driver. It may be preferable to make these
65 * parameters self-scaling in a real (future) implementation.
66 */
67 #define XBUF_TQ_MINALLOC 64
68 #define XBUF_TQ_MAXALLOC 512
69 #define XBUF_DISPATCH_DELAY (drv_usectohz(50000)) /* 50 msec */
70
71 static taskq_t *xbuf_tq = NULL;
72 static int xbuf_attr_tq_minalloc = XBUF_TQ_MINALLOC;
73 static int xbuf_attr_tq_maxalloc = XBUF_TQ_MAXALLOC;
74
75 static kmutex_t xbuf_mutex = { 0 };
76 static uint32_t xbuf_refcount = 0;
77
78 /*
79 * Private wrapper for buf cloned via ddi_xbuf_qstrategy()
80 */
81 struct xbuf_brk {
82 kmutex_t mutex;
83 struct buf *bp0;
84 uint8_t nbufs; /* number of buf allocated */
85 uint8_t active; /* number of active xfer */
86
87 size_t brksize; /* break size used for this buf */
88 int brkblk;
89
90 /* xfer position */
91 off_t off;
92 off_t noff;
93 daddr_t blkno;
94 };
95
|
55 static void xbuf_restart_callback(void *arg);
56 static void xbuf_enqueue(struct buf *bp, ddi_xbuf_attr_t xap);
57 static int xbuf_brk_done(struct buf *bp);
58
59
60 /*
61 * Note: Should this be exposed to the caller.... do we want to give the
62 * caller the fexibility of specifying the parameters for the thread pool?
63 * Note: these values are just estimates at this time, based upon what
64 * seems reasonable for the sd driver. It may be preferable to make these
65 * parameters self-scaling in a real (future) implementation.
66 */
67 #define XBUF_TQ_MINALLOC 64
68 #define XBUF_TQ_MAXALLOC 512
69 #define XBUF_DISPATCH_DELAY (drv_usectohz(50000)) /* 50 msec */
70
71 static taskq_t *xbuf_tq = NULL;
72 static int xbuf_attr_tq_minalloc = XBUF_TQ_MINALLOC;
73 static int xbuf_attr_tq_maxalloc = XBUF_TQ_MAXALLOC;
74
75 static kmutex_t xbuf_mutex = { {NULL} };
76 static uint32_t xbuf_refcount = 0;
77
78 /*
79 * Private wrapper for buf cloned via ddi_xbuf_qstrategy()
80 */
81 struct xbuf_brk {
82 kmutex_t mutex;
83 struct buf *bp0;
84 uint8_t nbufs; /* number of buf allocated */
85 uint8_t active; /* number of active xfer */
86
87 size_t brksize; /* break size used for this buf */
88 int brkblk;
89
90 /* xfer position */
91 off_t off;
92 off_t noff;
93 daddr_t blkno;
94 };
95
|