Print this page
5255 uts shouldn't open-code ISP2


 893                 /*
 894                  * hv_mach_pri() is not supported on a guest domain.
 895                  * Unregister pboot API group to prevent failures.
 896                  */
 897                 (void) hsvc_unregister(&pboot_hsvc);
 898                 hsvc_pboot_available = B_FALSE;
 899                 DS_PRI_DBG("ds_get_hv_pri: hv_mach_pri service is not "
 900                     "available. errorno: 0x%lx\n", status);
 901                 return (0);
 902         } else if (pri_size == 0) {
 903                 return (1);
 904         } else {
 905                 DS_PRI_DBG("ds_get_hv_pri: hv_mach_pri pri size: 0x%lx\n",
 906                     pri_size);
 907         }
 908 
 909         /*
 910          * contig_mem_alloc requires size to be a power of 2.
 911          * Increase size to next power of 2 if necessary.
 912          */
 913         if ((pri_size & (pri_size - 1)) != 0)
 914                 buf_size = 1 << highbit(pri_size);
 915         DS_PRI_DBG("ds_get_hv_pri: buf_size = 0x%lx\n", buf_size);
 916 
 917         buf_va = contig_mem_alloc(buf_size);
 918         if (buf_va == NULL)
 919                 return (1);
 920 
 921         buf_pa = va_to_pa(buf_va);
 922         DS_PRI_DBG("ds_get_hv_pri: buf_pa 0x%lx\n", buf_pa);
 923         status = hv_mach_pri(buf_pa, &pri_size);
 924         DS_PRI_DBG("ds_get_hv_pri: hv_mach_pri status = 0x%lx\n", status);
 925 
 926         if (status == H_EOK) {
 927                 pri_data = kmem_alloc(pri_size, KM_SLEEP);
 928                 sp->ds_pri = pri_data;
 929                 sp->ds_pri_len = pri_size;
 930                 bcopy(buf_va, pri_data, sp->ds_pri_len);
 931                 sp->state |= DS_PRI_HAS_PRI;
 932                 sp->gencount++;
 933         }


 893                 /*
 894                  * hv_mach_pri() is not supported on a guest domain.
 895                  * Unregister pboot API group to prevent failures.
 896                  */
 897                 (void) hsvc_unregister(&pboot_hsvc);
 898                 hsvc_pboot_available = B_FALSE;
 899                 DS_PRI_DBG("ds_get_hv_pri: hv_mach_pri service is not "
 900                     "available. errorno: 0x%lx\n", status);
 901                 return (0);
 902         } else if (pri_size == 0) {
 903                 return (1);
 904         } else {
 905                 DS_PRI_DBG("ds_get_hv_pri: hv_mach_pri pri size: 0x%lx\n",
 906                     pri_size);
 907         }
 908 
 909         /*
 910          * contig_mem_alloc requires size to be a power of 2.
 911          * Increase size to next power of 2 if necessary.
 912          */
 913         if (!ISP2(pri_size))
 914                 buf_size = 1 << highbit(pri_size);
 915         DS_PRI_DBG("ds_get_hv_pri: buf_size = 0x%lx\n", buf_size);
 916 
 917         buf_va = contig_mem_alloc(buf_size);
 918         if (buf_va == NULL)
 919                 return (1);
 920 
 921         buf_pa = va_to_pa(buf_va);
 922         DS_PRI_DBG("ds_get_hv_pri: buf_pa 0x%lx\n", buf_pa);
 923         status = hv_mach_pri(buf_pa, &pri_size);
 924         DS_PRI_DBG("ds_get_hv_pri: hv_mach_pri status = 0x%lx\n", status);
 925 
 926         if (status == H_EOK) {
 927                 pri_data = kmem_alloc(pri_size, KM_SLEEP);
 928                 sp->ds_pri = pri_data;
 929                 sp->ds_pri_len = pri_size;
 930                 bcopy(buf_va, pri_data, sp->ds_pri_len);
 931                 sp->state |= DS_PRI_HAS_PRI;
 932                 sp->gencount++;
 933         }