src/os/solaris/vm/os_solaris.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File hsx-gc Sdiff src/os/solaris/vm

src/os/solaris/vm/os_solaris.cpp

Print this page




2928       info->size = outdata[1];
2929     }
2930     return true;
2931   }
2932   return false;
2933 }
2934 
2935 // Scan the pages from start to end until a page different than
2936 // the one described in the info parameter is encountered.
2937 char *os::scan_pages(char *start, char* end, page_info* page_expected, page_info* page_found) {
2938   const uint_t info_types[] = { MEMINFO_VLGRP, MEMINFO_VPAGESIZE };
2939   const size_t types = sizeof(info_types) / sizeof(info_types[0]);
2940   uint64_t addrs[MAX_MEMINFO_CNT], outdata[types * MAX_MEMINFO_CNT];
2941   uint_t validity[MAX_MEMINFO_CNT];
2942 
2943   size_t page_size = MAX2((size_t)os::vm_page_size(), page_expected->size);
2944   uint64_t p = (uint64_t)start;
2945   while (p < (uint64_t)end) {
2946     addrs[0] = p;
2947     size_t addrs_count = 1;
2948     while (addrs_count < MAX_MEMINFO_CNT && addrs[addrs_count - 1] < (uint64_t)end) {
2949       addrs[addrs_count] = addrs[addrs_count - 1] + page_size;
2950       addrs_count++;
2951     }
2952 
2953     if (os::Solaris::meminfo(addrs, addrs_count, info_types, types, outdata, validity) < 0) {
2954       return NULL;
2955     }
2956 
2957     size_t i = 0;
2958     for (; i < addrs_count; i++) {
2959       if ((validity[i] & 1) != 0) {
2960         if ((validity[i] & 4) != 0) {
2961           if (outdata[types * i + 1] != page_expected->size) {
2962             break;
2963           }
2964         } else
2965           if (page_expected->size != 0) {
2966             break;
2967           }
2968 




2928       info->size = outdata[1];
2929     }
2930     return true;
2931   }
2932   return false;
2933 }
2934 
2935 // Scan the pages from start to end until a page different than
2936 // the one described in the info parameter is encountered.
2937 char *os::scan_pages(char *start, char* end, page_info* page_expected, page_info* page_found) {
2938   const uint_t info_types[] = { MEMINFO_VLGRP, MEMINFO_VPAGESIZE };
2939   const size_t types = sizeof(info_types) / sizeof(info_types[0]);
2940   uint64_t addrs[MAX_MEMINFO_CNT], outdata[types * MAX_MEMINFO_CNT];
2941   uint_t validity[MAX_MEMINFO_CNT];
2942 
2943   size_t page_size = MAX2((size_t)os::vm_page_size(), page_expected->size);
2944   uint64_t p = (uint64_t)start;
2945   while (p < (uint64_t)end) {
2946     addrs[0] = p;
2947     size_t addrs_count = 1;
2948     while (addrs_count < MAX_MEMINFO_CNT && addrs[addrs_count - 1] + page_size < (uint64_t)end) {
2949       addrs[addrs_count] = addrs[addrs_count - 1] + page_size;
2950       addrs_count++;
2951     }
2952 
2953     if (os::Solaris::meminfo(addrs, addrs_count, info_types, types, outdata, validity) < 0) {
2954       return NULL;
2955     }
2956 
2957     size_t i = 0;
2958     for (; i < addrs_count; i++) {
2959       if ((validity[i] & 1) != 0) {
2960         if ((validity[i] & 4) != 0) {
2961           if (outdata[types * i + 1] != page_expected->size) {
2962             break;
2963           }
2964         } else
2965           if (page_expected->size != 0) {
2966             break;
2967           }
2968 


src/os/solaris/vm/os_solaris.cpp
Index Unified diffs Context diffs Sdiffs Patch New Old Previous File Next File