hrev52198 adds 4 changesets to branch 'master'
old head: 1a3a6135846140e9c2005a186099f54dd0307f9c
new head: 779d9140a472e737daccfc810f444b0981e05ac2
overview:
https://git.haiku-os.org/haiku/log/?qt=range&q=779d9140a472+%5E1a3a61358461
----------------------------------------------------------------------------
ce0ef8c87004: USB: Remove BeOSCompatibility.h and associated cruft.
f6ff5a9790ae: headers/private: Fix wrong filemode.
d8ad2d6f330d: packagefs: Rename operator< to HasPrecendenceOver().
As suggested by weinhold on the mailing list.
779d9140a472: radeon_hd: The MMIO area should be user-cloneable.
[ Augustin Cavalier <waddlesplash@xxxxxxxxx> ]
----------------------------------------------------------------------------
17 files changed, 28 insertions(+), 314 deletions(-)
headers/private/system/convertutf.h | 0
.../kernel/bus_managers/usb/BeOSCompatibility.h | 212 -------------------
src/add-ons/kernel/bus_managers/usb/Jamfile | 7 -
.../bus_managers/usb/PhysicalMemoryAllocator.cpp | 2 +-
.../kernel/bus_managers/usb/usb_private.h | 1 -
src/add-ons/kernel/drivers/bus/usb/Jamfile | 1 -
src/add-ons/kernel/drivers/bus/usb/usb_raw.cpp | 3 +-
.../drivers/graphics/radeon_hd/radeon_hd.cpp | 3 +-
.../drivers/network/usb_ecm/BeOSCompatibility.h | 59 ------
.../kernel/drivers/network/usb_ecm/Driver.cpp | 7 +-
.../kernel/drivers/network/usb_ecm/ECMDevice.cpp | 1 -
.../packagefs/nodes/UnpackingDirectory.cpp | 7 +-
.../packagefs/nodes/UnpackingLeafNode.cpp | 8 +-
.../packagefs/package/PackageDirectory.cpp | 12 +-
.../packagefs/package/PackageDirectory.h | 5 +-
.../packagefs/package/PackageNode.cpp | 10 +-
.../file_systems/packagefs/package/PackageNode.h | 4 +-
############################################################################
Commit: ce0ef8c870044c4d638e2f17bb67b6c48a9cf115
URL: https://git.haiku-os.org/haiku/commit/?id=ce0ef8c87004
Author: Augustin Cavalier <waddlesplash@xxxxxxxxx>
Date: Tue Aug 7 21:57:23 2018 UTC
USB: Remove BeOSCompatibility.h and associated cruft.
----------------------------------------------------------------------------
diff --git a/src/add-ons/kernel/bus_managers/usb/BeOSCompatibility.h
b/src/add-ons/kernel/bus_managers/usb/BeOSCompatibility.h
deleted file mode 100644
index 0e07d138fa..0000000000
--- a/src/add-ons/kernel/bus_managers/usb/BeOSCompatibility.h
+++ /dev/null
@@ -1,212 +0,0 @@
-#ifndef _USB_BEOS_COMPATIBILITY_H_
-#define _USB_BEOS_COMPATIBILITY_H_
-#ifndef HAIKU_TARGET_PLATFORM_HAIKU
-
-// prevent inclusion of original lock.h as it conflicts with what we have here
-#define _KERNEL_LOCK_H
-
-#include <stdarg.h>
-#include <stdio.h>
-#include <OS.h>
-
-#define IS_USER_ADDRESS(x) (((uint32)x & 0x80000000) > 0)
-#define IS_KERNEL_ADDRESS(x) (((uint32)x & 0x80000000) == 0)
-#define B_SPINLOCK_INITIALIZER 0
-#define PCI_usb_ehci 0x20
-
-#ifndef HAIKU_TARGET_PLATFORM_DANO
-enum {
- B_DEV_INVALID_PIPE = B_DEV_DOOR_OPEN + 1,
- B_DEV_CRC_ERROR,
- B_DEV_STALLED,
- B_DEV_BAD_PID,
- B_DEV_UNEXPECTED_PID,
- B_DEV_DATA_OVERRUN,
- B_DEV_DATA_UNDERRUN,
- B_DEV_FIFO_OVERRUN,
- B_DEV_FIFO_UNDERRUN,
- B_DEV_PENDING,
- B_DEV_MULTIPLE_ERRORS,
- B_DEV_TOO_LATE,
-};
-#endif
-
-// wrong, but it won't change for BeOS anymore
-typedef uint32 addr_t;
-
-
-typedef struct mutex {
- sem_id sem;
- int32 count;
-} mutex;
-
-
-inline status_t
-mutex_init(mutex *ben, const char *name)
-{
- if (ben == NULL || name == NULL)
- return B_BAD_VALUE;
-
- ben->count = 1;
- ben->sem = create_sem(0, name);
- if (ben->sem >= B_OK)
- return B_OK;
-
- return ben->sem;
-}
-
-
-#define MUTEX_FLAG_CLONE_NAME 1
-inline status_t
-mutex_init_etc(mutex *ben, const char *name, int32 flags)
-{
- return mutex_init(ben, name);
-}
-
-
-inline void
-mutex_destroy(mutex *ben)
-{
- delete_sem(ben->sem);
- ben->sem = -1;
-}
-
-
-inline status_t
-mutex_lock(mutex *ben)
-{
- if (atomic_add(&ben->count, -1) <= 0)
- return acquire_sem(ben->sem);
- return B_OK;
-}
-
-
-inline status_t
-mutex_unlock(mutex *ben)
-{
- if (atomic_add(&ben->count, 1) < 0)
- return release_sem(ben->sem);
- return B_OK;
-}
-
-
-class ConditionVariableEntry {
-public:
- ConditionVariableEntry()
- : fSem(-1)
- {
- }
-
- ~ConditionVariableEntry()
- {
- if (fSem >= 0)
- delete_sem(fSem);
- }
-
- sem_id Added()
- {
- if (fSem < 0)
- fSem = create_sem(0, "condvar entry");
- return fSem;
- }
-
- status_t Wait(uint32 flags, bigtime_t timeout)
- {
- return acquire_sem_etc(fSem, 1, flags, timeout);
- }
-
-private:
- sem_id fSem;
-};
-
-
-class ConditionVariable {
-public:
- ConditionVariable()
- : fObject(NULL),
- fName("condvar"),
- fSemCount(0)
- {
- }
-
- void Init(void *object, const char *name)
- {
- fObject = object;
- fName = name;
- }
-
- void Add(ConditionVariableEntry *entry)
- {
- fSems[fSemCount++] = entry->Added();
- }
-
- void NotifyAll()
- {
- int32 semCount = fSemCount;
- sem_id sems[semCount];
- memcpy(sems, fSems, sizeof(sem_id) * semCount);
- fSemCount = 0;
-
- for (int32 i = 0; i < semCount; i++)
- release_sem(sems[i]);
- }
-
-private:
- void * fObject;
- const char *fName;
- sem_id fSems[30];
- int32 fSemCount;
-};
-
-
-inline void
-load_driver_symbols(char *driver)
-{
- /* nothing */
-}
-
-
-inline int
-snprintf(char *buffer, size_t bufferSize, const char *format, ...)
-{
- va_list args;
- va_start(args, format);
- int result = vsprintf(buffer, format, args);
- va_end(args);
- return result;
-}
-
-
-inline int32
-atomic_get(vint32 *value)
-{
- return atomic_or(value, 0);
-}
-
-
-inline int32
-atomic_set(vint32 *value, int32 setValue)
-{
- int32 result = atomic_and(value, 0);
- int32 previous = atomic_add(value, setValue);
- if (previous != 0)
- result = previous;
- return result;
-}
-
-
-inline status_t
-user_memcpy(void *target, void *source, size_t length)
-{
- memcpy(target, source, length);
- return B_OK;
-}
-
-
-#undef B_KERNEL_READ_AREA
-#define B_KERNEL_READ_AREA 0
-#undef B_KERNEL_WRITE_AREA
-#define B_KERNEL_WRITE_AREA 0
-
-#endif // !HAIKU_TARGET_PLATFORM_HAIKU
-#endif // !_USB_BEOS_COMPATIBILITY_H_
diff --git a/src/add-ons/kernel/bus_managers/usb/Jamfile
b/src/add-ons/kernel/bus_managers/usb/Jamfile
index ba59803867..0a93de0f5e 100644
--- a/src/add-ons/kernel/bus_managers/usb/Jamfile
+++ b/src/add-ons/kernel/bus_managers/usb/Jamfile
@@ -4,9 +4,6 @@ SetSubDirSupportedPlatformsBeOSCompatible ;
SubDirC++Flags -fno-rtti ;
-local compatSources ;
-
-SubDirSysHdrs $(SUBDIR) ;
UsePrivateKernelHeaders ;
KernelStaticLibrary libusb.a :
@@ -19,7 +16,6 @@ KernelStaticLibrary libusb.a :
Interface.cpp
Object.cpp
PhysicalMemoryAllocator.cpp
- $(compatSources)
;
KernelAddon usb :
@@ -27,6 +23,3 @@ KernelAddon usb :
: libusb.a
: usb.rdef
;
-
-SEARCH on [ FGristFiles $(compatSources) ]
- = [ FDirName $(HAIKU_TOP) src system kernel util ] ;
diff --git a/src/add-ons/kernel/bus_managers/usb/PhysicalMemoryAllocator.cpp
b/src/add-ons/kernel/bus_managers/usb/PhysicalMemoryAllocator.cpp
index 1948ef1100..b80d919ac3 100644
--- a/src/add-ons/kernel/bus_managers/usb/PhysicalMemoryAllocator.cpp
+++ b/src/add-ons/kernel/bus_managers/usb/PhysicalMemoryAllocator.cpp
@@ -11,7 +11,7 @@
#include <KernelExport.h>
#include <SupportDefs.h>
#include <util/kernel_cpp.h>
-#include "BeOSCompatibility.h"
+
#include "PhysicalMemoryAllocator.h"
diff --git a/src/add-ons/kernel/bus_managers/usb/usb_private.h
b/src/add-ons/kernel/bus_managers/usb/usb_private.h
index 49f7e18157..93279c0865 100644
--- a/src/add-ons/kernel/bus_managers/usb/usb_private.h
+++ b/src/add-ons/kernel/bus_managers/usb/usb_private.h
@@ -9,7 +9,6 @@
#ifndef _USB_PRIVATE_H
#define _USB_PRIVATE_H
-#include "BeOSCompatibility.h"
#include "usbspec_private.h"
#include <lock.h>
#include <util/Vector.h>
diff --git a/src/add-ons/kernel/drivers/bus/usb/Jamfile
b/src/add-ons/kernel/drivers/bus/usb/Jamfile
index 438e3410f3..388e0e53d3 100644
--- a/src/add-ons/kernel/drivers/bus/usb/Jamfile
+++ b/src/add-ons/kernel/drivers/bus/usb/Jamfile
@@ -2,7 +2,6 @@ SubDir HAIKU_TOP src add-ons kernel drivers bus usb ;
SetSubDirSupportedPlatformsBeOSCompatible ;
-SubDirSysHdrs $(HAIKU_TOP) src add-ons kernel bus_managers usb ;
UsePrivateKernelHeaders ;
KernelAddon usb_raw :
diff --git a/src/add-ons/kernel/drivers/bus/usb/usb_raw.cpp
b/src/add-ons/kernel/drivers/bus/usb/usb_raw.cpp
index e1ffe37660..cd7caabb34 100644
--- a/src/add-ons/kernel/drivers/bus/usb/usb_raw.cpp
+++ b/src/add-ons/kernel/drivers/bus/usb/usb_raw.cpp
@@ -6,7 +6,6 @@
* Michael Lotz <mmlr@xxxxxxxx>
*/
-#include "BeOSCompatibility.h"
#include "usb_raw.h"
#include <KernelExport.h>
@@ -883,7 +882,7 @@ usb_raw_write(void *cookie, off_t position, const void
*buffer, size_t *length)
//
-status_t
+status_t
init_hardware()
{
TRACE((DRIVER_NAME": init_hardware()\n"));
diff --git a/src/add-ons/kernel/drivers/network/usb_ecm/BeOSCompatibility.h
b/src/add-ons/kernel/drivers/network/usb_ecm/BeOSCompatibility.h
deleted file mode 100644
index 74f5b2af4f..0000000000
--- a/src/add-ons/kernel/drivers/network/usb_ecm/BeOSCompatibility.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- Driver for USB Ethernet Control Model devices
- Copyright (C) 2008 Michael Lotz <mmlr@xxxxxxxx>
- Distributed under the terms of the MIT license.
-*/
-#ifndef HAIKU_TARGET_PLATFORM_HAIKU
-#ifndef _BEOS_COMPATIBILITY_H_
-#define _BEOS_COMPATIBILITY_H_
-
-#include <OS.h>
-
-#define USB_ENDPOINT_ATTR_CONTROL 0x00
-#define USB_ENDPOINT_ATTR_ISOCHRONOUS 0x01
-#define USB_ENDPOINT_ATTR_BULK 0x02
-#define USB_ENDPOINT_ATTR_INTERRUPT 0x03
-#define USB_ENDPOINT_ATTR_MASK 0x03
-
-#define USB_ENDPOINT_ADDR_DIR_IN 0x80
-#define USB_ENDPOINT_ADDR_DIR_OUT 0x00
-
-typedef struct mutex {
- sem_id sem;
- int32 count;
-} mutex;
-
-
-static inline void
-mutex_init(mutex *lock, const char *name)
-{
- lock->sem = create_sem(0, name);
- lock->count = 0;
-}
-
-
-static inline void
-mutex_destroy(mutex *lock)
-{
- delete_sem(lock->sem);
-}
-
-
-static inline status_t
-mutex_lock(mutex *lock)
-{
- if (atomic_add(&lock->count, -1) < 0)
- return acquire_sem(lock->sem);
- return B_OK;
-}
-
-
-static inline void
-mutex_unlock(mutex *lock)
-{
- if (atomic_add(&lock->count, 1) < -1)
- release_sem(lock->sem);
-}
-
-#endif /* !HAIKU_TARGET_PLATFORM_HAIKU */
-#endif /* _BEOS_COMPATIBILITY_H_ */
diff --git a/src/add-ons/kernel/drivers/network/usb_ecm/Driver.cpp
b/src/add-ons/kernel/drivers/network/usb_ecm/Driver.cpp
index ac25820d04..c88831195a 100644
--- a/src/add-ons/kernel/drivers/network/usb_ecm/Driver.cpp
+++ b/src/add-ons/kernel/drivers/network/usb_ecm/Driver.cpp
@@ -6,12 +6,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-
-#ifdef HAIKU_TARGET_PLATFORM_HAIKU
-#include <lock.h> // for mutex
-#else
-#include "BeOSCompatibility.h" // for pseudo mutex
-#endif
+#include <lock.h>
#include "Driver.h"
#include "ECMDevice.h"
diff --git a/src/add-ons/kernel/drivers/network/usb_ecm/ECMDevice.cpp
b/src/add-ons/kernel/drivers/network/usb_ecm/ECMDevice.cpp
index e466cffd1a..906cad12fa 100644
--- a/src/add-ons/kernel/drivers/network/usb_ecm/ECMDevice.cpp
+++ b/src/add-ons/kernel/drivers/network/usb_ecm/ECMDevice.cpp
@@ -8,7 +8,6 @@
#include <string.h>
#include <stdlib.h>
-#include "BeOSCompatibility.h"
#include "ECMDevice.h"
#include "Driver.h"
############################################################################
Commit: f6ff5a9790ae61869c69be544827b2a4202be9fb
URL: https://git.haiku-os.org/haiku/commit/?id=f6ff5a9790ae
Author: Augustin Cavalier <waddlesplash@xxxxxxxxx>
Date: Tue Aug 7 22:07:14 2018 UTC
headers/private: Fix wrong filemode.
----------------------------------------------------------------------------
diff --git a/headers/private/system/convertutf.h
b/headers/private/system/convertutf.h
old mode 100755
new mode 100644
############################################################################
Commit: d8ad2d6f330daec77730d0b2dbff36e139cb6c46
URL: https://git.haiku-os.org/haiku/commit/?id=d8ad2d6f330d
Author: Augustin Cavalier <waddlesplash@xxxxxxxxx>
Date: Thu Aug 9 03:41:37 2018 UTC
packagefs: Rename operator< to HasPrecendenceOver().
As suggested by weinhold on the mailing list.
----------------------------------------------------------------------------
diff --git
a/src/add-ons/kernel/file_systems/packagefs/nodes/UnpackingDirectory.cpp
b/src/add-ons/kernel/file_systems/packagefs/nodes/UnpackingDirectory.cpp
index 0f322453e5..fae42662fb 100644
--- a/src/add-ons/kernel/file_systems/packagefs/nodes/UnpackingDirectory.cpp
+++ b/src/add-ons/kernel/file_systems/packagefs/nodes/UnpackingDirectory.cpp
@@ -108,7 +108,8 @@ UnpackingDirectory::AddPackageNode(PackageNode*
packageNode, dev_t deviceID)
= dynamic_cast<PackageDirectory*>(packageNode);
PackageDirectory* other = fPackageDirectories.Head();
- bool overridesHead = other == NULL || *packageDirectory > *other;
+ bool overridesHead = other == NULL
+ || packageDirectory->HasPrecedenceOver(other);
if (overridesHead) {
fPackageDirectories.Insert(other, packageDirectory);
@@ -134,7 +135,7 @@ UnpackingDirectory::RemovePackageNode(PackageNode*
packageNode, dev_t deviceID)
it.Next();
// skip the first one
while (PackageDirectory* otherNode = it.Next()) {
- if (*otherNode > *newestNode)
+ if (otherNode->HasPrecedenceOver(newestNode))
newestNode = otherNode;
}
@@ -169,7 +170,7 @@ UnpackingDirectory::WillBeFirstPackageNode(PackageNode*
packageNode) const
return false;
PackageDirectory* other = fPackageDirectories.Head();
- return other == NULL || *packageDirectory > *other;
+ return other == NULL || packageDirectory->HasPrecedenceOver(other);
}
diff --git
a/src/add-ons/kernel/file_systems/packagefs/nodes/UnpackingLeafNode.cpp
b/src/add-ons/kernel/file_systems/packagefs/nodes/UnpackingLeafNode.cpp
index 86ddcafd27..fc7781a19a 100644
--- a/src/add-ons/kernel/file_systems/packagefs/nodes/UnpackingLeafNode.cpp
+++ b/src/add-ons/kernel/file_systems/packagefs/nodes/UnpackingLeafNode.cpp
@@ -116,7 +116,8 @@ UnpackingLeafNode::AddPackageNode(PackageNode* packageNode,
dev_t deviceID)
= dynamic_cast<PackageLeafNode*>(packageNode);
PackageLeafNode* headNode = fPackageNodes.Head();
- bool overridesHead = headNode == NULL || *packageLeafNode > *headNode;
+ bool overridesHead = headNode == NULL
+ || packageLeafNode->HasPrecedenceOver(headNode);
if (overridesHead) {
fPackageNodes.Add(packageLeafNode);
@@ -148,7 +149,7 @@ UnpackingLeafNode::RemovePackageNode(PackageNode*
packageNode, dev_t deviceID)
it.Next();
// skip the first one
while (PackageLeafNode* otherNode = it.Next()) {
- if (*otherNode > *newestNode)
+ if (otherNode->HasPrecedenceOver(newestNode))
newestNode = otherNode;
}
@@ -186,7 +187,8 @@ UnpackingLeafNode::WillBeFirstPackageNode(PackageNode*
packageNode) const
return false;
PackageLeafNode* headNode = fPackageNodes.Head();
- return headNode == NULL || *packageLeafNode > *headNode;
+ return headNode == NULL
+ || packageLeafNode->ModifiedTime() > headNode->ModifiedTime();
}
void
diff --git
a/src/add-ons/kernel/file_systems/packagefs/package/PackageDirectory.cpp
b/src/add-ons/kernel/file_systems/packagefs/package/PackageDirectory.cpp
index 2cfaaff884..916c42decd 100644
--- a/src/add-ons/kernel/file_systems/packagefs/package/PackageDirectory.cpp
+++ b/src/add-ons/kernel/file_systems/packagefs/package/PackageDirectory.cpp
@@ -39,19 +39,19 @@ PackageDirectory::RemoveChild(PackageNode* node)
bool
-PackageDirectory::operator<(const PackageDirectory& other) const
+PackageDirectory::HasPrecedenceOver(const PackageDirectory* other) const
{
// If one of us has the SYSTEM_PACKAGE flag and the other doesn't,
// let PackageNode take care of the comparison.
if ((fPackageFlags & BPackageKit::B_PACKAGE_FLAG_SYSTEM_PACKAGE)
- != (other.fPackageFlags
+ != (other->fPackageFlags
& BPackageKit::B_PACKAGE_FLAG_SYSTEM_PACKAGE)) {
- return PackageNode::operator<(other);
+ return PackageNode::HasPrecedenceOver(other);
}
const int32 attrs = fAttributes.Count(),
- otherAttrs = other.fAttributes.Count();
+ otherAttrs = other->fAttributes.Count();
if (attrs != otherAttrs)
- return attrs < otherAttrs;
- return PackageNode::operator<(other);
+ return attrs > otherAttrs;
+ return PackageNode::HasPrecedenceOver(other);
}
diff --git
a/src/add-ons/kernel/file_systems/packagefs/package/PackageDirectory.h
b/src/add-ons/kernel/file_systems/packagefs/package/PackageDirectory.h
index 6f2ddad140..d851ae3ded 100644
--- a/src/add-ons/kernel/file_systems/packagefs/package/PackageDirectory.h
+++ b/src/add-ons/kernel/file_systems/packagefs/package/PackageDirectory.h
@@ -26,9 +26,8 @@ public:
const PackageNodeList& Children() const
{
return fChildren; }
- bool operator<(const
PackageDirectory& other) const;
- inline bool operator>(const
PackageDirectory& other) const
- {
return other < *this; }
+ bool HasPrecedenceOver(const
PackageDirectory* other)
+ const;
private:
PackageNodeList fChildren;
diff --git a/src/add-ons/kernel/file_systems/packagefs/package/PackageNode.cpp
b/src/add-ons/kernel/file_systems/packagefs/package/PackageNode.cpp
index f299089125..c7ed3a5def 100644
--- a/src/add-ons/kernel/file_systems/packagefs/package/PackageNode.cpp
+++ b/src/add-ons/kernel/file_systems/packagefs/package/PackageNode.cpp
@@ -106,15 +106,15 @@ PackageNode::UnsetIndexCookie(void* attributeCookie)
bool
-PackageNode::operator<(const PackageNode& other) const
+PackageNode::HasPrecedenceOver(const PackageNode* other) const
{
const bool isSystemPkg = (fPackageFlags
& BPackageKit::B_PACKAGE_FLAG_SYSTEM_PACKAGE) != 0,
- otherIsSystemPkg = (other.fPackageFlags
+ otherIsSystemPkg = (other->fPackageFlags
& BPackageKit::B_PACKAGE_FLAG_SYSTEM_PACKAGE) != 0;
if (isSystemPkg && !otherIsSystemPkg)
- return false;
- if (!isSystemPkg && otherIsSystemPkg)
return true;
- return fModifiedTime < other.fModifiedTime;
+ if (!isSystemPkg && otherIsSystemPkg)
+ return false;
+ return fModifiedTime > other->fModifiedTime;
}
diff --git a/src/add-ons/kernel/file_systems/packagefs/package/PackageNode.h
b/src/add-ons/kernel/file_systems/packagefs/package/PackageNode.h
index 7b1e99c782..5c770dd755 100644
--- a/src/add-ons/kernel/file_systems/packagefs/package/PackageNode.h
+++ b/src/add-ons/kernel/file_systems/packagefs/package/PackageNode.h
@@ -73,9 +73,7 @@ public:
inline void* IndexCookieForAttribute(const
StringKey& name)
const;
- bool operator<(const
PackageNode& other) const;
- inline bool operator>(const PackageNode&
other) const
- {
return other < *this; }
+ bool HasPrecedenceOver(const
PackageNode* other) const;
// conceptually protected, but actually declaring it so
causes
// compilation issues when used with MethodDeleter in
subclasses
############################################################################
Revision: hrev52198
Commit: 779d9140a472e737daccfc810f444b0981e05ac2
URL: https://git.haiku-os.org/haiku/commit/?id=779d9140a472
Author: Augustin Cavalier <waddlesplash@xxxxxxxxx>
Date: Thu Aug 9 03:51:36 2018 UTC
radeon_hd: The MMIO area should be user-cloneable.
----------------------------------------------------------------------------
diff --git a/src/add-ons/kernel/drivers/graphics/radeon_hd/radeon_hd.cpp
b/src/add-ons/kernel/drivers/graphics/radeon_hd/radeon_hd.cpp
index e2391c0165..95acac3b44 100644
--- a/src/add-ons/kernel/drivers/graphics/radeon_hd/radeon_hd.cpp
+++ b/src/add-ons/kernel/drivers/graphics/radeon_hd/radeon_hd.cpp
@@ -559,7 +559,8 @@ radeon_hd_init(radeon_info &info)
info.registers_area = mmioMapper.Map("radeon hd mmio",
info.pci->u.h0.base_registers[pciBarMmio],
info.pci->u.h0.base_register_sizes[pciBarMmio],
- B_ANY_KERNEL_ADDRESS, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA,
+ B_ANY_KERNEL_ADDRESS,
+ B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA |
B_USER_CLONEABLE_AREA,
(void**)&info.registers);
if (mmioMapper.InitCheck() < B_OK) {
ERROR("%s: card (%ld): couldn't map memory I/O!\n",