[haiku-commits] haiku: hrev47484 - in src: tests/add-ons/kernel/kernelland_emu add-ons/kernel/file_systems/userlandfs/kernel_add_on add-ons/kernel/file_systems/userlandfs/server

  • From: julian.harnath@xxxxxxxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Sat, 12 Jul 2014 02:02:31 +0200 (CEST)

hrev47484 adds 3 changesets to branch 'master'
old head: 192f01c669102651bdc81273811079e90e0a29e5
new head: 2f1684345e18c232cf915272bf567b9cc31c5f9d
overview: http://cgit.haiku-os.org/haiku/log/?qt=range&q=2f16843+%5E192f01c

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

a0d8768: Adapt userlandfs kernel-addon to atomic_* API changes.
  
  * Remove volatile qualifiers, use atomic_get() for safe access
  
  * Fixes build of userlandfs

604770b: Adapt kernelland_emu to kernel API changes
  
  * Adapt to changes in kernel synchronization APIs.
  
  * Makes userlandfs work again.

2f16843: Use BPathFinder to find userlandfs add-ons
  
  * ...to make it work with packaged and non-packaged.

                          [ Julian Harnath <julian.harnath@xxxxxxxxxxxxxx> ]

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

8 files changed, 75 insertions(+), 60 deletions(-)
.../userlandfs/kernel_add_on/KernelDebug.cpp     |  2 +-
.../userlandfs/kernel_add_on/Volume.cpp          | 16 +++----
.../userlandfs/kernel_add_on/Volume.h            | 12 ++---
.../userlandfs/server/UserlandFSServer.cpp       | 35 +++++++++++----
.../file_systems/userlandfs/server/haiku/Jamfile |  1 -
.../kernel/kernelland_emu/condition_variable.cpp |  4 +-
src/tests/add-ons/kernel/kernelland_emu/lock.cpp | 46 +++++++++++++-------
.../add-ons/kernel/kernelland_emu/scheduler.cpp  | 19 --------

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

Commit:      a0d87686f4884c31d86e65b81889bf3d26fab703
URL:         http://cgit.haiku-os.org/haiku/commit/?id=a0d8768
Author:      Julian Harnath <julian.harnath@xxxxxxxxxxxxxx>
Date:        Fri Jul 11 22:08:57 2014 UTC

Adapt userlandfs kernel-addon to atomic_* API changes.

* Remove volatile qualifiers, use atomic_get() for safe access

* Fixes build of userlandfs

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

diff --git 
a/src/add-ons/kernel/file_systems/userlandfs/kernel_add_on/KernelDebug.cpp 
b/src/add-ons/kernel/file_systems/userlandfs/kernel_add_on/KernelDebug.cpp
index 7b4fa74..f033f99 100644
--- a/src/add-ons/kernel/file_systems/userlandfs/kernel_add_on/KernelDebug.cpp
+++ b/src/add-ons/kernel/file_systems/userlandfs/kernel_add_on/KernelDebug.cpp
@@ -12,7 +12,7 @@
 #include "UserlandFS.h"
 #include "Volume.h"
 
-static vint32 sCommandsAdded = 0;
+static int32 sCommandsAdded = 0;
 
 // DebugUFS
 int
diff --git 
a/src/add-ons/kernel/file_systems/userlandfs/kernel_add_on/Volume.cpp 
b/src/add-ons/kernel/file_systems/userlandfs/kernel_add_on/Volume.cpp
index 0bfbed9..bfa20f6 100644
--- a/src/add-ons/kernel/file_systems/userlandfs/kernel_add_on/Volume.cpp
+++ b/src/add-ons/kernel/file_systems/userlandfs/kernel_add_on/Volume.cpp
@@ -207,7 +207,7 @@ struct Volume::IterativeFDIOCookie : public BReferenceable {
 // AutoIncrementer
 class Volume::AutoIncrementer {
 public:
-       AutoIncrementer(vint32* variable)
+       AutoIncrementer(int32* variable)
                : fVariable(variable)
        {
                if (fVariable)
@@ -226,7 +226,7 @@ public:
        }
 
 private:
-       vint32* fVariable;
+       int32*  fVariable;
 };
 
 
@@ -4520,27 +4520,27 @@ PRINT(("Volume::_PutAllPendingVNodes()\n"));
                return USERLAND_IOCTL_VNODE_COUNTING_DISABLED;
        }
        // Check whether there are open entities at the moment.
-       if (fOpenFiles > 0) {
+       if (atomic_get(&fOpenFiles) > 0) {
                PRINT(("Volume::_PutAllPendingVNodes() failed: open files\n"));
                return USERLAND_IOCTL_OPEN_FILES;
        }
-       if (fOpenDirectories > 0) {
+       if (atomic_get(&fOpenDirectories) > 0) {
                PRINT(("Volume::_PutAllPendingVNodes() failed: open dirs\n"));
                return USERLAND_IOCTL_OPEN_DIRECTORIES;
        }
-       if (fOpenAttributeDirectories > 0) {
+       if (atomic_get(&fOpenAttributeDirectories) > 0) {
                PRINT(("Volume::_PutAllPendingVNodes() failed: open attr 
dirs\n"));
                return USERLAND_IOCTL_OPEN_ATTRIBUTE_DIRECTORIES;
        }
-       if (fOpenAttributes > 0) {
+       if (atomic_get(&fOpenAttributes) > 0) {
                PRINT(("Volume::_PutAllPendingVNodes() failed: open 
attributes\n"));
                return USERLAND_IOCTL_OPEN_ATTRIBUTES;
        }
-       if (fOpenIndexDirectories > 0) {
+       if (atomic_get(&fOpenIndexDirectories) > 0) {
                PRINT(("Volume::_PutAllPendingVNodes() failed: open index 
dirs\n"));
                return USERLAND_IOCTL_OPEN_INDEX_DIRECTORIES;
        }
-       if (fOpenQueries > 0) {
+       if (atomic_get(&fOpenQueries) > 0) {
                PRINT(("Volume::_PutAllPendingVNodes() failed: open 
queries\n"));
                return USERLAND_IOCTL_OPEN_QUERIES;
        }
diff --git a/src/add-ons/kernel/file_systems/userlandfs/kernel_add_on/Volume.h 
b/src/add-ons/kernel/file_systems/userlandfs/kernel_add_on/Volume.h
index 0c47db5..9d43349 100644
--- a/src/add-ons/kernel/file_systems/userlandfs/kernel_add_on/Volume.h
+++ b/src/add-ons/kernel/file_systems/userlandfs/kernel_add_on/Volume.h
@@ -307,12 +307,12 @@ private:
                        void*                           fUserlandVolume;
                        ino_t                           fRootID;
                        VNode*                          fRootNode;
-                       vint32                          fOpenFiles;
-                       vint32                          fOpenDirectories;
-                       vint32                          
fOpenAttributeDirectories;
-                       vint32                          fOpenAttributes;
-                       vint32                          fOpenIndexDirectories;
-                       vint32                          fOpenQueries;
+                       int32                           fOpenFiles;
+                       int32                           fOpenDirectories;
+                       int32                           
fOpenAttributeDirectories;
+                       int32                           fOpenAttributes;
+                       int32                           fOpenIndexDirectories;
+                       int32                           fOpenQueries;
                        VNodeMap*                       fVNodes;
                        IORequestIDMap*         fIORequestInfosByID;
                        IORequestStructMap*     fIORequestInfosByStruct;

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

Commit:      604770b31331951e0f9b44b368c21dc2b004d920
URL:         http://cgit.haiku-os.org/haiku/commit/?id=604770b
Author:      Julian Harnath <julian.harnath@xxxxxxxxxxxxxx>
Date:        Fri Jul 11 23:02:46 2014 UTC

Adapt kernelland_emu to kernel API changes

* Adapt to changes in kernel synchronization APIs.

* Makes userlandfs work again.

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

diff --git a/src/add-ons/kernel/file_systems/userlandfs/server/haiku/Jamfile 
b/src/add-ons/kernel/file_systems/userlandfs/server/haiku/Jamfile
index a70075a9c..52c74ea 100644
--- a/src/add-ons/kernel/file_systems/userlandfs/server/haiku/Jamfile
+++ b/src/add-ons/kernel/file_systems/userlandfs/server/haiku/Jamfile
@@ -29,7 +29,6 @@ SharedLibrary libuserlandfs_haiku_kernel.so
        lock.cpp
        low_resource_manager.cpp
        misc.cpp
-       scheduler.cpp
        slab.cpp
        vm.cpp
 
diff --git a/src/tests/add-ons/kernel/kernelland_emu/condition_variable.cpp 
b/src/tests/add-ons/kernel/kernelland_emu/condition_variable.cpp
index 968a6b7..19d8036 100644
--- a/src/tests/add-ons/kernel/kernelland_emu/condition_variable.cpp
+++ b/src/tests/add-ons/kernel/kernelland_emu/condition_variable.cpp
@@ -162,7 +162,7 @@ ConditionVariable::Publish(const void* object, const char* 
objectType)
 
 
 void
-ConditionVariable::Unpublish(bool threadsLocked)
+ConditionVariable::Unpublish()
 {
        ASSERT(fObject != NULL);
 
@@ -194,7 +194,7 @@ ConditionVariable::Wait(uint32 flags, bigtime_t timeout)
 
 
 void
-ConditionVariable::_Notify(bool all, bool threadsLocked, status_t result)
+ConditionVariable::_Notify(bool all, status_t result)
 {
        MutexLocker locker(sConditionVariablesLock);
 
diff --git a/src/tests/add-ons/kernel/kernelland_emu/lock.cpp 
b/src/tests/add-ons/kernel/kernelland_emu/lock.cpp
index 5c2de20..84efe8b 100644
--- a/src/tests/add-ons/kernel/kernelland_emu/lock.cpp
+++ b/src/tests/add-ons/kernel/kernelland_emu/lock.cpp
@@ -43,6 +43,10 @@ struct rw_lock_waiter {
 #define RW_LOCK_FLAG_OWNS_NAME RW_LOCK_FLAG_CLONE_NAME
 
 
+static status_t _mutex_lock_threads_locked(mutex* lock);
+static void _mutex_unlock_threads_locked(mutex* lock);
+
+
 /*!    Helper class playing the role of the kernel's thread spinlock. We don't 
use
        as spinlock as that could be expensive in userland (due to spinlock 
holder
        potentially being unscheduled), but a benaphore.
@@ -83,7 +87,7 @@ struct ThreadSpinlock {
        }
 
 private:
-       vint32  fCount;
+       int32   fCount;
        sem_id  fSemaphore;
 };
 
@@ -605,7 +609,7 @@ mutex_destroy(mutex* lock)
                != lock->holder) {
                panic("mutex_destroy(): there are blocking threads, but caller 
doesn't "
                        "hold the lock (%p)", lock);
-               if (_mutex_lock(lock, true) != B_OK)
+               if (_mutex_lock_threads_locked(lock) != B_OK)
                        return;
        }
 #endif
@@ -634,9 +638,9 @@ mutex_switch_lock(mutex* from, mutex* to)
 #if !KDEBUG
        if (atomic_add(&from->count, 1) < -1)
 #endif
-               _mutex_unlock(from, true);
+               _mutex_unlock_threads_locked(from);
 
-       return mutex_lock_threads_locked(to);
+       return _mutex_lock_threads_locked(to);
 }
 
 
@@ -653,15 +657,14 @@ mutex_switch_from_read_lock(rw_lock* from, mutex* to)
                _rw_lock_read_unlock(from, true);
 #endif
 
-       return mutex_lock_threads_locked(to);
+       return _mutex_lock_threads_locked(to);
 }
 
 
-status_t
-_mutex_lock(mutex* lock, bool threadsLocked)
+
+static status_t
+_mutex_lock_threads_locked(mutex* lock)
 {
-       // lock only, if !threadsLocked
-       AutoLocker<ThreadSpinlock> locker(sThreadSpinlock, false, 
!threadsLocked);
 
        // Might have been released after we decremented the count, but before
        // we acquired the spinlock.
@@ -695,13 +698,13 @@ _mutex_lock(mutex* lock, bool threadsLocked)
 
        // block
        get_user_thread()->wait_status = 1;
-       locker.Unlock();
+       sThreadSpinlock.Unlock();
 
        status_t error;
        while ((error = _kern_block_thread(0, 0)) == B_INTERRUPTED) {
        }
 
-       locker.Lock();
+       sThreadSpinlock.Lock();
 
 #if KDEBUG
        if (error == B_OK)
@@ -712,12 +715,17 @@ _mutex_lock(mutex* lock, bool threadsLocked)
 }
 
 
-void
-_mutex_unlock(mutex* lock, bool threadsLocked)
+status_t
+_mutex_lock(mutex* lock, void*)
 {
-       // lock only, if !threadsLocked
-       AutoLocker<ThreadSpinlock> locker(sThreadSpinlock, false, 
!threadsLocked);
+       AutoLocker<ThreadSpinlock> locker(sThreadSpinlock);
+       return _mutex_lock_threads_locked(lock);
+}
 
+
+static void
+_mutex_unlock_threads_locked(mutex* lock)
+{
 #if KDEBUG
        if (find_thread(NULL) != lock->holder) {
                panic("_mutex_unlock() failure: thread %ld is trying to release 
"
@@ -756,6 +764,14 @@ _mutex_unlock(mutex* lock, bool threadsLocked)
 }
 
 
+void
+_mutex_unlock(mutex* lock)
+{
+       AutoLocker<ThreadSpinlock> locker(sThreadSpinlock);
+       _mutex_unlock_threads_locked(lock);
+}
+
+
 status_t
 _mutex_trylock(mutex* lock)
 {
diff --git a/src/tests/add-ons/kernel/kernelland_emu/scheduler.cpp 
b/src/tests/add-ons/kernel/kernelland_emu/scheduler.cpp
deleted file mode 100644
index 99fa85a..0000000
--- a/src/tests/add-ons/kernel/kernelland_emu/scheduler.cpp
+++ /dev/null
@@ -1,19 +0,0 @@
-/*
- * Copyright 2002-2009, Haiku Inc. All Rights Reserved.
- * Distributed under the terms of the MIT license.
- *
- * Authors:
- *             Ingo Weinhold, bonefish@xxxxxxxxxxxxxxx.
- *             Axel Dörfler, axeld@xxxxxxxxxxxxxxxx.
- */
-
-#include <kscheduler.h>
-
-
-struct scheduler_ops kScheduler = {
-       NULL,
-       NULL,
-       NULL,
-       NULL,
-};
-struct scheduler_ops* gScheduler = &kScheduler;

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

Revision:    hrev47484
Commit:      2f1684345e18c232cf915272bf567b9cc31c5f9d
URL:         http://cgit.haiku-os.org/haiku/commit/?id=2f16843
Author:      Julian Harnath <julian.harnath@xxxxxxxxxxxxxx>
Date:        Fri Jul 11 23:53:31 2014 UTC

Use BPathFinder to find userlandfs add-ons

* ...to make it work with packaged and non-packaged.

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

diff --git 
a/src/add-ons/kernel/file_systems/userlandfs/server/UserlandFSServer.cpp 
b/src/add-ons/kernel/file_systems/userlandfs/server/UserlandFSServer.cpp
index a044d82..838ccbc 100644
--- a/src/add-ons/kernel/file_systems/userlandfs/server/UserlandFSServer.cpp
+++ b/src/add-ons/kernel/file_systems/userlandfs/server/UserlandFSServer.cpp
@@ -11,10 +11,13 @@
 
 #include <Application.h>
 #include <Clipboard.h>
+#include <Entry.h>
 #include <FindDirectory.h>
 #include <fs_interface.h>
 #include <Locker.h>
 #include <Path.h>
+#include <PathFinder.h>
+#include <StringList.h>
 
 #include <image_private.h>
 
@@ -64,17 +67,33 @@ status_t
 UserlandFSServer::Init(const char* fileSystem, port_id port)
 {
        // get the add-on path
-       BPath addOnPath;
-       status_t error = find_directory(B_USER_ADDONS_DIRECTORY, &addOnPath);
-       if (error != B_OK)
-               RETURN_ERROR(error);
-       error = addOnPath.Append("userlandfs");
-       if (error != B_OK)
-               RETURN_ERROR(error);
-       error = addOnPath.Append(fileSystem);
+       BPathFinder pathFinder;
+       BStringList paths;
+       status_t error = pathFinder.FindPaths(B_FIND_PATH_ADD_ONS_DIRECTORY,
+               "userlandfs", B_FIND_PATH_EXISTING_ONLY, paths);
        if (error != B_OK)
                RETURN_ERROR(error);
 
+       BPath addOnPath;
+       for (int index = 0; index < paths.CountStrings(); index++) {
+               error = addOnPath.SetTo(paths.StringAt(index));
+               if (error != B_OK)
+                       RETURN_ERROR(error);
+
+               error = addOnPath.Append(fileSystem);
+               if (error != B_OK)
+                       RETURN_ERROR(error);
+
+               BEntry entry(addOnPath.Path());
+               if (entry.Exists())
+                       break;
+               else
+                       addOnPath.Unset();
+       }
+
+       if (addOnPath.InitCheck() != B_OK)
+               RETURN_ERROR(B_BAD_VALUE);
+
        // load the add-on
        fAddOnImage = load_add_on(addOnPath.Path());
        if (fAddOnImage < 0)


Other related posts:

  • » [haiku-commits] haiku: hrev47484 - in src: tests/add-ons/kernel/kernelland_emu add-ons/kernel/file_systems/userlandfs/kernel_add_on add-ons/kernel/file_systems/userlandfs/server - julian . harnath