1662 /* try to switch state from state "from" to state "to"
1663 * returns the state set after the method is complete
1664 */
1665 os::SuspendResume::State os::SuspendResume::switch_state(os::SuspendResume::State from,
1666 os::SuspendResume::State to)
1667 {
1668 os::SuspendResume::State result =
1669 (os::SuspendResume::State) Atomic::cmpxchg((jint) to, (jint *) &_state, (jint) from);
1670 if (result == from) {
1671 // success
1672 return to;
1673 }
1674 return result;
1675 }
1676 #endif
1677
1678 /////////////// Unit tests ///////////////
1679
1680 #ifndef PRODUCT
1681
1682 #define assert_eq(a,b) assert(a == b, err_msg(SIZE_FORMAT " != " SIZE_FORMAT, a, b))
1683
1684 class TestOS : AllStatic {
1685 static size_t small_page_size() {
1686 return os::vm_page_size();
1687 }
1688
1689 static size_t large_page_size() {
1690 const size_t large_page_size_example = 4 * M;
1691 return os::page_size_for_region_aligned(large_page_size_example, 1);
1692 }
1693
1694 static void test_page_size_for_region_aligned() {
1695 if (UseLargePages) {
1696 const size_t small_page = small_page_size();
1697 const size_t large_page = large_page_size();
1698
1699 if (large_page > small_page) {
1700 size_t num_small_pages_in_large = large_page / small_page;
1701 size_t page = os::page_size_for_region_aligned(large_page, num_small_pages_in_large);
1702
|
1662 /* try to switch state from state "from" to state "to"
1663 * returns the state set after the method is complete
1664 */
1665 os::SuspendResume::State os::SuspendResume::switch_state(os::SuspendResume::State from,
1666 os::SuspendResume::State to)
1667 {
1668 os::SuspendResume::State result =
1669 (os::SuspendResume::State) Atomic::cmpxchg((jint) to, (jint *) &_state, (jint) from);
1670 if (result == from) {
1671 // success
1672 return to;
1673 }
1674 return result;
1675 }
1676 #endif
1677
1678 /////////////// Unit tests ///////////////
1679
1680 #ifndef PRODUCT
1681
1682 #define assert_eq(a,b) assert(a == b, SIZE_FORMAT " != " SIZE_FORMAT, a, b)
1683
1684 class TestOS : AllStatic {
1685 static size_t small_page_size() {
1686 return os::vm_page_size();
1687 }
1688
1689 static size_t large_page_size() {
1690 const size_t large_page_size_example = 4 * M;
1691 return os::page_size_for_region_aligned(large_page_size_example, 1);
1692 }
1693
1694 static void test_page_size_for_region_aligned() {
1695 if (UseLargePages) {
1696 const size_t small_page = small_page_size();
1697 const size_t large_page = large_page_size();
1698
1699 if (large_page > small_page) {
1700 size_t num_small_pages_in_large = large_page / small_page;
1701 size_t page = os::page_size_for_region_aligned(large_page, num_small_pages_in_large);
1702
|