Lines Matching defs:hib

138 hibernate_write(union hibernate_info *hib, daddr_t offset, vaddr_t addr,
143 if (hib == NULL || offset < 0 || blks == 0) {
144 printf("%s: hib is NULL, offset < 0 or blks == 0\n", __func__);
150 if (offset + blks > hib->image_size) {
153 __func__, hib->image_offset, offset, blks);
156 offset += hib->image_offset;
162 __func__, hib->chunktable_offset, offset, blks);
165 offset += hib->chunktable_offset;
168 if (offset != hib->sig_offset || size != hib->sec_size) {
171 __func__, hib->sig_offset, offset, blks);
180 return (hib->io_func(hib->dev, offset, addr, size, HIB_W,
181 hib->io_page));
344 panic("hib_free: freed item %p not in hib arena", addr);
568 * Fills out the hibernate_info union pointed to by hib
573 get_hibernate_info(union hibernate_info *hib, int suspend)
583 hib->guard = __guard_local;
587 hib->io_func = get_hibernate_io_function(swdevt[0]);
588 if (hib->io_func == NULL)
592 hib->dev = swdevt[0];
595 dl_ret = disk_readlabel(&dl, hib->dev, err_string, sizeof(err_string));
603 part = DISKPART(hib->dev);
611 hib->magic = HIBERNATE_MAGIC;
614 hib->sec_size = dl.d_secsize;
615 hib->sig_offset = DL_GETPSIZE(&dl.d_partitions[part]) - 1;
616 hib->sig_offset = DL_SECTOBLK(&dl, hib->sig_offset);
628 SHA256Final((u_int8_t *)&hib->kern_hash, &ctx);
632 hib->piglet_va = global_piglet_va;
633 hib->piglet_pa = global_piglet_pa;
634 hib->io_page = (void *)hib->piglet_va;
644 if (hib->io_func(hib->dev,
648 HIB_INIT, hib->io_page))
657 hib->io_page = malloc(PAGE_SIZE, M_DEVBUF, M_NOWAIT);
658 if (!hib->io_page)
662 if (get_hibernate_info_md(hib))
795 hibernate_inflate_region(union hibernate_info *hib, paddr_t dest,
812 skip = hibernate_inflate_skip(hib, dest);
825 hib->piglet_pa + (110 * PAGE_SIZE) +
826 hib->retguard_ofs, 0);
827 hib->retguard_ofs += PAGE_SIZE;
828 if (hib->retguard_ofs > 255 * PAGE_SIZE) {
860 hibernate_deflate(union hibernate_info *hib, paddr_t src,
863 vaddr_t hibernate_io_page = hib->piglet_va + PAGE_SIZE;
892 hibernate_write_signature(union hibernate_info *hib)
894 memset(&disk_hib, 0, hib->sec_size);
895 memcpy(&disk_hib, hib, DEV_BSIZE);
898 return (hibernate_write(hib, hib->sig_offset,
899 (vaddr_t)&disk_hib, hib->sec_size, IO_TYPE_SIG));
908 hibernate_write_chunktable(union hibernate_info *hib)
916 hibernate_chunk_table_start = hib->piglet_va +
921 if ((err = hibernate_write(hib, btodb(i),
934 * guaranteed to not match any valid hib.
937 hibernate_clear_signature(union hibernate_info *hib)
943 memset(&disk_hib, 0, hib->sec_size);
947 hib->sig_offset);
948 if (hibernate_block_io(hib,
949 hib->sig_offset,
950 hib->sec_size, (vaddr_t)&disk_hib, 1))
983 DPRINTF("hib range %d mismatch [%p-%p != %p-%p]\n",
1009 hibernate_block_io(union hibernate_info *hib, daddr_t blkctr,
1023 bp->b_dev = hib->dev;
1028 printf("hib block_io biowait error %d blk %lld size %zu\n",
1048 hibernate_preserve_entropy(union hibernate_info *hib)
1059 (paddr_t)(hib->piglet_pa + (29 * PAGE_SIZE)),
1109 union hibernate_info *hib = (union hibernate_info *)&buf;
1119 if (get_hibernate_info(hib, 0)) {
1127 bdsw = &bdevsw[major(hib->dev)];
1128 if ((*bdsw->d_open)(hib->dev, FREAD, S_IFCHR, curproc)) {
1135 hib->sig_offset);
1137 if (hibernate_block_io(hib,
1138 hib->sig_offset,
1139 hib->sec_size, (vaddr_t)&disk_hib, 0)) {
1155 if (hibernate_clear_signature(hib)) {
1164 if (hibernate_compare_signature(hib, &disk_hib)) {
1168 disk_hib.dev = hib->dev;
1179 if ((*bdsw->d_close)(hib->dev, 0, S_IFCHR, curproc))
1230 else if ((*bdsw->d_close)(hib->dev, 0, S_IFCHR, curproc))
1243 hibernate_unpack_image(union hibernate_info *hib)
1253 pva = (char *)hib->piglet_pa;
1260 memcpy(buf, hib, sizeof(buf));
1347 hibernate_process_chunk(union hibernate_info *hib,
1350 char *pva = (char *)hib->piglet_va;
1354 hibernate_inflate_region(hib, chunk->base,
1383 hibernate_write_rle(union hibernate_info *hib, paddr_t inaddr,
1389 vaddr_t hibernate_io_page = hib->piglet_va + PAGE_SIZE;
1400 hibernate_deflate(hib, (paddr_t)rleloc, out_remaining);
1404 if ((err = hibernate_write(hib, *blkctr,
1406 DPRINTF("hib write error %d\n", err);
1415 hibernate_deflate(hib,
1451 hibernate_write_chunks(union hibernate_info *hib)
1456 vaddr_t hibernate_io_page = hib->piglet_va + PAGE_SIZE;
1464 hib->chunk_ctr = 0;
1470 hibernate_copy_page = hib->piglet_va + 3 * PAGE_SIZE;
1471 hibernate_rle_page = hib->piglet_va + 28 * PAGE_SIZE;
1473 chunks = (struct hibernate_disk_chunk *)(hib->piglet_va +
1477 for (i = 0; i < hib->nranges; i++) {
1478 range_base = hib->ranges[i].base;
1479 range_end = hib->ranges[i].end;
1484 chunks[hib->chunk_ctr].base = inaddr;
1486 chunks[hib->chunk_ctr].end = inaddr +
1489 chunks[hib->chunk_ctr].end = range_end;
1492 hib->chunk_ctr ++;
1499 for (i = 0; i < hib->chunk_ctr; i++) {
1506 if (hibernate_zlib_reset(hib, 1) != Z_OK) {
1533 rle = hibernate_write_rle(hib,
1551 inaddr += hibernate_deflate(hib,
1566 if ((err = hibernate_write(hib, blkctr,
1569 DPRINTF("hib write error %d\n",
1610 used = roundup(2 * PAGE_SIZE - out_remaining, hib->sec_size);
1613 if ((err = hibernate_write(hib, blkctr,
1615 DPRINTF("hib final write error %d\n", err);
1632 * by the piglet allocated via the supplied hib.
1635 hibernate_zlib_reset(union hibernate_info *hib, int deflate)
1639 char *pva = (char *)hib->piglet_va;
1676 * size are recorded in hib. Begin by reading the persisted
1686 hibernate_read_image(union hibernate_info *hib)
1693 paddr_t piglet_chunktable = hib->piglet_pa +
1703 blkctr = hib->chunktable_offset;
1720 if (hibernate_block_io(hib, blkctr, MAXPHYS,
1727 blkctr = hib->image_offset;
1732 for (i = 0; i < hib->chunk_ctr; i++)
1738 hib->image_offset, compressed_size / (1024 * 1024));
1742 if (uvm_pmr_alloc_pig(&pig_start, pig_sz, hib->piglet_pa) == ENOMEM) {
1753 if (hibernate_read_chunks(hib, image_start, image_end, disk_size,
1760 hibernate_populate_resume_pt(hib, image_start, image_end);
1777 hibernate_read_chunks(union hibernate_info *hib, paddr_t pig_start,
1791 piglet_base = hib->piglet_pa;
1818 nchunks = hib->chunk_ctr;
1850 blkctr = chunks[fchunks[i]].offset + hib->image_offset;
1880 err = hibernate_block_io(hib, blkctr, read_size,
1915 union hibernate_info *hib = (union hibernate_info *)&buf;
1921 * hib->piglet_pa and vaddr stored in hib->piglet_va
1923 if (get_hibernate_info(hib, 1)) {
1929 if (uvm_hibswap(hib->dev, &start, &end)) {
1946 hib->image_offset = ctod(start);
1947 hib->image_size = ctod(end - start + 1) -
1949 hib->chunktable_offset = hib->image_offset + hib->image_size;
1952 "chunktable-length %d blocks\n", hib->image_offset, hib->image_size,
1957 if (hibernate_write_chunks(hib)) {
1963 if (hibernate_write_chunktable(hib)) {
1969 if (hibernate_write_signature(hib)) {
1981 if (hib->io_func(hib->dev, 0, (vaddr_t)NULL, 0, HIB_DONE, hib->io_page))