< prev index next >

src/hotspot/os/aix/os_aix.cpp

Print this page
rev 47590 : Move polling page allocation to SafepointMechanism initialization

*** 3476,3554 **** if (Verbose) { trcVerbose("Loaded Libraries: "); LoadedLibraries::print(tty); } - const int page_size = Aix::page_size(); - const int map_size = page_size; - - address map_address = (address) MAP_FAILED; - const int prot = PROT_READ; - const int flags = MAP_PRIVATE|MAP_ANONYMOUS; - - // Use optimized addresses for the polling page, - // e.g. map it to a special 32-bit address. - if (OptimizePollingPageLocation) { - // architecture-specific list of address wishes: - address address_wishes[] = { - // AIX: addresses lower than 0x30000000 don't seem to work on AIX. - // PPC64: all address wishes are non-negative 32 bit values where - // the lower 16 bits are all zero. we can load these addresses - // with a single ppc_lis instruction. - (address) 0x30000000, (address) 0x31000000, - (address) 0x32000000, (address) 0x33000000, - (address) 0x40000000, (address) 0x41000000, - (address) 0x42000000, (address) 0x43000000, - (address) 0x50000000, (address) 0x51000000, - (address) 0x52000000, (address) 0x53000000, - (address) 0x60000000, (address) 0x61000000, - (address) 0x62000000, (address) 0x63000000 - }; - int address_wishes_length = sizeof(address_wishes)/sizeof(address); - - // iterate over the list of address wishes: - for (int i=0; i<address_wishes_length; i++) { - // Try to map with current address wish. - // AIX: AIX needs MAP_FIXED if we provide an address and mmap will - // fail if the address is already mapped. - map_address = (address) ::mmap(address_wishes[i] - (ssize_t)page_size, - map_size, prot, - flags | MAP_FIXED, - -1, 0); - trcVerbose("SafePoint Polling Page address: %p (wish) => %p", - address_wishes[i], map_address + (ssize_t)page_size); - - if (map_address + (ssize_t)page_size == address_wishes[i]) { - // Map succeeded and map_address is at wished address, exit loop. - break; - } - - if (map_address != (address) MAP_FAILED) { - // Map succeeded, but polling_page is not at wished address, unmap and continue. - ::munmap(map_address, map_size); - map_address = (address) MAP_FAILED; - } - // Map failed, continue loop. - } - } // end OptimizePollingPageLocation - - if (map_address == (address) MAP_FAILED) { - map_address = (address) ::mmap(NULL, map_size, prot, flags, -1, 0); - } - guarantee(map_address != MAP_FAILED, "os::init_2: failed to allocate polling page"); - os::set_polling_page(map_address); - - if (!UseMembar) { - address mem_serialize_page = (address) ::mmap(NULL, Aix::page_size(), PROT_READ | PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); - guarantee(mem_serialize_page != NULL, "mmap Failed for memory serialize page"); - os::set_memory_serialize_page(mem_serialize_page); - - trcVerbose("Memory Serialize Page address: %p - %p, size %IX (%IB)", - mem_serialize_page, mem_serialize_page + Aix::page_size(), - Aix::page_size(), Aix::page_size()); - } - // initialize suspend/resume support - must do this before signal_sets_init() if (SR_initialize() != 0) { perror("SR_initialize failed"); return JNI_ERR; } --- 3476,3485 ----
< prev index next >