[haiku-commits] haiku: hrev54324 - src/system/kernel/vm headers/private/kernel/slab src/system/kernel headers/private/kernel/vm

  • From: Michael Lotz <mmlr@xxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sat, 13 Jun 2020 17:28:52 -0400 (EDT)

hrev54324 adds 4 changesets to branch 'master'
old head: c63d300251dcbdf076ea07c2d5ccd19157882328
new head: e65c8deae2bc8c8c9cd9285794ef926177bb9e8c
overview: 
https://git.haiku-os.org/haiku/log/?qt=range&q=e65c8deae2bc+%5Ec63d300251dc

----------------------------------------------------------------------------

31cee26cfe52: kernel: Whitespace cleanup only.

146630e0967c: kernel/vm: Fix build with swap support disabled.
  
  The rename of the system_info members was missed in
  d02aaee17e007631fcfa91a012ec7b6386927012 (part of the scheduler branch
  merge of hrev46690). The unguarded object_cache was introduced even
  earlier as part of hrev43133.

3cd10d35ab8f: kernel/thread: Remove outdated comment.
  
  The thread limit enforcement was actually implemented back in hrev45811.

e65c8deae2bc: kernel/thread: Fix team double lock when reaching thread limit.
  
  The team is locked for the allocation of the user thread. When the
  thread limit is reached, the user thread is removed again by
  team_free_user_thread which internally locks the team, resulting in a
  double lock. Unlock the teamLocker before calling team_free_user_thread.
  
  Amazingly noone seems to ever have hit the thread limit, even though it
  is currently at an arbitrarily low 4096.

                                            [ Michael Lotz <mmlr@xxxxxxxx> ]

----------------------------------------------------------------------------

8 files changed, 18 insertions(+), 10 deletions(-)
headers/private/kernel/slab/Slab.h           | 2 +-
headers/private/kernel/vm/VMTranslationMap.h | 2 +-
src/system/kernel/arch/x86/arch_thread.cpp   | 2 +-
src/system/kernel/thread.cpp                 | 3 ++-
src/system/kernel/vm/VMAnonymousCache.cpp    | 4 ++--
src/system/kernel/vm/VMCache.cpp             | 9 ++++++++-
src/system/kernel/vm/vm.cpp                  | 4 ++--
src/system/kernel/vm/vm_page.cpp             | 2 +-

############################################################################

Commit:      31cee26cfe52366495c243a87d30925438ca60d1
URL:         https://git.haiku-os.org/haiku/commit/?id=31cee26cfe52
Author:      Michael Lotz <mmlr@xxxxxxxx>
Date:        Sat Jun 13 20:13:33 2020 UTC

kernel: Whitespace cleanup only.

----------------------------------------------------------------------------

diff --git a/headers/private/kernel/slab/Slab.h 
b/headers/private/kernel/slab/Slab.h
index b91486699b..8197d98147 100644
--- a/headers/private/kernel/slab/Slab.h
+++ b/headers/private/kernel/slab/Slab.h
@@ -12,7 +12,7 @@
 
 
 enum {
-       /* object_cache_{alloc,free}() flags  */
+       /* object_cache_{alloc,free}() flags */
        CACHE_DONT_WAIT_FOR_MEMORY              = HEAP_DONT_WAIT_FOR_MEMORY,
        CACHE_DONT_LOCK_KERNEL_SPACE    = HEAP_DONT_LOCK_KERNEL_SPACE,
        CACHE_PRIORITY_VIP                              = HEAP_PRIORITY_VIP,
diff --git a/headers/private/kernel/vm/VMTranslationMap.h 
b/headers/private/kernel/vm/VMTranslationMap.h
index cffde94794..4a21f7b2b7 100644
--- a/headers/private/kernel/vm/VMTranslationMap.h
+++ b/headers/private/kernel/vm/VMTranslationMap.h
@@ -26,7 +26,7 @@ public:
                                                                
VMTranslationMap();
        virtual                                         ~VMTranslationMap();
 
-       virtual bool                            Lock() = 0;
+       virtual bool                            Lock() = 0;
        virtual void                            Unlock() = 0;
 
        virtual addr_t                          MappedSize() const = 0;
diff --git a/src/system/kernel/arch/x86/arch_thread.cpp 
b/src/system/kernel/arch/x86/arch_thread.cpp
index 931c74b099..f204693b3c 100644
--- a/src/system/kernel/arch/x86/arch_thread.cpp
+++ b/src/system/kernel/arch/x86/arch_thread.cpp
@@ -186,7 +186,7 @@ arch_team_init_team_struct(Team* p, bool kernel)
 
 /*!    Initializes the user-space TLS local storage pointer in
        the thread structure, and the reserved TLS slots.
-       
+
        Is called from _create_user_thread_kentry().
 */
 status_t
diff --git a/src/system/kernel/vm/vm.cpp b/src/system/kernel/vm/vm.cpp
index c43a18f333..fc76b875d8 100644
--- a/src/system/kernel/vm/vm.cpp
+++ b/src/system/kernel/vm/vm.cpp
@@ -3714,8 +3714,8 @@ unmap_and_free_physical_pages(VMTranslationMap* map, 
addr_t start, addr_t end)
                        && (flags & PAGE_PRESENT) != 0) {
                        vm_page* page = vm_lookup_page(physicalAddress / 
B_PAGE_SIZE);
                        if (page != NULL && page->State() != PAGE_STATE_FREE
-                                        && page->State() != PAGE_STATE_CLEAR
-                                        && page->State() != PAGE_STATE_UNUSED) 
{
+                                       && page->State() != PAGE_STATE_CLEAR
+                                       && page->State() != PAGE_STATE_UNUSED) {
                                DEBUG_PAGE_ACCESS_START(page);
                                vm_page_set_state(page, PAGE_STATE_FREE);
                        }
diff --git a/src/system/kernel/vm/vm_page.cpp b/src/system/kernel/vm/vm_page.cpp
index dc73fef568..45feb38028 100644
--- a/src/system/kernel/vm/vm_page.cpp
+++ b/src/system/kernel/vm/vm_page.cpp
@@ -3746,7 +3746,7 @@ allocate_page_run(page_num_t start, page_num_t length, 
uint32 flags,
        if ((flags & VM_PAGE_ALLOC_CLEAR) != 0) {
                for (VMPageQueue::PageList::Iterator it = 
freePages.GetIterator();
                                vm_page* page = it.Next();) {
-                       clear_page(page);
+                       clear_page(page);
                }
        }
 

############################################################################

Commit:      146630e0967cfcd89d941afdb974ec54f132cfb8
URL:         https://git.haiku-os.org/haiku/commit/?id=146630e0967c
Author:      Michael Lotz <mmlr@xxxxxxxx>
Date:        Fri Jun 12 07:57:04 2020 UTC

kernel/vm: Fix build with swap support disabled.

The rename of the system_info members was missed in
d02aaee17e007631fcfa91a012ec7b6386927012 (part of the scheduler branch
merge of hrev46690). The unguarded object_cache was introduced even
earlier as part of hrev43133.

----------------------------------------------------------------------------

diff --git a/src/system/kernel/vm/VMAnonymousCache.cpp 
b/src/system/kernel/vm/VMAnonymousCache.cpp
index f801dcc0de..798b0e24db 100644
--- a/src/system/kernel/vm/VMAnonymousCache.cpp
+++ b/src/system/kernel/vm/VMAnonymousCache.cpp
@@ -1755,8 +1755,8 @@ swap_get_info(system_info* info)
        info->max_swap_pages = swap_total_swap_pages();
        info->free_swap_pages = swap_available_pages();
 #else
-       info->max_swap_space = 0;
-       info->free_swap_space = 0;
+       info->max_swap_pages = 0;
+       info->free_swap_pages = 0;
 #endif
 }
 
diff --git a/src/system/kernel/vm/VMCache.cpp b/src/system/kernel/vm/VMCache.cpp
index d820333513..d4e53c4926 100644
--- a/src/system/kernel/vm/VMCache.cpp
+++ b/src/system/kernel/vm/VMCache.cpp
@@ -55,7 +55,9 @@ static mutex sCacheListLock = MUTEX_INITIALIZER("global 
VMCache list");
        // The lock is also needed when the debug feature is disabled.
 
 ObjectCache* gCacheRefObjectCache;
+#if ENABLE_SWAP_SUPPORT
 ObjectCache* gAnonymousCacheObjectCache;
+#endif
 ObjectCache* gAnonymousNoSwapCacheObjectCache;
 ObjectCache* gVnodeCacheObjectCache;
 ObjectCache* gDeviceCacheObjectCache;
@@ -505,8 +507,10 @@ vm_cache_init(kernel_args* args)
        // Create object caches for the structures we allocate here.
        gCacheRefObjectCache = create_object_cache("cache refs", 
sizeof(VMCacheRef),
                0, NULL, NULL, NULL);
+#if ENABLE_SWAP_SUPPORT
        gAnonymousCacheObjectCache = create_object_cache("anon caches",
                sizeof(VMAnonymousCache), 0, NULL, NULL, NULL);
+#endif
        gAnonymousNoSwapCacheObjectCache = create_object_cache(
                "anon no-swap caches", sizeof(VMAnonymousNoSwapCache), 0, NULL, 
NULL,
                NULL);
@@ -517,7 +521,10 @@ vm_cache_init(kernel_args* args)
        gNullCacheObjectCache = create_object_cache("null caches",
                sizeof(VMNullCache), 0, NULL, NULL, NULL);
 
-       if (gCacheRefObjectCache == NULL || gAnonymousCacheObjectCache == NULL
+       if (gCacheRefObjectCache == NULL
+#if ENABLE_SWAP_SUPPORT
+               || gAnonymousCacheObjectCache == NULL
+#endif
                || gAnonymousNoSwapCacheObjectCache == NULL
                || gVnodeCacheObjectCache == NULL
                || gDeviceCacheObjectCache == NULL

############################################################################

Commit:      3cd10d35ab8f50e1e57d42054c05b6eec954ef08
URL:         https://git.haiku-os.org/haiku/commit/?id=3cd10d35ab8f
Author:      Michael Lotz <mmlr@xxxxxxxx>
Date:        Sat Jun 13 21:14:39 2020 UTC

kernel/thread: Remove outdated comment.

The thread limit enforcement was actually implemented back in hrev45811.

----------------------------------------------------------------------------

diff --git a/src/system/kernel/thread.cpp b/src/system/kernel/thread.cpp
index 2fae73aa2f..8376684992 100644
--- a/src/system/kernel/thread.cpp
+++ b/src/system/kernel/thread.cpp
@@ -78,7 +78,7 @@ static thread_id sNextThreadID = 2;
        // ID 1 is allocated for the kernel by Team::Team() behind our back
 
 // some arbitrarily chosen limits -- should probably depend on the available
-// memory (the limit is not yet enforced)
+// memory
 static int32 sMaxThreads = 4096;
 static int32 sUsedThreads = 0;
 

############################################################################

Revision:    hrev54324
Commit:      e65c8deae2bc8c8c9cd9285794ef926177bb9e8c
URL:         https://git.haiku-os.org/haiku/commit/?id=e65c8deae2bc
Author:      Michael Lotz <mmlr@xxxxxxxx>
Date:        Sat Jun 13 21:15:01 2020 UTC

kernel/thread: Fix team double lock when reaching thread limit.

The team is locked for the allocation of the user thread. When the
thread limit is reached, the user thread is removed again by
team_free_user_thread which internally locks the team, resulting in a
double lock. Unlock the teamLocker before calling team_free_user_thread.

Amazingly noone seems to ever have hit the thread limit, even though it
is currently at an arbitrarily low 4096.

----------------------------------------------------------------------------

diff --git a/src/system/kernel/thread.cpp b/src/system/kernel/thread.cpp
index 8376684992..b8e6d2ac96 100644
--- a/src/system/kernel/thread.cpp
+++ b/src/system/kernel/thread.cpp
@@ -1029,6 +1029,7 @@ thread_create_thread(const ThreadCreationAttributes& 
attributes, bool kernel)
                thread->user_thread = NULL;
 
                threadLocker.Unlock();
+               teamLocker.Unlock();
 
                if (userThread != NULL)
                        team_free_user_thread(team, userThread);


Other related posts:

  • » [haiku-commits] haiku: hrev54324 - src/system/kernel/vm headers/private/kernel/slab src/system/kernel headers/private/kernel/vm - Michael Lotz