From a3a41a5b147a2428c90777c2c8c65bdfc0dc42c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Wed, 5 Sep 2018 20:29:10 +0200 Subject: [PATCH] Make areas cloned by accelerants effectively cloneable. Change-Id: I78046af6548e36571813ce516491c7fb64581967 Reviewed-on: https://review.haiku-os.org/513 Reviewed-by: waddlesplash --- src/add-ons/kernel/drivers/graphics/3dfx/driver.cpp | 5 +++-- src/add-ons/kernel/drivers/graphics/ati/driver.cpp | 5 +++-- src/add-ons/kernel/drivers/graphics/et6x00/driver.c | 3 ++- src/add-ons/kernel/drivers/graphics/intel_810/driver.cpp | 5 +++-- src/add-ons/kernel/drivers/graphics/neomagic/driver.c | 7 ++++--- src/add-ons/kernel/drivers/graphics/skeleton/driver.c | 5 +++-- src/add-ons/kernel/drivers/graphics/via/driver.c | 5 +++-- 7 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/add-ons/kernel/drivers/graphics/3dfx/driver.cpp b/src/add-ons/kernel/drivers/graphics/3dfx/driver.cpp index 70ca7220bf..7b573e22fc 100644 --- a/src/add-ons/kernel/drivers/graphics/3dfx/driver.cpp +++ b/src/add-ons/kernel/drivers/graphics/3dfx/driver.cpp @@ -173,7 +173,7 @@ MapDevice(DeviceInfo& di) regsBase, regAreaSize, B_ANY_KERNEL_ADDRESS, - 0, // neither read nor write, to hide it from user space apps + B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA | B_USER_CLONEABLE_AREA, (void**)&di.regs); // If there was an error, delete other areas. @@ -220,7 +220,8 @@ InitDevice(DeviceInfo& di) (void**) &(di.sharedInfo), B_ANY_KERNEL_ADDRESS, ROUND_TO_PAGE_SIZE(sharedSize), - B_FULL_LOCK, 0); + B_FULL_LOCK, + B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA | B_USER_CLONEABLE_AREA); if (di.sharedArea < 0) return di.sharedArea; // return error code diff --git a/src/add-ons/kernel/drivers/graphics/ati/driver.cpp b/src/add-ons/kernel/drivers/graphics/ati/driver.cpp index cc302c6b04..711641f0c1 100644 --- a/src/add-ons/kernel/drivers/graphics/ati/driver.cpp +++ b/src/add-ons/kernel/drivers/graphics/ati/driver.cpp @@ -651,7 +651,7 @@ MapDevice(DeviceInfo& di) regsBase, regAreaSize, B_ANY_KERNEL_ADDRESS, - 0, // neither read nor write, to hide it from user space apps + B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA | B_USER_CLONEABLE_AREA, (void**)&di.regs); // If there was an error, delete other areas. @@ -781,7 +781,8 @@ InitDevice(DeviceInfo& di) (void**) &(di.sharedInfo), B_ANY_KERNEL_ADDRESS, ROUND_TO_PAGE_SIZE(sharedSize + vesaModeTableSize), - B_FULL_LOCK, 0); + B_FULL_LOCK, + B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA | B_USER_CLONEABLE_AREA); if (di.sharedArea < 0) return di.sharedArea; // return error code diff --git a/src/add-ons/kernel/drivers/graphics/et6x00/driver.c b/src/add-ons/kernel/drivers/graphics/et6x00/driver.c index 65157228f2..d38fa95714 100644 --- a/src/add-ons/kernel/drivers/graphics/et6x00/driver.c +++ b/src/add-ons/kernel/drivers/graphics/et6x00/driver.c @@ -465,7 +465,8 @@ char shared_name[B_OS_NAME_LENGTH]; di->pcii.vendor_id, di->pcii.device_id, di->pcii.bus, di->pcii.device, di->pcii.function); /* create this area with NO user-space read or write permissions, to prevent accidental dammage */ - di->sharedArea = create_area(shared_name, (void **)&(di->si), B_ANY_KERNEL_ADDRESS, ((sizeof(ET6000SharedInfo) + (B_PAGE_SIZE - 1)) & ~(B_PAGE_SIZE - 1)), B_FULL_LOCK, 0); + di->sharedArea = create_area(shared_name, (void **)&(di->si), B_ANY_KERNEL_ADDRESS, ((sizeof(ET6000SharedInfo) + (B_PAGE_SIZE - 1)) & ~(B_PAGE_SIZE - 1)), B_FULL_LOCK, + B_FULL_LOCK, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA | B_USER_CLONEABLE_AREA); if (di->sharedArea < 0) { /* return the error */ result = di->sharedArea; diff --git a/src/add-ons/kernel/drivers/graphics/intel_810/driver.cpp b/src/add-ons/kernel/drivers/graphics/intel_810/driver.cpp index fc71602661..cdf752a020 100644 --- a/src/add-ons/kernel/drivers/graphics/intel_810/driver.cpp +++ b/src/add-ons/kernel/drivers/graphics/intel_810/driver.cpp @@ -255,7 +255,8 @@ InitDevice(DeviceInfo& di) (void**) &(di.sharedInfo), B_ANY_KERNEL_ADDRESS, ROUND_TO_PAGE_SIZE(sharedSize), - B_FULL_LOCK, 0); + B_FULL_LOCK, + B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA | B_USER_CLONEABLE_AREA); if (di.sharedArea < 0) return di.sharedArea; // return error code @@ -285,7 +286,7 @@ InitDevice(DeviceInfo& di) regsBase, regAreaSize, B_ANY_KERNEL_ADDRESS, - B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA, + B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA | B_USER_CLONEABLE_AREA, (void**)&di.regs); if (si.regsArea < 0) { diff --git a/src/add-ons/kernel/drivers/graphics/neomagic/driver.c b/src/add-ons/kernel/drivers/graphics/neomagic/driver.c index 0a1618310b..c2343a3cfa 100644 --- a/src/add-ons/kernel/drivers/graphics/neomagic/driver.c +++ b/src/add-ons/kernel/drivers/graphics/neomagic/driver.c @@ -379,7 +379,7 @@ static status_t map_device(device_info *di) di->pcii.u.h0.base_registers[registers], di->pcii.u.h0.base_register_sizes[registers], B_ANY_KERNEL_ADDRESS, - (si->use_clone_bugfix ? B_READ_AREA|B_WRITE_AREA : 0), + B_USER_CLONEABLE_AREA | (si->use_clone_bugfix ? B_READ_AREA|B_WRITE_AREA : 0), (void **)&(di->regs)); si->clone_bugfix_regs = (uint32 *) di->regs; @@ -396,7 +396,7 @@ static status_t map_device(device_info *di) di->pcii.u.h0.base_registers[registers2], di->pcii.u.h0.base_register_sizes[registers2], B_ANY_KERNEL_ADDRESS, - (si->use_clone_bugfix ? B_READ_AREA|B_WRITE_AREA : 0), + B_USER_CLONEABLE_AREA | (si->use_clone_bugfix ? B_READ_AREA|B_WRITE_AREA : 0), (void **)&(di->regs2)); si->clone_bugfix_regs2 = (uint32 *) di->regs2; @@ -696,7 +696,8 @@ static status_t open_hook (const char* name, uint32 flags, void** cookie) { di->pcii.vendor_id, di->pcii.device_id, di->pcii.bus, di->pcii.device, di->pcii.function); /* create this area with NO user-space read or write permissions, to prevent accidental dammage */ - di->shared_area = create_area(shared_name, (void **)&(di->si), B_ANY_KERNEL_ADDRESS, ((sizeof(shared_info) + (B_PAGE_SIZE - 1)) & ~(B_PAGE_SIZE - 1)), B_FULL_LOCK, 0); + di->shared_area = create_area(shared_name, (void **)&(di->si), B_ANY_KERNEL_ADDRESS, ((sizeof(shared_info) + (B_PAGE_SIZE - 1)) & ~(B_PAGE_SIZE - 1)), B_FULL_LOCK, + B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA | B_USER_CLONEABLE_AREA); if (di->shared_area < 0) { /* return the error */ result = di->shared_area; diff --git a/src/add-ons/kernel/drivers/graphics/skeleton/driver.c b/src/add-ons/kernel/drivers/graphics/skeleton/driver.c index 1630070ee7..570858fda1 100644 --- a/src/add-ons/kernel/drivers/graphics/skeleton/driver.c +++ b/src/add-ons/kernel/drivers/graphics/skeleton/driver.c @@ -379,7 +379,7 @@ static status_t map_device(device_info *di) di->pcii.u.h0.base_registers_pci[registers], di->pcii.u.h0.base_register_sizes[registers], B_ANY_KERNEL_ADDRESS, - (si->use_clone_bugfix ? B_READ_AREA|B_WRITE_AREA : 0), + B_USER_CLONEABLE_AREA | (si->use_clone_bugfix ? B_READ_AREA|B_WRITE_AREA : 0), (void **)&(di->regs)); si->clone_bugfix_regs = (uint32 *) di->regs; @@ -648,7 +648,8 @@ static status_t open_hook (const char* name, uint32 flags, void** cookie) { di->pcii.vendor_id, di->pcii.device_id, di->pcii.bus, di->pcii.device, di->pcii.function); /* create this area with NO user-space read or write permissions, to prevent accidental dammage */ - di->shared_area = create_area(shared_name, (void **)&(di->si), B_ANY_KERNEL_ADDRESS, ((sizeof(shared_info) + (B_PAGE_SIZE - 1)) & ~(B_PAGE_SIZE - 1)), B_FULL_LOCK, 0); + di->shared_area = create_area(shared_name, (void **)&(di->si), B_ANY_KERNEL_ADDRESS, ((sizeof(shared_info) + (B_PAGE_SIZE - 1)) & ~(B_PAGE_SIZE - 1)), B_FULL_LOCK, + B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA | B_USER_CLONEABLE_AREA); if (di->shared_area < 0) { /* return the error */ result = di->shared_area; diff --git a/src/add-ons/kernel/drivers/graphics/via/driver.c b/src/add-ons/kernel/drivers/graphics/via/driver.c index 31f044e869..9b06c32afe 100644 --- a/src/add-ons/kernel/drivers/graphics/via/driver.c +++ b/src/add-ons/kernel/drivers/graphics/via/driver.c @@ -388,7 +388,7 @@ static status_t map_device(device_info *di) di->pcii.u.h0.base_registers_pci[registers], di->pcii.u.h0.base_register_sizes[registers], B_ANY_KERNEL_ADDRESS, - (si->use_clone_bugfix ? B_READ_AREA|B_WRITE_AREA : 0), + B_USER_CLONEABLE_AREA | (si->use_clone_bugfix ? B_READ_AREA|B_WRITE_AREA : 0), (void **)&(di->regs)); si->clone_bugfix_regs = (uint32 *) di->regs; @@ -657,7 +657,8 @@ static status_t open_hook (const char* name, uint32 flags, void** cookie) { di->pcii.vendor_id, di->pcii.device_id, di->pcii.bus, di->pcii.device, di->pcii.function); /* create this area with NO user-space read or write permissions, to prevent accidental dammage */ - di->shared_area = create_area(shared_name, (void **)&(di->si), B_ANY_KERNEL_ADDRESS, ((sizeof(shared_info) + (B_PAGE_SIZE - 1)) & ~(B_PAGE_SIZE - 1)), B_FULL_LOCK, 0); + di->shared_area = create_area(shared_name, (void **)&(di->si), B_ANY_KERNEL_ADDRESS, ((sizeof(shared_info) + (B_PAGE_SIZE - 1)) & ~(B_PAGE_SIZE - 1)), B_FULL_LOCK, + B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA | B_USER_CLONEABLE_AREA); if (di->shared_area < 0) { /* return the error */ result = di->shared_area;