Commit 6aa4cdd0 authored by Ingo Molnar's avatar Ingo Molnar Committed by Greg Kroah-Hartman

[PATCH] PCI hotplug: convert semaphores to mutex

semaphore to mutex conversion.

the conversion was generated via scripts, and the result was validated
automatically via a script as well.

build tested with allyesconfig.
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent c408a379
...@@ -37,6 +37,7 @@ ...@@ -37,6 +37,7 @@
#include <linux/acpi.h> #include <linux/acpi.h>
#include <linux/kobject.h> /* for KOBJ_NAME_LEN */ #include <linux/kobject.h> /* for KOBJ_NAME_LEN */
#include <linux/mutex.h>
#include "pci_hotplug.h" #include "pci_hotplug.h"
#define dbg(format, arg...) \ #define dbg(format, arg...) \
...@@ -118,7 +119,7 @@ struct acpiphp_slot { ...@@ -118,7 +119,7 @@ struct acpiphp_slot {
struct acpiphp_bridge *bridge; /* parent */ struct acpiphp_bridge *bridge; /* parent */
struct list_head funcs; /* one slot may have different struct list_head funcs; /* one slot may have different
objects (i.e. for each function) */ objects (i.e. for each function) */
struct semaphore crit_sect; struct mutex crit_sect;
u32 id; /* slot id (serial #) for hotplug core */ u32 id; /* slot id (serial #) for hotplug core */
u8 device; /* pci device# */ u8 device; /* pci device# */
......
...@@ -46,7 +46,7 @@ ...@@ -46,7 +46,7 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/smp_lock.h> #include <linux/smp_lock.h>
#include <asm/semaphore.h> #include <linux/mutex.h>
#include "../pci.h" #include "../pci.h"
#include "pci_hotplug.h" #include "pci_hotplug.h"
...@@ -188,7 +188,7 @@ register_slot(acpi_handle handle, u32 lvl, void *context, void **rv) ...@@ -188,7 +188,7 @@ register_slot(acpi_handle handle, u32 lvl, void *context, void **rv)
slot->device = device; slot->device = device;
slot->sun = sun; slot->sun = sun;
INIT_LIST_HEAD(&slot->funcs); INIT_LIST_HEAD(&slot->funcs);
init_MUTEX(&slot->crit_sect); mutex_init(&slot->crit_sect);
slot->next = bridge->slots; slot->next = bridge->slots;
bridge->slots = slot; bridge->slots = slot;
...@@ -1401,7 +1401,7 @@ int acpiphp_enable_slot(struct acpiphp_slot *slot) ...@@ -1401,7 +1401,7 @@ int acpiphp_enable_slot(struct acpiphp_slot *slot)
{ {
int retval; int retval;
down(&slot->crit_sect); mutex_lock(&slot->crit_sect);
/* wake up all functions */ /* wake up all functions */
retval = power_on_slot(slot); retval = power_on_slot(slot);
...@@ -1413,7 +1413,7 @@ int acpiphp_enable_slot(struct acpiphp_slot *slot) ...@@ -1413,7 +1413,7 @@ int acpiphp_enable_slot(struct acpiphp_slot *slot)
retval = enable_device(slot); retval = enable_device(slot);
err_exit: err_exit:
up(&slot->crit_sect); mutex_unlock(&slot->crit_sect);
return retval; return retval;
} }
...@@ -1424,7 +1424,7 @@ int acpiphp_disable_slot(struct acpiphp_slot *slot) ...@@ -1424,7 +1424,7 @@ int acpiphp_disable_slot(struct acpiphp_slot *slot)
{ {
int retval = 0; int retval = 0;
down(&slot->crit_sect); mutex_lock(&slot->crit_sect);
/* unconfigure all functions */ /* unconfigure all functions */
retval = disable_device(slot); retval = disable_device(slot);
...@@ -1437,7 +1437,7 @@ int acpiphp_disable_slot(struct acpiphp_slot *slot) ...@@ -1437,7 +1437,7 @@ int acpiphp_disable_slot(struct acpiphp_slot *slot)
goto err_exit; goto err_exit;
err_exit: err_exit:
up(&slot->crit_sect); mutex_unlock(&slot->crit_sect);
return retval; return retval;
} }
......
...@@ -32,6 +32,7 @@ ...@@ -32,6 +32,7 @@
#include <linux/interrupt.h> #include <linux/interrupt.h>
#include <asm/io.h> /* for read? and write? functions */ #include <asm/io.h> /* for read? and write? functions */
#include <linux/delay.h> /* for delays */ #include <linux/delay.h> /* for delays */
#include <linux/mutex.h>
#define MY_NAME "cpqphp" #define MY_NAME "cpqphp"
...@@ -286,7 +287,7 @@ struct event_info { ...@@ -286,7 +287,7 @@ struct event_info {
struct controller { struct controller {
struct controller *next; struct controller *next;
u32 ctrl_int_comp; u32 ctrl_int_comp;
struct semaphore crit_sect; /* critical section semaphore */ struct mutex crit_sect; /* critical section mutex */
void __iomem *hpc_reg; /* cookie for our pci controller location */ void __iomem *hpc_reg; /* cookie for our pci controller location */
struct pci_resource *mem_head; struct pci_resource *mem_head;
struct pci_resource *p_mem_head; struct pci_resource *p_mem_head;
......
...@@ -599,7 +599,7 @@ cpqhp_set_attention_status(struct controller *ctrl, struct pci_func *func, ...@@ -599,7 +599,7 @@ cpqhp_set_attention_status(struct controller *ctrl, struct pci_func *func,
hp_slot = func->device - ctrl->slot_device_offset; hp_slot = func->device - ctrl->slot_device_offset;
// Wait for exclusive access to hardware // Wait for exclusive access to hardware
down(&ctrl->crit_sect); mutex_lock(&ctrl->crit_sect);
if (status == 1) { if (status == 1) {
amber_LED_on (ctrl, hp_slot); amber_LED_on (ctrl, hp_slot);
...@@ -607,7 +607,7 @@ cpqhp_set_attention_status(struct controller *ctrl, struct pci_func *func, ...@@ -607,7 +607,7 @@ cpqhp_set_attention_status(struct controller *ctrl, struct pci_func *func,
amber_LED_off (ctrl, hp_slot); amber_LED_off (ctrl, hp_slot);
} else { } else {
// Done with exclusive hardware access // Done with exclusive hardware access
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
return(1); return(1);
} }
...@@ -617,7 +617,7 @@ cpqhp_set_attention_status(struct controller *ctrl, struct pci_func *func, ...@@ -617,7 +617,7 @@ cpqhp_set_attention_status(struct controller *ctrl, struct pci_func *func,
wait_for_ctrl_irq (ctrl); wait_for_ctrl_irq (ctrl);
// Done with exclusive hardware access // Done with exclusive hardware access
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
return(0); return(0);
} }
...@@ -1084,7 +1084,7 @@ static int cpqhpc_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1084,7 +1084,7 @@ static int cpqhpc_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
dbg("bus device function rev: %d %d %d %d\n", ctrl->bus, dbg("bus device function rev: %d %d %d %d\n", ctrl->bus,
PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn), ctrl->rev); PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn), ctrl->rev);
init_MUTEX(&ctrl->crit_sect); mutex_init(&ctrl->crit_sect);
init_waitqueue_head(&ctrl->queue); init_waitqueue_head(&ctrl->queue);
/* initialize our threads if they haven't already been started up */ /* initialize our threads if they haven't already been started up */
...@@ -1223,7 +1223,7 @@ static int cpqhpc_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1223,7 +1223,7 @@ static int cpqhpc_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
// turn off empty slots here unless command line option "ON" set // turn off empty slots here unless command line option "ON" set
// Wait for exclusive access to hardware // Wait for exclusive access to hardware
down(&ctrl->crit_sect); mutex_lock(&ctrl->crit_sect);
num_of_slots = readb(ctrl->hpc_reg + SLOT_MASK) & 0x0F; num_of_slots = readb(ctrl->hpc_reg + SLOT_MASK) & 0x0F;
...@@ -1270,12 +1270,12 @@ static int cpqhpc_probe(struct pci_dev *pdev, const struct pci_device_id *ent) ...@@ -1270,12 +1270,12 @@ static int cpqhpc_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
rc = init_SERR(ctrl); rc = init_SERR(ctrl);
if (rc) { if (rc) {
err("init_SERR failed\n"); err("init_SERR failed\n");
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
goto err_free_irq; goto err_free_irq;
} }
// Done with exclusive hardware access // Done with exclusive hardware access
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
cpqhp_create_debugfs_files(ctrl); cpqhp_create_debugfs_files(ctrl);
......
...@@ -1299,7 +1299,7 @@ static u32 board_replaced(struct pci_func *func, struct controller *ctrl) ...@@ -1299,7 +1299,7 @@ static u32 board_replaced(struct pci_func *func, struct controller *ctrl)
**********************************/ **********************************/
rc = CARD_FUNCTIONING; rc = CARD_FUNCTIONING;
} else { } else {
down(&ctrl->crit_sect); mutex_lock(&ctrl->crit_sect);
/* turn on board without attaching to the bus */ /* turn on board without attaching to the bus */
enable_slot_power (ctrl, hp_slot); enable_slot_power (ctrl, hp_slot);
...@@ -1333,12 +1333,12 @@ static u32 board_replaced(struct pci_func *func, struct controller *ctrl) ...@@ -1333,12 +1333,12 @@ static u32 board_replaced(struct pci_func *func, struct controller *ctrl)
/* Wait for SOBS to be unset */ /* Wait for SOBS to be unset */
wait_for_ctrl_irq (ctrl); wait_for_ctrl_irq (ctrl);
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
if (rc) if (rc)
return rc; return rc;
down(&ctrl->crit_sect); mutex_lock(&ctrl->crit_sect);
slot_enable (ctrl, hp_slot); slot_enable (ctrl, hp_slot);
green_LED_blink (ctrl, hp_slot); green_LED_blink (ctrl, hp_slot);
...@@ -1350,7 +1350,7 @@ static u32 board_replaced(struct pci_func *func, struct controller *ctrl) ...@@ -1350,7 +1350,7 @@ static u32 board_replaced(struct pci_func *func, struct controller *ctrl)
/* Wait for SOBS to be unset */ /* Wait for SOBS to be unset */
wait_for_ctrl_irq (ctrl); wait_for_ctrl_irq (ctrl);
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
/* Wait for ~1 second because of hot plug spec */ /* Wait for ~1 second because of hot plug spec */
long_delay(1*HZ); long_delay(1*HZ);
...@@ -1375,7 +1375,7 @@ static u32 board_replaced(struct pci_func *func, struct controller *ctrl) ...@@ -1375,7 +1375,7 @@ static u32 board_replaced(struct pci_func *func, struct controller *ctrl)
* called for the "base" bus/dev/func of an * called for the "base" bus/dev/func of an
* adapter. */ * adapter. */
down(&ctrl->crit_sect); mutex_lock(&ctrl->crit_sect);
amber_LED_on (ctrl, hp_slot); amber_LED_on (ctrl, hp_slot);
green_LED_off (ctrl, hp_slot); green_LED_off (ctrl, hp_slot);
...@@ -1386,7 +1386,7 @@ static u32 board_replaced(struct pci_func *func, struct controller *ctrl) ...@@ -1386,7 +1386,7 @@ static u32 board_replaced(struct pci_func *func, struct controller *ctrl)
/* Wait for SOBS to be unset */ /* Wait for SOBS to be unset */
wait_for_ctrl_irq (ctrl); wait_for_ctrl_irq (ctrl);
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
if (rc) if (rc)
return rc; return rc;
...@@ -1410,7 +1410,7 @@ static u32 board_replaced(struct pci_func *func, struct controller *ctrl) ...@@ -1410,7 +1410,7 @@ static u32 board_replaced(struct pci_func *func, struct controller *ctrl)
* called for the "base" bus/dev/func of an * called for the "base" bus/dev/func of an
* adapter. */ * adapter. */
down(&ctrl->crit_sect); mutex_lock(&ctrl->crit_sect);
amber_LED_on (ctrl, hp_slot); amber_LED_on (ctrl, hp_slot);
green_LED_off (ctrl, hp_slot); green_LED_off (ctrl, hp_slot);
...@@ -1421,13 +1421,13 @@ static u32 board_replaced(struct pci_func *func, struct controller *ctrl) ...@@ -1421,13 +1421,13 @@ static u32 board_replaced(struct pci_func *func, struct controller *ctrl)
/* Wait for SOBS to be unset */ /* Wait for SOBS to be unset */
wait_for_ctrl_irq (ctrl); wait_for_ctrl_irq (ctrl);
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
return rc; return rc;
} }
/* Done configuring so turn LED on full time */ /* Done configuring so turn LED on full time */
down(&ctrl->crit_sect); mutex_lock(&ctrl->crit_sect);
green_LED_on (ctrl, hp_slot); green_LED_on (ctrl, hp_slot);
...@@ -1436,7 +1436,7 @@ static u32 board_replaced(struct pci_func *func, struct controller *ctrl) ...@@ -1436,7 +1436,7 @@ static u32 board_replaced(struct pci_func *func, struct controller *ctrl)
/* Wait for SOBS to be unset */ /* Wait for SOBS to be unset */
wait_for_ctrl_irq (ctrl); wait_for_ctrl_irq (ctrl);
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
rc = 0; rc = 0;
} else { } else {
/* Something is wrong /* Something is wrong
...@@ -1445,7 +1445,7 @@ static u32 board_replaced(struct pci_func *func, struct controller *ctrl) ...@@ -1445,7 +1445,7 @@ static u32 board_replaced(struct pci_func *func, struct controller *ctrl)
* in this case it will always be called for the "base" * in this case it will always be called for the "base"
* bus/dev/func of an adapter. */ * bus/dev/func of an adapter. */
down(&ctrl->crit_sect); mutex_lock(&ctrl->crit_sect);
amber_LED_on (ctrl, hp_slot); amber_LED_on (ctrl, hp_slot);
green_LED_off (ctrl, hp_slot); green_LED_off (ctrl, hp_slot);
...@@ -1456,7 +1456,7 @@ static u32 board_replaced(struct pci_func *func, struct controller *ctrl) ...@@ -1456,7 +1456,7 @@ static u32 board_replaced(struct pci_func *func, struct controller *ctrl)
/* Wait for SOBS to be unset */ /* Wait for SOBS to be unset */
wait_for_ctrl_irq (ctrl); wait_for_ctrl_irq (ctrl);
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
} }
} }
...@@ -1488,7 +1488,7 @@ static u32 board_added(struct pci_func *func, struct controller *ctrl) ...@@ -1488,7 +1488,7 @@ static u32 board_added(struct pci_func *func, struct controller *ctrl)
dbg("%s: func->device, slot_offset, hp_slot = %d, %d ,%d\n", dbg("%s: func->device, slot_offset, hp_slot = %d, %d ,%d\n",
__FUNCTION__, func->device, ctrl->slot_device_offset, hp_slot); __FUNCTION__, func->device, ctrl->slot_device_offset, hp_slot);
down(&ctrl->crit_sect); mutex_lock(&ctrl->crit_sect);
/* turn on board without attaching to the bus */ /* turn on board without attaching to the bus */
enable_slot_power(ctrl, hp_slot); enable_slot_power(ctrl, hp_slot);
...@@ -1522,7 +1522,7 @@ static u32 board_added(struct pci_func *func, struct controller *ctrl) ...@@ -1522,7 +1522,7 @@ static u32 board_added(struct pci_func *func, struct controller *ctrl)
/* Wait for SOBS to be unset */ /* Wait for SOBS to be unset */
wait_for_ctrl_irq(ctrl); wait_for_ctrl_irq(ctrl);
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
if (rc) if (rc)
return rc; return rc;
...@@ -1532,7 +1532,7 @@ static u32 board_added(struct pci_func *func, struct controller *ctrl) ...@@ -1532,7 +1532,7 @@ static u32 board_added(struct pci_func *func, struct controller *ctrl)
/* turn on board and blink green LED */ /* turn on board and blink green LED */
dbg("%s: before down\n", __FUNCTION__); dbg("%s: before down\n", __FUNCTION__);
down(&ctrl->crit_sect); mutex_lock(&ctrl->crit_sect);
dbg("%s: after down\n", __FUNCTION__); dbg("%s: after down\n", __FUNCTION__);
dbg("%s: before slot_enable\n", __FUNCTION__); dbg("%s: before slot_enable\n", __FUNCTION__);
...@@ -1553,7 +1553,7 @@ static u32 board_added(struct pci_func *func, struct controller *ctrl) ...@@ -1553,7 +1553,7 @@ static u32 board_added(struct pci_func *func, struct controller *ctrl)
dbg("%s: after wait_for_ctrl_irq\n", __FUNCTION__); dbg("%s: after wait_for_ctrl_irq\n", __FUNCTION__);
dbg("%s: before up\n", __FUNCTION__); dbg("%s: before up\n", __FUNCTION__);
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
dbg("%s: after up\n", __FUNCTION__); dbg("%s: after up\n", __FUNCTION__);
/* Wait for ~1 second because of hot plug spec */ /* Wait for ~1 second because of hot plug spec */
...@@ -1607,7 +1607,7 @@ static u32 board_added(struct pci_func *func, struct controller *ctrl) ...@@ -1607,7 +1607,7 @@ static u32 board_added(struct pci_func *func, struct controller *ctrl)
cpqhp_resource_sort_and_combine(&(ctrl->bus_head)); cpqhp_resource_sort_and_combine(&(ctrl->bus_head));
if (rc) { if (rc) {
down(&ctrl->crit_sect); mutex_lock(&ctrl->crit_sect);
amber_LED_on (ctrl, hp_slot); amber_LED_on (ctrl, hp_slot);
green_LED_off (ctrl, hp_slot); green_LED_off (ctrl, hp_slot);
...@@ -1618,7 +1618,7 @@ static u32 board_added(struct pci_func *func, struct controller *ctrl) ...@@ -1618,7 +1618,7 @@ static u32 board_added(struct pci_func *func, struct controller *ctrl)
/* Wait for SOBS to be unset */ /* Wait for SOBS to be unset */
wait_for_ctrl_irq (ctrl); wait_for_ctrl_irq (ctrl);
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
return rc; return rc;
} else { } else {
cpqhp_save_slot_config(ctrl, func); cpqhp_save_slot_config(ctrl, func);
...@@ -1640,7 +1640,7 @@ static u32 board_added(struct pci_func *func, struct controller *ctrl) ...@@ -1640,7 +1640,7 @@ static u32 board_added(struct pci_func *func, struct controller *ctrl)
} }
} while (new_slot); } while (new_slot);
down(&ctrl->crit_sect); mutex_lock(&ctrl->crit_sect);
green_LED_on (ctrl, hp_slot); green_LED_on (ctrl, hp_slot);
...@@ -1649,9 +1649,9 @@ static u32 board_added(struct pci_func *func, struct controller *ctrl) ...@@ -1649,9 +1649,9 @@ static u32 board_added(struct pci_func *func, struct controller *ctrl)
/* Wait for SOBS to be unset */ /* Wait for SOBS to be unset */
wait_for_ctrl_irq (ctrl); wait_for_ctrl_irq (ctrl);
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
} else { } else {
down(&ctrl->crit_sect); mutex_lock(&ctrl->crit_sect);
amber_LED_on (ctrl, hp_slot); amber_LED_on (ctrl, hp_slot);
green_LED_off (ctrl, hp_slot); green_LED_off (ctrl, hp_slot);
...@@ -1662,7 +1662,7 @@ static u32 board_added(struct pci_func *func, struct controller *ctrl) ...@@ -1662,7 +1662,7 @@ static u32 board_added(struct pci_func *func, struct controller *ctrl)
/* Wait for SOBS to be unset */ /* Wait for SOBS to be unset */
wait_for_ctrl_irq (ctrl); wait_for_ctrl_irq (ctrl);
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
return rc; return rc;
} }
...@@ -1721,7 +1721,7 @@ static u32 remove_board(struct pci_func * func, u32 replace_flag, struct control ...@@ -1721,7 +1721,7 @@ static u32 remove_board(struct pci_func * func, u32 replace_flag, struct control
func->status = 0x01; func->status = 0x01;
func->configured = 0; func->configured = 0;
down(&ctrl->crit_sect); mutex_lock(&ctrl->crit_sect);
green_LED_off (ctrl, hp_slot); green_LED_off (ctrl, hp_slot);
slot_disable (ctrl, hp_slot); slot_disable (ctrl, hp_slot);
...@@ -1736,7 +1736,7 @@ static u32 remove_board(struct pci_func * func, u32 replace_flag, struct control ...@@ -1736,7 +1736,7 @@ static u32 remove_board(struct pci_func * func, u32 replace_flag, struct control
/* Wait for SOBS to be unset */ /* Wait for SOBS to be unset */
wait_for_ctrl_irq (ctrl); wait_for_ctrl_irq (ctrl);
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
if (!replace_flag && ctrl->add_support) { if (!replace_flag && ctrl->add_support) {
while (func) { while (func) {
...@@ -1899,7 +1899,7 @@ static void interrupt_event_handler(struct controller *ctrl) ...@@ -1899,7 +1899,7 @@ static void interrupt_event_handler(struct controller *ctrl)
dbg("button cancel\n"); dbg("button cancel\n");
del_timer(&p_slot->task_event); del_timer(&p_slot->task_event);
down(&ctrl->crit_sect); mutex_lock(&ctrl->crit_sect);
if (p_slot->state == BLINKINGOFF_STATE) { if (p_slot->state == BLINKINGOFF_STATE) {
/* slot is on */ /* slot is on */
...@@ -1922,7 +1922,7 @@ static void interrupt_event_handler(struct controller *ctrl) ...@@ -1922,7 +1922,7 @@ static void interrupt_event_handler(struct controller *ctrl)
/* Wait for SOBS to be unset */ /* Wait for SOBS to be unset */
wait_for_ctrl_irq (ctrl); wait_for_ctrl_irq (ctrl);
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
} }
/*** button Released (No action on press...) */ /*** button Released (No action on press...) */
else if (ctrl->event_queue[loop].event_type == INT_BUTTON_RELEASE) { else if (ctrl->event_queue[loop].event_type == INT_BUTTON_RELEASE) {
...@@ -1937,7 +1937,7 @@ static void interrupt_event_handler(struct controller *ctrl) ...@@ -1937,7 +1937,7 @@ static void interrupt_event_handler(struct controller *ctrl)
p_slot->state = BLINKINGON_STATE; p_slot->state = BLINKINGON_STATE;
info(msg_button_on, p_slot->number); info(msg_button_on, p_slot->number);
} }
down(&ctrl->crit_sect); mutex_lock(&ctrl->crit_sect);
dbg("blink green LED and turn off amber\n"); dbg("blink green LED and turn off amber\n");
...@@ -1949,7 +1949,7 @@ static void interrupt_event_handler(struct controller *ctrl) ...@@ -1949,7 +1949,7 @@ static void interrupt_event_handler(struct controller *ctrl)
/* Wait for SOBS to be unset */ /* Wait for SOBS to be unset */
wait_for_ctrl_irq (ctrl); wait_for_ctrl_irq (ctrl);
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
init_timer(&p_slot->task_event); init_timer(&p_slot->task_event);
p_slot->hp_slot = hp_slot; p_slot->hp_slot = hp_slot;
p_slot->ctrl = ctrl; p_slot->ctrl = ctrl;
......
...@@ -34,6 +34,8 @@ ...@@ -34,6 +34,8 @@
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/smp_lock.h> #include <linux/smp_lock.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/mutex.h>
#include "ibmphp.h" #include "ibmphp.h"
static int to_debug = FALSE; static int to_debug = FALSE;
...@@ -101,7 +103,7 @@ static int to_debug = FALSE; ...@@ -101,7 +103,7 @@ static int to_debug = FALSE;
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
static int ibmphp_shutdown; static int ibmphp_shutdown;
static int tid_poll; static int tid_poll;
static struct semaphore sem_hpcaccess; // lock access to HPC static struct mutex sem_hpcaccess; // lock access to HPC
static struct semaphore semOperations; // lock all operations and static struct semaphore semOperations; // lock all operations and
// access to data structures // access to data structures
static struct semaphore sem_exit; // make sure polling thread goes away static struct semaphore sem_exit; // make sure polling thread goes away
...@@ -131,7 +133,7 @@ void __init ibmphp_hpc_initvars (void) ...@@ -131,7 +133,7 @@ void __init ibmphp_hpc_initvars (void)
{ {
debug ("%s - Entry\n", __FUNCTION__); debug ("%s - Entry\n", __FUNCTION__);
init_MUTEX (&sem_hpcaccess); mutex_init(&sem_hpcaccess);
init_MUTEX (&semOperations); init_MUTEX (&semOperations);
init_MUTEX_LOCKED (&sem_exit); init_MUTEX_LOCKED (&sem_exit);
to_debug = FALSE; to_debug = FALSE;
...@@ -778,7 +780,7 @@ int ibmphp_hpc_writeslot (struct slot * pslot, u8 cmd) ...@@ -778,7 +780,7 @@ int ibmphp_hpc_writeslot (struct slot * pslot, u8 cmd)
*---------------------------------------------------------------------*/ *---------------------------------------------------------------------*/
static void get_hpc_access (void) static void get_hpc_access (void)
{ {
down (&sem_hpcaccess); mutex_lock(&sem_hpcaccess);
} }
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------
...@@ -786,7 +788,7 @@ static void get_hpc_access (void) ...@@ -786,7 +788,7 @@ static void get_hpc_access (void)
*---------------------------------------------------------------------*/ *---------------------------------------------------------------------*/
void free_hpc_access (void) void free_hpc_access (void)
{ {
up (&sem_hpcaccess); mutex_unlock(&sem_hpcaccess);
} }
/*---------------------------------------------------------------------- /*----------------------------------------------------------------------
......
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/sched.h> /* signal_pending() */ #include <linux/sched.h> /* signal_pending() */
#include <linux/pcieport_if.h> #include <linux/pcieport_if.h>
#include <linux/mutex.h>
#include "pci_hotplug.h" #include "pci_hotplug.h"
#define MY_NAME "pciehp" #define MY_NAME "pciehp"
...@@ -96,7 +97,7 @@ struct php_ctlr_state_s { ...@@ -96,7 +97,7 @@ struct php_ctlr_state_s {
#define MAX_EVENTS 10 #define MAX_EVENTS 10
struct controller { struct controller {
struct controller *next; struct controller *next;
struct semaphore crit_sect; /* critical section semaphore */ struct mutex crit_sect; /* critical section mutex */
struct php_ctlr_state_s *hpc_ctlr_handle; /* HPC controller handle */ struct php_ctlr_state_s *hpc_ctlr_handle; /* HPC controller handle */
int num_slots; /* Number of slots on ctlr */ int num_slots; /* Number of slots on ctlr */
int slot_num_inc; /* 1 or -1 */ int slot_num_inc; /* 1 or -1 */
......
...@@ -439,7 +439,7 @@ static int pciehp_probe(struct pcie_device *dev, const struct pcie_port_service_ ...@@ -439,7 +439,7 @@ static int pciehp_probe(struct pcie_device *dev, const struct pcie_port_service_
} }
/* Wait for exclusive access to hardware */ /* Wait for exclusive access to hardware */
down(&ctrl->crit_sect); mutex_lock(&ctrl->crit_sect);
t_slot->hpc_ops->get_adapter_status(t_slot, &value); /* Check if slot is occupied */ t_slot->hpc_ops->get_adapter_status(t_slot, &value); /* Check if slot is occupied */
...@@ -447,7 +447,7 @@ static int pciehp_probe(struct pcie_device *dev, const struct pcie_port_service_ ...@@ -447,7 +447,7 @@ static int pciehp_probe(struct pcie_device *dev, const struct pcie_port_service_
rc = t_slot->hpc_ops->power_off_slot(t_slot); /* Power off slot if not occupied*/ rc = t_slot->hpc_ops->power_off_slot(t_slot); /* Power off slot if not occupied*/
if (rc) { if (rc) {
/* Done with exclusive hardware access */ /* Done with exclusive hardware access */
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
goto err_out_free_ctrl_slot; goto err_out_free_ctrl_slot;
} else } else
/* Wait for the command to complete */ /* Wait for the command to complete */
...@@ -455,7 +455,7 @@ static int pciehp_probe(struct pcie_device *dev, const struct pcie_port_service_ ...@@ -455,7 +455,7 @@ static int pciehp_probe(struct pcie_device *dev, const struct pcie_port_service_
} }
/* Done with exclusive hardware access */ /* Done with exclusive hardware access */
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
return 0; return 0;
......
...@@ -229,13 +229,13 @@ u8 pciehp_handle_power_fault(u8 hp_slot, void *inst_id) ...@@ -229,13 +229,13 @@ u8 pciehp_handle_power_fault(u8 hp_slot, void *inst_id)
static void set_slot_off(struct controller *ctrl, struct slot * pslot) static void set_slot_off(struct controller *ctrl, struct slot * pslot)
{ {
/* Wait for exclusive access to hardware */ /* Wait for exclusive access to hardware */
down(&ctrl->crit_sect); mutex_lock(&ctrl->crit_sect);
/* turn off slot, turn on Amber LED, turn off Green LED if supported*/ /* turn off slot, turn on Amber LED, turn off Green LED if supported*/
if (POWER_CTRL(ctrl->ctrlcap)) { if (POWER_CTRL(ctrl->ctrlcap)) {
if (pslot->hpc_ops->power_off_slot(pslot)) { if (pslot->hpc_ops->power_off_slot(pslot)) {
err("%s: Issue of Slot Power Off command failed\n", __FUNCTION__); err("%s: Issue of Slot Power Off command failed\n", __FUNCTION__);
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
return; return;
} }
wait_for_ctrl_irq (ctrl); wait_for_ctrl_irq (ctrl);
...@@ -249,14 +249,14 @@ static void set_slot_off(struct controller *ctrl, struct slot * pslot) ...@@ -249,14 +249,14 @@ static void set_slot_off(struct controller *ctrl, struct slot * pslot)
if (ATTN_LED(ctrl->ctrlcap)) { if (ATTN_LED(ctrl->ctrlcap)) {
if (pslot->hpc_ops->set_attention_status(pslot, 1)) { if (pslot->hpc_ops->set_attention_status(pslot, 1)) {
err("%s: Issue of Set Attention Led command failed\n", __FUNCTION__); err("%s: Issue of Set Attention Led command failed\n", __FUNCTION__);
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
return; return;
} }
wait_for_ctrl_irq (ctrl); wait_for_ctrl_irq (ctrl);
} }
/* Done with exclusive hardware access */ /* Done with exclusive hardware access */
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
} }
/** /**
...@@ -279,13 +279,13 @@ static int board_added(struct slot *p_slot) ...@@ -279,13 +279,13 @@ static int board_added(struct slot *p_slot)
ctrl->slot_device_offset, hp_slot); ctrl->slot_device_offset, hp_slot);
/* Wait for exclusive access to hardware */ /* Wait for exclusive access to hardware */
down(&ctrl->crit_sect); mutex_lock(&ctrl->crit_sect);
if (POWER_CTRL(ctrl->ctrlcap)) { if (POWER_CTRL(ctrl->ctrlcap)) {
/* Power on slot */ /* Power on slot */
rc = p_slot->hpc_ops->power_on_slot(p_slot); rc = p_slot->hpc_ops->power_on_slot(p_slot);
if (rc) { if (rc) {
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
return -1; return -1;
} }
...@@ -301,7 +301,7 @@ static int board_added(struct slot *p_slot) ...@@ -301,7 +301,7 @@ static int board_added(struct slot *p_slot)
} }
/* Done with exclusive hardware access */ /* Done with exclusive hardware access */
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
/* Wait for ~1 second */ /* Wait for ~1 second */
wait_for_ctrl_irq (ctrl); wait_for_ctrl_irq (ctrl);
...@@ -335,7 +335,7 @@ static int board_added(struct slot *p_slot) ...@@ -335,7 +335,7 @@ static int board_added(struct slot *p_slot)
pci_fixup_device(pci_fixup_final, ctrl->pci_dev); pci_fixup_device(pci_fixup_final, ctrl->pci_dev);
if (PWR_LED(ctrl->ctrlcap)) { if (PWR_LED(ctrl->ctrlcap)) {
/* Wait for exclusive access to hardware */ /* Wait for exclusive access to hardware */
down(&ctrl->crit_sect); mutex_lock(&ctrl->crit_sect);
p_slot->hpc_ops->green_led_on(p_slot); p_slot->hpc_ops->green_led_on(p_slot);
...@@ -343,7 +343,7 @@ static int board_added(struct slot *p_slot) ...@@ -343,7 +343,7 @@ static int board_added(struct slot *p_slot)
wait_for_ctrl_irq (ctrl); wait_for_ctrl_irq (ctrl);
/* Done with exclusive hardware access */ /* Done with exclusive hardware access */
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
} }
return 0; return 0;
...@@ -375,14 +375,14 @@ static int remove_board(struct slot *p_slot) ...@@ -375,14 +375,14 @@ static int remove_board(struct slot *p_slot)
dbg("In %s, hp_slot = %d\n", __FUNCTION__, hp_slot); dbg("In %s, hp_slot = %d\n", __FUNCTION__, hp_slot);
/* Wait for exclusive access to hardware */ /* Wait for exclusive access to hardware */
down(&ctrl->crit_sect); mutex_lock(&ctrl->crit_sect);
if (POWER_CTRL(ctrl->ctrlcap)) { if (POWER_CTRL(ctrl->ctrlcap)) {
/* power off slot */ /* power off slot */
rc = p_slot->hpc_ops->power_off_slot(p_slot); rc = p_slot->hpc_ops->power_off_slot(p_slot);
if (rc) { if (rc) {
err("%s: Issue of Slot Disable command failed\n", __FUNCTION__); err("%s: Issue of Slot Disable command failed\n", __FUNCTION__);
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
return rc; return rc;
} }
/* Wait for the command to complete */ /* Wait for the command to complete */
...@@ -398,7 +398,7 @@ static int remove_board(struct slot *p_slot) ...@@ -398,7 +398,7 @@ static int remove_board(struct slot *p_slot)
} }
/* Done with exclusive hardware access */ /* Done with exclusive hardware access */
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
return 0; return 0;
} }
...@@ -445,7 +445,7 @@ static void pciehp_pushbutton_thread(unsigned long slot) ...@@ -445,7 +445,7 @@ static void pciehp_pushbutton_thread(unsigned long slot)
if (pciehp_enable_slot(p_slot) && PWR_LED(p_slot->ctrl->ctrlcap)) { if (pciehp_enable_slot(p_slot) && PWR_LED(p_slot->ctrl->ctrlcap)) {
/* Wait for exclusive access to hardware */ /* Wait for exclusive access to hardware */
down(&p_slot->ctrl->crit_sect); mutex_lock(&p_slot->ctrl->crit_sect);
p_slot->hpc_ops->green_led_off(p_slot); p_slot->hpc_ops->green_led_off(p_slot);
...@@ -453,7 +453,7 @@ static void pciehp_pushbutton_thread(unsigned long slot) ...@@ -453,7 +453,7 @@ static void pciehp_pushbutton_thread(unsigned long slot)
wait_for_ctrl_irq (p_slot->ctrl); wait_for_ctrl_irq (p_slot->ctrl);
/* Done with exclusive hardware access */ /* Done with exclusive hardware access */
up(&p_slot->ctrl->crit_sect); mutex_unlock(&p_slot->ctrl->crit_sect);
} }
p_slot->state = STATIC_STATE; p_slot->state = STATIC_STATE;
} }
...@@ -495,7 +495,7 @@ static void pciehp_surprise_rm_thread(unsigned long slot) ...@@ -495,7 +495,7 @@ static void pciehp_surprise_rm_thread(unsigned long slot)
if (pciehp_enable_slot(p_slot) && PWR_LED(p_slot->ctrl->ctrlcap)) { if (pciehp_enable_slot(p_slot) && PWR_LED(p_slot->ctrl->ctrlcap)) {
/* Wait for exclusive access to hardware */ /* Wait for exclusive access to hardware */
down(&p_slot->ctrl->crit_sect); mutex_lock(&p_slot->ctrl->crit_sect);
p_slot->hpc_ops->green_led_off(p_slot); p_slot->hpc_ops->green_led_off(p_slot);
...@@ -503,7 +503,7 @@ static void pciehp_surprise_rm_thread(unsigned long slot) ...@@ -503,7 +503,7 @@ static void pciehp_surprise_rm_thread(unsigned long slot)
wait_for_ctrl_irq (p_slot->ctrl); wait_for_ctrl_irq (p_slot->ctrl);
/* Done with exclusive hardware access */ /* Done with exclusive hardware access */
up(&p_slot->ctrl->crit_sect); mutex_unlock(&p_slot->ctrl->crit_sect);
} }
p_slot->state = STATIC_STATE; p_slot->state = STATIC_STATE;
} }
...@@ -616,7 +616,7 @@ static void interrupt_event_handler(struct controller *ctrl) ...@@ -616,7 +616,7 @@ static void interrupt_event_handler(struct controller *ctrl)
switch (p_slot->state) { switch (p_slot->state) {
case BLINKINGOFF_STATE: case BLINKINGOFF_STATE:
/* Wait for exclusive access to hardware */ /* Wait for exclusive access to hardware */
down(&ctrl->crit_sect); mutex_lock(&ctrl->crit_sect);
if (PWR_LED(ctrl->ctrlcap)) { if (PWR_LED(ctrl->ctrlcap)) {
p_slot->hpc_ops->green_led_on(p_slot); p_slot->hpc_ops->green_led_on(p_slot);
...@@ -630,11 +630,11 @@ static void interrupt_event_handler(struct controller *ctrl) ...@@ -630,11 +630,11 @@ static void interrupt_event_handler(struct controller *ctrl)
wait_for_ctrl_irq (ctrl); wait_for_ctrl_irq (ctrl);
} }
/* Done with exclusive hardware access */ /* Done with exclusive hardware access */
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
break; break;
case BLINKINGON_STATE: case BLINKINGON_STATE:
/* Wait for exclusive access to hardware */ /* Wait for exclusive access to hardware */
down(&ctrl->crit_sect); mutex_lock(&ctrl->crit_sect);
if (PWR_LED(ctrl->ctrlcap)) { if (PWR_LED(ctrl->ctrlcap)) {
p_slot->hpc_ops->green_led_off(p_slot); p_slot->hpc_ops->green_led_off(p_slot);
...@@ -647,7 +647,7 @@ static void interrupt_event_handler(struct controller *ctrl) ...@@ -647,7 +647,7 @@ static void interrupt_event_handler(struct controller *ctrl)
wait_for_ctrl_irq (ctrl); wait_for_ctrl_irq (ctrl);
} }
/* Done with exclusive hardware access */ /* Done with exclusive hardware access */
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
break; break;
default: default:
...@@ -676,7 +676,7 @@ static void interrupt_event_handler(struct controller *ctrl) ...@@ -676,7 +676,7 @@ static void interrupt_event_handler(struct controller *ctrl)
} }
/* Wait for exclusive access to hardware */ /* Wait for exclusive access to hardware */
down(&ctrl->crit_sect); mutex_lock(&ctrl->crit_sect);
/* blink green LED and turn off amber */ /* blink green LED and turn off amber */
if (PWR_LED(ctrl->ctrlcap)) { if (PWR_LED(ctrl->ctrlcap)) {
...@@ -693,7 +693,7 @@ static void interrupt_event_handler(struct controller *ctrl) ...@@ -693,7 +693,7 @@ static void interrupt_event_handler(struct controller *ctrl)
} }
/* Done with exclusive hardware access */ /* Done with exclusive hardware access */
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
init_timer(&p_slot->task_event); init_timer(&p_slot->task_event);
p_slot->task_event.expires = jiffies + 5 * HZ; /* 5 second delay */ p_slot->task_event.expires = jiffies + 5 * HZ; /* 5 second delay */
...@@ -708,7 +708,7 @@ static void interrupt_event_handler(struct controller *ctrl) ...@@ -708,7 +708,7 @@ static void interrupt_event_handler(struct controller *ctrl)
if (POWER_CTRL(ctrl->ctrlcap)) { if (POWER_CTRL(ctrl->ctrlcap)) {
dbg("power fault\n"); dbg("power fault\n");
/* Wait for exclusive access to hardware */ /* Wait for exclusive access to hardware */
down(&ctrl->crit_sect); mutex_lock(&ctrl->crit_sect);
if (ATTN_LED(ctrl->ctrlcap)) { if (ATTN_LED(ctrl->ctrlcap)) {
p_slot->hpc_ops->set_attention_status(p_slot, 1); p_slot->hpc_ops->set_attention_status(p_slot, 1);
...@@ -721,7 +721,7 @@ static void interrupt_event_handler(struct controller *ctrl) ...@@ -721,7 +721,7 @@ static void interrupt_event_handler(struct controller *ctrl)
} }
/* Done with exclusive hardware access */ /* Done with exclusive hardware access */
up(&ctrl->crit_sect); mutex_unlock(&ctrl->crit_sect);
} }
} }
/***********SURPRISE REMOVAL********************/ /***********SURPRISE REMOVAL********************/
...@@ -756,19 +756,19 @@ int pciehp_enable_slot(struct slot *p_slot) ...@@ -756,19 +756,19 @@ int pciehp_enable_slot(struct slot *p_slot)
int rc; int rc;
/* Check to see if (latch closed, card present, power off) */ /* Check to see if (latch closed, card present, power off) */
down(&p_slot->ctrl->crit_sect); mutex_lock(&p_slot->ctrl->crit_sect);
rc = p_slot->hpc_ops->get_adapter_status(p_slot, &getstatus); rc = p_slot->hpc_ops->get_adapter_status(p_slot, &getstatus);
if (rc || !getstatus) { if (rc || !getstatus) {
info("%s: no adapter on slot(%x)\n", __FUNCTION__, p_slot->number); info("%s: no adapter on slot(%x)\n", __FUNCTION__, p_slot->number);
up(&p_slot->ctrl->crit_sect); mutex_unlock(&p_slot->ctrl->crit_sect);
return 1; return 1;
} }
if (MRL_SENS(p_slot->ctrl->ctrlcap)) { if (MRL_SENS(p_slot->ctrl->ctrlcap)) {
rc = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); rc = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus);
if (rc || getstatus) { if (rc || getstatus) {
info("%s: latch open on slot(%x)\n", __FUNCTION__, p_slot->number); info("%s: latch open on slot(%x)\n", __FUNCTION__, p_slot->number);
up(&p_slot->ctrl->crit_sect); mutex_unlock(&p_slot->ctrl->crit_sect);
return 1; return 1;
} }
} }
...@@ -777,11 +777,11 @@ int pciehp_enable_slot(struct slot *p_slot) ...@@ -777,11 +777,11 @@ int pciehp_enable_slot(struct slot *p_slot)
rc = p_slot->hpc_ops->get_power_status(p_slot, &getstatus); rc = p_slot->hpc_ops->get_power_status(p_slot, &getstatus);
if (rc || getstatus) { if (rc || getstatus) {
info("%s: already enabled on slot(%x)\n", __FUNCTION__, p_slot->number); info("%s: already enabled on slot(%x)\n", __FUNCTION__, p_slot->number);
up(&p_slot->ctrl->crit_sect); mutex_unlock(&p_slot->ctrl->crit_sect);
return 1; return 1;
} }
} }
up(&p_slot->ctrl->crit_sect); mutex_unlock(&p_slot->ctrl->crit_sect);
p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); p_slot->hpc_ops->get_latch_status(p_slot, &getstatus);
...@@ -806,13 +806,13 @@ int pciehp_disable_slot(struct slot *p_slot) ...@@ -806,13 +806,13 @@ int pciehp_disable_slot(struct slot *p_slot)
return 1; return 1;
/* Check to see if (latch closed, card present, power on) */ /* Check to see if (latch closed, card present, power on) */
down(&p_slot->ctrl->crit_sect); mutex_lock(&p_slot->ctrl->crit_sect);
if (!HP_SUPR_RM(p_slot->ctrl->ctrlcap)) { if (!HP_SUPR_RM(p_slot->ctrl->ctrlcap)) {
ret = p_slot->hpc_ops->get_adapter_status(p_slot, &getstatus); ret = p_slot->hpc_ops->get_adapter_status(p_slot, &getstatus);
if (ret || !getstatus) { if (ret || !getstatus) {
info("%s: no adapter on slot(%x)\n", __FUNCTION__, p_slot->number); info("%s: no adapter on slot(%x)\n", __FUNCTION__, p_slot->number);
up(&p_slot->ctrl->crit_sect); mutex_unlock(&p_slot->ctrl->crit_sect);
return 1; return 1;
} }
} }
...@@ -821,7 +821,7 @@ int pciehp_disable_slot(struct slot *p_slot) ...@@ -821,7 +821,7 @@ int pciehp_disable_slot(struct slot *p_slot)
ret = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus); ret = p_slot->hpc_ops->get_latch_status(p_slot, &getstatus);
if (ret || getstatus) { if (ret || getstatus) {
info("%s: latch open on slot(%x)\n", __FUNCTION__, p_slot->number); info("%s: latch open on slot(%x)\n", __FUNCTION__, p_slot->number);
up(&p_slot->ctrl->crit_sect); mutex_unlock(&p_slot->ctrl->crit_sect);
return 1; return 1;
} }
} }
...@@ -830,12 +830,12 @@ int pciehp_disable_slot(struct slot *p_slot) ...@@ -830,12 +830,12 @@ int pciehp_disable_slot(struct slot *p_slot)
ret = p_slot->hpc_ops->get_power_status(p_slot, &getstatus); ret = p_slot->hpc_ops->get_power_status(p_slot, &getstatus);
if (ret || !getstatus) { if (ret || !getstatus) {
info("%s: already disabled slot(%x)\n", __FUNCTION__, p_slot->number); info("%s: already disabled slot(%x)\n", __FUNCTION__, p_slot->number);
up(&p_slot->ctrl->crit_sect); mutex_unlock(&p_slot->ctrl->crit_sect);
return 1; return 1;
} }
} }
up(&p_slot->ctrl->crit_sect); mutex_unlock(&p_slot->ctrl->crit_sect);
ret = remove_board(p_slot); ret = remove_board(p_slot);
update_slot_info(p_slot); update_slot_info(p_slot);
......
...@@ -1334,7 +1334,7 @@ int pcie_init(struct controller * ctrl, struct pcie_device *dev) ...@@ -1334,7 +1334,7 @@ int pcie_init(struct controller * ctrl, struct pcie_device *dev)
if (pci_enable_device(pdev)) if (pci_enable_device(pdev))
goto abort_free_ctlr; goto abort_free_ctlr;
init_MUTEX(&ctrl->crit_sect); mutex_init(&ctrl->crit_sect);
/* setup wait queue */ /* setup wait queue */
init_waitqueue_head(&ctrl->queue); init_waitqueue_head(&ctrl->queue);
......
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#include <linux/pci.h> #include <linux/pci.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <linux/sched.h> /* signal_pending(), struct timer_list */ #include <linux/sched.h> /* signal_pending(), struct timer_list */
#include <linux/mutex.h>
#include "pci_hotplug.h" #include "pci_hotplug.h"
...@@ -79,7 +80,7 @@ struct event_info { ...@@ -79,7 +80,7 @@ struct event_info {
struct controller { struct controller {
struct controller *next; struct controller *next;
struct semaphore crit_sect; /* critical section semaphore */ struct mutex crit_sect; /* critical section mutex */
struct php_ctlr_state_s *hpc_ctlr_handle; /* HPC controller handle */ struct php_ctlr_state_s *hpc_ctlr_handle; /* HPC controller handle */
int num_slots; /* Number of slots on ctlr */ int num_slots; /* Number of slots on ctlr */
int slot_num_inc; /* 1 or -1 */ int slot_num_inc; /* 1 or -1 */
......
This diff is collapsed.
...@@ -1454,7 +1454,7 @@ int shpc_init(struct controller * ctrl, struct pci_dev * pdev) ...@@ -1454,7 +1454,7 @@ int shpc_init(struct controller * ctrl, struct pci_dev * pdev)
} }
dbg("%s: php_ctlr->creg %p\n", __FUNCTION__, php_ctlr->creg); dbg("%s: php_ctlr->creg %p\n", __FUNCTION__, php_ctlr->creg);
init_MUTEX(&ctrl->crit_sect); mutex_init(&ctrl->crit_sect);
/* Setup wait queue */ /* Setup wait queue */
init_waitqueue_head(&ctrl->queue); init_waitqueue_head(&ctrl->queue);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment