bus_managers/scsi: Use kernel mutex API directly and not through a wrapper.
No functional change intended.
This commit is contained in:
@@ -132,11 +132,7 @@ scsi_create_bus(device_node *node, uint8 path_id)
|
||||
goto err4;
|
||||
}
|
||||
|
||||
res = INIT_BEN(&bus->mutex, "scsi_bus_mutex");
|
||||
|
||||
if (res < B_OK)
|
||||
goto err3;
|
||||
|
||||
mutex_init(&bus->mutex, "scsi_bus_mutex");
|
||||
spinlock_irq_init(&bus->dpc_lock);
|
||||
|
||||
res = scsi_init_ccb_alloc(bus);
|
||||
@@ -158,8 +154,7 @@ scsi_create_bus(device_node *node, uint8 path_id)
|
||||
err1:
|
||||
scsi_uninit_ccb_alloc(bus);
|
||||
err2:
|
||||
DELETE_BEN(&bus->mutex);
|
||||
err3:
|
||||
mutex_destroy(&bus->mutex);
|
||||
delete_sem(bus->start_service);
|
||||
err4:
|
||||
delete_sem(bus->scan_lun_lock);
|
||||
@@ -181,7 +176,7 @@ scsi_destroy_bus(scsi_bus_info *bus)
|
||||
wait_for_thread(bus->service_thread, &retcode);
|
||||
|
||||
delete_sem(bus->start_service);
|
||||
DELETE_BEN(&bus->mutex);
|
||||
mutex_destroy(&bus->mutex);
|
||||
delete_sem(bus->scan_lun_lock);
|
||||
|
||||
scsi_uninit_ccb_alloc(bus);
|
||||
|
||||
@@ -55,7 +55,7 @@ scsi_free_device(scsi_device_info *device)
|
||||
|
||||
scsi_dma_buffer_free(&device->dma_buffer);
|
||||
|
||||
DELETE_BEN(&device->dma_buffer_lock);
|
||||
mutex_destroy(&device->dma_buffer_lock);
|
||||
delete_sem(device->dma_buffer_owner);
|
||||
|
||||
free(device);
|
||||
@@ -178,20 +178,18 @@ scsi_create_device(device_node *node, scsi_bus_info *bus,
|
||||
|
||||
scsi_dma_buffer_init(&device->dma_buffer);
|
||||
|
||||
if (INIT_BEN(&device->dma_buffer_lock, "dma_buffer") < 0)
|
||||
goto err;
|
||||
mutex_init(&device->dma_buffer_lock, "dma_buffer");
|
||||
|
||||
device->dma_buffer_owner = create_sem(1, "dma_buffer");
|
||||
if (device->dma_buffer_owner < 0)
|
||||
goto err2;
|
||||
goto err;
|
||||
|
||||
register_kernel_daemon(scsi_dma_buffer_daemon, device, 5 * 10);
|
||||
|
||||
return device;
|
||||
|
||||
err2:
|
||||
DELETE_BEN(&device->dma_buffer_lock);
|
||||
err:
|
||||
mutex_destroy(&device->dma_buffer_lock);
|
||||
free(device);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@@ -364,14 +364,14 @@ scsi_get_dma_buffer(scsi_ccb *request)
|
||||
acquire_sem(device->dma_buffer_owner);
|
||||
|
||||
// make sure, clean-up daemon doesn't bother us
|
||||
ACQUIRE_BEN(&device->dma_buffer_lock);
|
||||
mutex_lock(&device->dma_buffer_lock);
|
||||
|
||||
// there is only one buffer, so no further management
|
||||
buffer = &device->dma_buffer;
|
||||
|
||||
buffer->inuse = true;
|
||||
|
||||
RELEASE_BEN(&device->dma_buffer_lock);
|
||||
mutex_unlock(&device->dma_buffer_lock);
|
||||
|
||||
// memorize buffer for cleanup
|
||||
request->dma_buffer = buffer;
|
||||
@@ -412,12 +412,12 @@ scsi_get_dma_buffer(scsi_ccb *request)
|
||||
err:
|
||||
SHOW_INFO0(3, "error setting up DMA buffer");
|
||||
|
||||
ACQUIRE_BEN(&device->dma_buffer_lock);
|
||||
mutex_lock(&device->dma_buffer_lock);
|
||||
|
||||
// some of this is probably not required, but I'm paranoid
|
||||
buffer->inuse = false;
|
||||
|
||||
RELEASE_BEN(&device->dma_buffer_lock);
|
||||
mutex_unlock(&device->dma_buffer_lock);
|
||||
release_sem(device->dma_buffer_owner);
|
||||
|
||||
return false;
|
||||
@@ -448,12 +448,12 @@ scsi_release_dma_buffer(scsi_ccb *request)
|
||||
request->sg_count = buffer->orig_sg_count;
|
||||
|
||||
// free buffer
|
||||
ACQUIRE_BEN(&device->dma_buffer_lock);
|
||||
mutex_lock(&device->dma_buffer_lock);
|
||||
|
||||
buffer->last_use = system_time();
|
||||
buffer->inuse = false;
|
||||
|
||||
RELEASE_BEN(&device->dma_buffer_lock);
|
||||
mutex_unlock(&device->dma_buffer_lock);
|
||||
|
||||
release_sem(device->dma_buffer_owner);
|
||||
|
||||
@@ -469,7 +469,7 @@ scsi_dma_buffer_daemon(void *dev, int counter)
|
||||
scsi_device_info *device = (scsi_device_info*)dev;
|
||||
dma_buffer *buffer;
|
||||
|
||||
ACQUIRE_BEN(&device->dma_buffer_lock);
|
||||
mutex_lock(&device->dma_buffer_lock);
|
||||
|
||||
buffer = &device->dma_buffer;
|
||||
|
||||
@@ -479,7 +479,7 @@ scsi_dma_buffer_daemon(void *dev, int counter)
|
||||
scsi_free_dma_buffer_sg_orig(buffer);
|
||||
}
|
||||
|
||||
RELEASE_BEN(&device->dma_buffer_lock);
|
||||
mutex_unlock(&device->dma_buffer_lock);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -235,7 +235,7 @@ static void scsi_unblock_bus_int( scsi_bus_info *bus, bool by_SIM )
|
||||
|
||||
SHOW_FLOW0( 3, "" );
|
||||
|
||||
ACQUIRE_BEN( &bus->mutex );
|
||||
mutex_lock( &bus->mutex );
|
||||
|
||||
was_servicable = scsi_can_service_bus( bus );
|
||||
|
||||
@@ -243,7 +243,7 @@ static void scsi_unblock_bus_int( scsi_bus_info *bus, bool by_SIM )
|
||||
|
||||
start_retry = !was_servicable && scsi_can_service_bus( bus );
|
||||
|
||||
RELEASE_BEN( &bus->mutex );
|
||||
mutex_unlock( &bus->mutex );
|
||||
|
||||
if( start_retry )
|
||||
release_sem( bus->start_service );
|
||||
@@ -265,7 +265,7 @@ static void scsi_unblock_device_int( scsi_device_info *device, bool by_SIM )
|
||||
|
||||
SHOW_FLOW0( 3, "" );
|
||||
|
||||
ACQUIRE_BEN( &bus->mutex );
|
||||
mutex_lock( &bus->mutex );
|
||||
|
||||
was_servicable = scsi_can_service_bus( bus );
|
||||
|
||||
@@ -277,7 +277,7 @@ static void scsi_unblock_device_int( scsi_device_info *device, bool by_SIM )
|
||||
|
||||
start_retry = !was_servicable && scsi_can_service_bus( bus );
|
||||
|
||||
RELEASE_BEN( &bus->mutex );
|
||||
mutex_unlock( &bus->mutex );
|
||||
|
||||
if( start_retry )
|
||||
release_sem( bus->start_service );
|
||||
@@ -298,7 +298,7 @@ void scsi_cont_send_bus( scsi_bus_info *bus )
|
||||
|
||||
SHOW_FLOW0( 3, "" );
|
||||
|
||||
ACQUIRE_BEN( &bus->mutex );
|
||||
mutex_lock( &bus->mutex );
|
||||
|
||||
was_servicable = scsi_can_service_bus( bus );
|
||||
|
||||
@@ -306,7 +306,7 @@ void scsi_cont_send_bus( scsi_bus_info *bus )
|
||||
|
||||
start_retry = !was_servicable && scsi_can_service_bus( bus );
|
||||
|
||||
RELEASE_BEN( &bus->mutex );
|
||||
mutex_unlock( &bus->mutex );
|
||||
|
||||
if( start_retry )
|
||||
release_sem_etc( bus->start_service, 1, 0/*B_DO_NOT_RESCHEDULE*/ );
|
||||
@@ -321,7 +321,7 @@ void scsi_cont_send_device( scsi_device_info *device )
|
||||
|
||||
SHOW_FLOW0( 3, "" );
|
||||
|
||||
ACQUIRE_BEN( &bus->mutex );
|
||||
mutex_lock( &bus->mutex );
|
||||
|
||||
was_servicable = scsi_can_service_bus( bus );
|
||||
|
||||
@@ -340,7 +340,7 @@ void scsi_cont_send_device( scsi_device_info *device )
|
||||
|
||||
start_retry = !was_servicable && scsi_can_service_bus( bus );
|
||||
|
||||
RELEASE_BEN( &bus->mutex );
|
||||
mutex_unlock( &bus->mutex );
|
||||
|
||||
// tell service thread if there are pending requests which
|
||||
// weren't pending before
|
||||
@@ -354,11 +354,11 @@ static void scsi_block_bus_int( scsi_bus_info *bus, bool by_SIM )
|
||||
{
|
||||
SHOW_FLOW0( 3, "" );
|
||||
|
||||
ACQUIRE_BEN( &bus->mutex );
|
||||
mutex_lock( &bus->mutex );
|
||||
|
||||
scsi_block_bus_nolock( bus, by_SIM );
|
||||
|
||||
RELEASE_BEN( &bus->mutex );
|
||||
mutex_unlock( &bus->mutex );
|
||||
}
|
||||
|
||||
|
||||
@@ -376,14 +376,14 @@ static void scsi_block_device_int( scsi_device_info *device, bool by_SIM )
|
||||
|
||||
SHOW_FLOW0( 3, "" );
|
||||
|
||||
ACQUIRE_BEN( &bus->mutex );
|
||||
mutex_lock( &bus->mutex );
|
||||
|
||||
scsi_block_device_nolock( device, by_SIM );
|
||||
|
||||
// remove device from bus queue as it cannot be processed anymore
|
||||
scsi_remove_device_queue( device );
|
||||
|
||||
RELEASE_BEN( &bus->mutex );
|
||||
mutex_unlock( &bus->mutex );
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -13,6 +13,7 @@
|
||||
#include <scsi_cmds.h>
|
||||
#include <locked_pool.h>
|
||||
#include <device_manager.h>
|
||||
#include <lock.h>
|
||||
|
||||
#define debug_level_error 4
|
||||
#define debug_level_info 4
|
||||
|
||||
@@ -34,7 +34,7 @@ scsi_requeue_request(scsi_ccb *request, bool bus_overflow)
|
||||
|
||||
request->state = SCSI_STATE_QUEUED;
|
||||
|
||||
ACQUIRE_BEN(&bus->mutex);
|
||||
mutex_lock(&bus->mutex);
|
||||
|
||||
was_servicable = scsi_can_service_bus(bus);
|
||||
|
||||
@@ -70,7 +70,7 @@ scsi_requeue_request(scsi_ccb *request, bool bus_overflow)
|
||||
|
||||
start_retry = !was_servicable && scsi_can_service_bus(bus);
|
||||
|
||||
RELEASE_BEN(&bus->mutex);
|
||||
mutex_unlock(&bus->mutex);
|
||||
|
||||
// submit requests to other devices in case bus was overloaded
|
||||
if (start_retry)
|
||||
@@ -96,7 +96,7 @@ scsi_resubmit_request(scsi_ccb *request)
|
||||
|
||||
request->state = SCSI_STATE_QUEUED;
|
||||
|
||||
ACQUIRE_BEN(&bus->mutex);
|
||||
mutex_lock(&bus->mutex);
|
||||
|
||||
was_servicable = scsi_can_service_bus(bus);
|
||||
|
||||
@@ -126,7 +126,7 @@ scsi_resubmit_request(scsi_ccb *request)
|
||||
|
||||
start_retry = !was_servicable && scsi_can_service_bus(bus);
|
||||
|
||||
RELEASE_BEN(&bus->mutex);
|
||||
mutex_unlock(&bus->mutex);
|
||||
|
||||
// let the service thread do the resubmit
|
||||
if (start_retry)
|
||||
@@ -219,13 +219,13 @@ scsi_device_queue_overflow(scsi_ccb *request, uint num_requests)
|
||||
SHOW_INFO(2, "Restricting device queue to %d requests", num_requests);
|
||||
|
||||
// update slot count
|
||||
ACQUIRE_BEN(&bus->mutex);
|
||||
mutex_lock(&bus->mutex);
|
||||
|
||||
diff_max_slots = device->total_slots - num_requests;
|
||||
device->total_slots = num_requests;
|
||||
device->left_slots -= diff_max_slots;
|
||||
|
||||
RELEASE_BEN(&bus->mutex);
|
||||
mutex_unlock(&bus->mutex);
|
||||
|
||||
// requeue request, blocking further device requests
|
||||
scsi_requeue_request(request, false);
|
||||
@@ -263,7 +263,7 @@ scsi_request_finished(scsi_ccb *request, uint num_requests)
|
||||
|
||||
request->state = SCSI_STATE_FINISHED;
|
||||
|
||||
ACQUIRE_BEN(&bus->mutex);
|
||||
mutex_lock(&bus->mutex);
|
||||
|
||||
was_servicable = scsi_can_service_bus(bus);
|
||||
|
||||
@@ -305,7 +305,7 @@ scsi_request_finished(scsi_ccb *request, uint num_requests)
|
||||
|
||||
start_service = !was_servicable && scsi_can_service_bus(bus);
|
||||
|
||||
RELEASE_BEN(&bus->mutex);
|
||||
mutex_unlock(&bus->mutex);
|
||||
|
||||
// tell service thread to submit new requests to SIM
|
||||
// (do this ASAP to keep bus/device busy)
|
||||
@@ -342,7 +342,7 @@ scsi_check_enqueue_request(scsi_ccb *request)
|
||||
scsi_device_info *device = request->device;
|
||||
bool execute;
|
||||
|
||||
ACQUIRE_BEN(&bus->mutex);
|
||||
mutex_lock(&bus->mutex);
|
||||
|
||||
// if device/bus is locked, or there are waiting requests
|
||||
// or waiting devices (last condition makes sure we don't overtake
|
||||
@@ -373,7 +373,7 @@ scsi_check_enqueue_request(scsi_ccb *request)
|
||||
execute = true;
|
||||
}
|
||||
|
||||
RELEASE_BEN(&bus->mutex);
|
||||
mutex_unlock(&bus->mutex);
|
||||
|
||||
return execute;
|
||||
}
|
||||
@@ -539,12 +539,12 @@ scsi_abort(scsi_ccb *req_to_abort)
|
||||
return SCSI_REQ_INVALID;
|
||||
}
|
||||
|
||||
ACQUIRE_BEN(&bus->mutex);
|
||||
mutex_lock(&bus->mutex);
|
||||
|
||||
switch (req_to_abort->state) {
|
||||
case SCSI_STATE_FINISHED:
|
||||
case SCSI_STATE_SENT:
|
||||
RELEASE_BEN(&bus->mutex);
|
||||
mutex_unlock(&bus->mutex);
|
||||
break;
|
||||
|
||||
case SCSI_STATE_QUEUED: {
|
||||
@@ -557,7 +557,7 @@ scsi_abort(scsi_ccb *req_to_abort)
|
||||
|
||||
start_retry = scsi_can_service_bus(bus) && !was_servicable;
|
||||
|
||||
RELEASE_BEN(&bus->mutex);
|
||||
mutex_unlock(&bus->mutex);
|
||||
|
||||
req_to_abort->subsys_status = SCSI_REQ_ABORTED;
|
||||
|
||||
@@ -589,7 +589,7 @@ bool
|
||||
scsi_check_exec_service(scsi_bus_info *bus)
|
||||
{
|
||||
SHOW_FLOW0(3, "");
|
||||
ACQUIRE_BEN(&bus->mutex);
|
||||
mutex_lock(&bus->mutex);
|
||||
|
||||
if (scsi_can_service_bus(bus)) {
|
||||
scsi_ccb *request;
|
||||
@@ -623,7 +623,7 @@ scsi_check_exec_service(scsi_bus_info *bus)
|
||||
SHOW_FLOW(1, "%" B_PRId64, device->last_sort);
|
||||
}
|
||||
|
||||
RELEASE_BEN(&bus->mutex);
|
||||
mutex_unlock(&bus->mutex);
|
||||
|
||||
request->state = SCSI_STATE_SENT;
|
||||
bus->interface->scsi_io(bus->sim_cookie, request);
|
||||
@@ -631,7 +631,7 @@ scsi_check_exec_service(scsi_bus_info *bus)
|
||||
return true;
|
||||
}
|
||||
|
||||
RELEASE_BEN(&bus->mutex);
|
||||
mutex_unlock(&bus->mutex);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -5,14 +5,6 @@
|
||||
#include <lock.h>
|
||||
|
||||
|
||||
// benaphores
|
||||
|
||||
#define INIT_BEN(x, prefix) (mutex_init_etc(x, prefix, MUTEX_FLAG_CLONE_NAME), \
|
||||
B_OK)
|
||||
#define DELETE_BEN(x) mutex_destroy(x)
|
||||
#define ACQUIRE_BEN(x) mutex_lock(x)
|
||||
#define RELEASE_BEN(x) mutex_unlock(x)
|
||||
|
||||
// debug output
|
||||
|
||||
#ifdef DEBUG_WAIT_ON_MSG
|
||||
|
||||
Reference in New Issue
Block a user