hotspot/src/os/linux/vm/os_linux.cpp
changeset 46618 d503911aa948
parent 46589 f1c04490ded1
child 46619 a3919f5e8d2b
equal deleted inserted replaced
46617:0330c5fc49ce 46618:d503911aa948
  3168       if (start != req_addr) {
  3168       if (start != req_addr) {
  3169         ::munmap(start, extra_size);
  3169         ::munmap(start, extra_size);
  3170         start = NULL;
  3170         start = NULL;
  3171       }
  3171       }
  3172     } else {
  3172     } else {
  3173       char* const start_aligned = (char*) align_ptr_up(start, alignment);
  3173       char* const start_aligned = align_ptr_up(start, alignment);
  3174       char* const end_aligned = start_aligned + bytes;
  3174       char* const end_aligned = start_aligned + bytes;
  3175       char* const end = start + extra_size;
  3175       char* const end = start + extra_size;
  3176       if (start_aligned > start) {
  3176       if (start_aligned > start) {
  3177         ::munmap(start, start_aligned - start);
  3177         ::munmap(start, start_aligned - start);
  3178       }
  3178       }
  3672   assert(is_ptr_aligned(start, alignment), "Must be");
  3672   assert(is_ptr_aligned(start, alignment), "Must be");
  3673 
  3673 
  3674   char* end = start + bytes;
  3674   char* end = start + bytes;
  3675 
  3675 
  3676   // Find the regions of the allocated chunk that can be promoted to large pages.
  3676   // Find the regions of the allocated chunk that can be promoted to large pages.
  3677   char* lp_start = (char*)align_ptr_up(start, large_page_size);
  3677   char* lp_start = align_ptr_up(start, large_page_size);
  3678   char* lp_end   = (char*)align_ptr_down(end, large_page_size);
  3678   char* lp_end   = align_ptr_down(end, large_page_size);
  3679 
  3679 
  3680   size_t lp_bytes = lp_end - lp_start;
  3680   size_t lp_bytes = lp_end - lp_start;
  3681 
  3681 
  3682   assert(is_size_aligned(lp_bytes, large_page_size), "Must be");
  3682   assert(is_size_aligned(lp_bytes, large_page_size), "Must be");
  3683 
  3683 
  5984     test_log("size            align           req_addr         result");
  5984     test_log("size            align           req_addr         result");
  5985 
  5985 
  5986     for (int i = 0; i < num_sizes; i++) {
  5986     for (int i = 0; i < num_sizes; i++) {
  5987       const size_t size = sizes[i];
  5987       const size_t size = sizes[i];
  5988       for (size_t alignment = ag; is_size_aligned(size, alignment); alignment *= 2) {
  5988       for (size_t alignment = ag; is_size_aligned(size, alignment); alignment *= 2) {
  5989         char* const req_addr = (char*) align_ptr_up(mapping1, alignment);
  5989         char* const req_addr = align_ptr_up(mapping1, alignment);
  5990         char* p = os::Linux::reserve_memory_special_huge_tlbfs_mixed(size, alignment, req_addr, false);
  5990         char* p = os::Linux::reserve_memory_special_huge_tlbfs_mixed(size, alignment, req_addr, false);
  5991         test_log(SIZE_FORMAT_HEX " " SIZE_FORMAT_HEX " " PTR_FORMAT " ->  " PTR_FORMAT " %s",
  5991         test_log(SIZE_FORMAT_HEX " " SIZE_FORMAT_HEX " " PTR_FORMAT " ->  " PTR_FORMAT " %s",
  5992                  size, alignment, p2i(req_addr), p2i(p),
  5992                  size, alignment, p2i(req_addr), p2i(p),
  5993                  ((p != NULL ? (p == req_addr ? "(exact match)" : "") : "(failed)")));
  5993                  ((p != NULL ? (p == req_addr ? "(exact match)" : "") : "(failed)")));
  5994         if (p != NULL) {
  5994         if (p != NULL) {
  6004     test_log("size            align           req_addr         result");
  6004     test_log("size            align           req_addr         result");
  6005 
  6005 
  6006     for (int i = 0; i < num_sizes; i++) {
  6006     for (int i = 0; i < num_sizes; i++) {
  6007       const size_t size = sizes[i];
  6007       const size_t size = sizes[i];
  6008       for (size_t alignment = ag; is_size_aligned(size, alignment); alignment *= 2) {
  6008       for (size_t alignment = ag; is_size_aligned(size, alignment); alignment *= 2) {
  6009         char* const req_addr = (char*) align_ptr_up(mapping2, alignment);
  6009         char* const req_addr = align_ptr_up(mapping2, alignment);
  6010         char* p = os::Linux::reserve_memory_special_huge_tlbfs_mixed(size, alignment, req_addr, false);
  6010         char* p = os::Linux::reserve_memory_special_huge_tlbfs_mixed(size, alignment, req_addr, false);
  6011         test_log(SIZE_FORMAT_HEX " " SIZE_FORMAT_HEX " " PTR_FORMAT " ->  " PTR_FORMAT " %s",
  6011         test_log(SIZE_FORMAT_HEX " " SIZE_FORMAT_HEX " " PTR_FORMAT " ->  " PTR_FORMAT " %s",
  6012                  size, alignment, p2i(req_addr), p2i(p), ((p != NULL ? "" : "(failed)")));
  6012                  size, alignment, p2i(req_addr), p2i(p), ((p != NULL ? "" : "(failed)")));
  6013         // as the area around req_addr contains already existing mappings, the API should always
  6013         // as the area around req_addr contains already existing mappings, the API should always
  6014         // return NULL (as per contract, it cannot return another address)
  6014         // return NULL (as per contract, it cannot return another address)