1387 os::protect_memory((char *)os::get_memory_serialize_page(), 1388 os::vm_page_size(), MEM_PROT_READ); 1389 os::protect_memory((char *)os::get_memory_serialize_page(), 1390 os::vm_page_size(), MEM_PROT_RW); 1391 Thread::muxRelease(&SerializePageLock); 1392 } 1393 1394 // Returns true if the current stack pointer is above the stack shadow 1395 // pages, false otherwise. 1396 1397 bool os::stack_shadow_pages_available(Thread *thread, methodHandle method) { 1398 assert(StackRedPages > 0 && StackYellowPages > 0,"Sanity check"); 1399 address sp = current_stack_pointer(); 1400 // Check if we have StackShadowPages above the yellow zone. This parameter 1401 // is dependent on the depth of the maximum VM call stack possible from 1402 // the handler for stack overflow. 'instanceof' in the stack overflow 1403 // handler or a println uses at least 8k stack of VM and native code 1404 // respectively. 1405 const int framesize_in_bytes = 1406 Interpreter::size_top_interpreter_activation(method()) * wordSize; 1407 int reserved_area = ((StackShadowPages + StackRedPages + StackYellowPages) 1408 * vm_page_size()) + framesize_in_bytes; 1409 // The very lower end of the stack 1410 address stack_limit = thread->stack_base() - thread->stack_size(); 1411 return (sp > (stack_limit + reserved_area)); 1412 } 1413 1414 size_t os::page_size_for_region(size_t region_size, size_t min_pages, bool must_be_aligned) { 1415 assert(min_pages > 0, "sanity"); 1416 if (UseLargePages) { 1417 const size_t max_page_size = region_size / min_pages; 1418 1419 for (size_t i = 0; _page_sizes[i] != 0; ++i) { 1420 const size_t page_size = _page_sizes[i]; 1421 if (page_size <= max_page_size) { 1422 if (!must_be_aligned || is_size_aligned(region_size, page_size)) { 1423 return page_size; 1424 } 1425 } 1426 } 1427 } 1428 | 1387 os::protect_memory((char *)os::get_memory_serialize_page(), 1388 os::vm_page_size(), MEM_PROT_READ); 1389 os::protect_memory((char *)os::get_memory_serialize_page(), 1390 os::vm_page_size(), MEM_PROT_RW); 1391 Thread::muxRelease(&SerializePageLock); 1392 } 1393 1394 // Returns true if the current stack pointer is above the stack shadow 1395 // pages, false otherwise. 1396 1397 bool os::stack_shadow_pages_available(Thread *thread, methodHandle method) { 1398 assert(StackRedPages > 0 && StackYellowPages > 0,"Sanity check"); 1399 address sp = current_stack_pointer(); 1400 // Check if we have StackShadowPages above the yellow zone. This parameter 1401 // is dependent on the depth of the maximum VM call stack possible from 1402 // the handler for stack overflow. 'instanceof' in the stack overflow 1403 // handler or a println uses at least 8k stack of VM and native code 1404 // respectively. 1405 const int framesize_in_bytes = 1406 Interpreter::size_top_interpreter_activation(method()) * wordSize; 1407 int reserved_area = ((StackShadowPages + StackRedPages + StackYellowPages 1408 + StackReservedPages) * vm_page_size()) 1409 + framesize_in_bytes; 1410 // The very lower end of the stack 1411 address stack_limit = thread->stack_base() - thread->stack_size(); 1412 return (sp > (stack_limit + reserved_area)); 1413 } 1414 1415 size_t os::page_size_for_region(size_t region_size, size_t min_pages, bool must_be_aligned) { 1416 assert(min_pages > 0, "sanity"); 1417 if (UseLargePages) { 1418 const size_t max_page_size = region_size / min_pages; 1419 1420 for (size_t i = 0; _page_sizes[i] != 0; ++i) { 1421 const size_t page_size = _page_sizes[i]; 1422 if (page_size <= max_page_size) { 1423 if (!must_be_aligned || is_size_aligned(region_size, page_size)) { 1424 return page_size; 1425 } 1426 } 1427 } 1428 } 1429 |