dumpbuf
static uchar_t *dumpbuf;
if (!dumpbuf) {
if (!(dumpbuf = kmem_alloc(ptob(1), KM_NOSLEEP))) {
bcopy(addr, (caddr_t)dumpbuf, tsize);
mblk_p->b_cont = esballoc((uchar_t *)dumpbuf, ptob(1), BPRI_HI, &frnop);
dumpbuf.size = dumpbuf_iosize(maxphys);
dumpbuf.start = kmem_alloc(dumpbuf.size, KM_SLEEP);
dumpbuf.end = dumpbuf.start + dumpbuf.size;
dumpbuf.iosize = 0;
dumpbuf.iosize = dki.dki_maxtransfer * blk_size;
size_t size = P2ROUNDUP(dumpbuf.cur - dumpbuf.start, PAGESIZE);
if (dumpbuf.vp_off + size > dumpbuf.vp_limit) {
dumpbuf.vp_off = dumpbuf.vp_limit;
err = VOP_DUMP(dumpvp, dumpbuf.start,
lbtodb(dumpbuf.vp_off), btod(size), NULL);
err = vn_rdwr(UIO_WRITE, dumpbuf.cdev_vp != NULL ?
dumpbuf.cdev_vp : dumpvp, dumpbuf.start, size,
dumpbuf.vp_off, UIO_SYSSPACE, 0, dumpbuf.vp_limit,
dumpbuf.vp_off += size;
dumpbuf.cur = dumpbuf.start;
return (dumpbuf.vp_off);
len = MIN(size, dumpbuf.end - dumpbuf.cur);
off = P2PHASE(dumpbuf.vp_off, dumpbuf.size);
if (off == 0 || !ISP2(dumpbuf.size)) {
sz = dumpbuf.size - off;
dumpbuf.cur = dumpbuf.start + sz;
ovbcopy(dumpbuf.start + sz, dumpbuf.start, off);
dumpbuf.cur += off;
bcopy(va, dumpbuf.cur, len);
dumpbuf.cur += len;
dumpbuf.cur = dumpbuf.start;
dumpbuf.vp_limit = dumpvp_size - (DUMP_OFFSET + DUMP_LOGSIZE +
dumpvp_start = dumpbuf.vp_limit - DUMP_SUMMARYSIZE;
dumpbuf.vp_off = dumpvp_start;
dumpbuf.cur = dumpbuf.start;
dumpbuf.vp_limit = dumpvp_size - (DUMP_OFFSET + DUMP_LOGSIZE);
dumpvp_start = dumpbuf.vp_limit - DUMP_ERPTSIZE;
dumpbuf.vp_off = dumpvp_start;
(size_t)(dumpbuf.vp_off - dumpvp_start),
dumpbuf.cur = dumpbuf.start;
dumpbuf.vp_limit = dumpvp_size - DUMP_OFFSET;
dumpvp_start = dumpbuf.vp_limit - DUMP_LOGSIZE;
dumpbuf.vp_off = dumpvp_start;
(size_t)(dumpbuf.vp_off - dumpvp_start),
P("dumpbuf.iosize,%ld\n", dumpbuf.iosize);
P("dumpbuf.size,%ld\n", dumpbuf.size);
dumpbuf.cur = dumpbuf.start;
ASSERT(dumpbuf.cdev_vp == NULL);
dumpbuf.cdev_vp = cmn_cdev_vp;
dumpbuf.vp_limit = dumpvp_size - DUMP_LOGSIZE - DUMP_OFFSET -
dumpbuf.vp_off = dumphdr->dump_ksyms = dumphdr->dump_start + PAGESIZE;
dumpbuf.vp_off = dumphdr->dump_start;
dumpbuf.vp_limit = dumpvp_size;
dumpbuf.vp_off = dumpbuf.vp_limit - DUMP_OFFSET;
if (dumpbuf.cdev_vp != NULL) {
(void) VOP_CLOSE(dumpbuf.cdev_vp, FREAD | FWRITE, 1, 0,
VN_RELE(dumpbuf.cdev_vp);
dumpbuf.cdev_vp = NULL;
dumpbuf_t dumpbuf; /* I/O buffer */
char *old_buf = dumpbuf.start;
size_t old_size = dumpbuf.size;
new_size = dumpbuf_iosize(MAX(dumpbuf.iosize, maxphys));
dumpbuf.size = new_size;
dumpbuf.start = new_buf;
dumpbuf.end = new_buf + new_size;
if (dumpbuf.iosize >= DUMP_1MB)
else if (dumpbuf.iosize >= (256 * DUMP_1KB))
struct buf dumpbuf, *dbp = &dumpbuf;