* [PATCH] pci: ibmphp_hpc: turn semaphores into completions or mutexes
@ 2018-12-10 21:49 Arnd Bergmann
2019-01-29 23:16 ` Bjorn Helgaas
0 siblings, 1 reply; 2+ messages in thread
From: Arnd Bergmann @ 2018-12-10 21:49 UTC (permalink / raw)
To: Bjorn Helgaas
Cc: Arnd Bergmann, Rafael J. Wysocki, Lukas Wunner, Andy Shevchenko,
Tyrel Datwyler, linux-pci, linux-kernel
The sem_exit variable is conceptually a completion, so it should
be called that.
Similarly, the semOperations semaphore is a simple mutex, and
can be changed into that, respectively.
With both converted, the ibmphp_hpc_initvars() function is no longer
used and can be removed.
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
drivers/pci/hotplug/ibmphp.h | 1 -
drivers/pci/hotplug/ibmphp_core.c | 2 --
drivers/pci/hotplug/ibmphp_hpc.c | 47 +++++++++----------------------
3 files changed, 14 insertions(+), 36 deletions(-)
diff --git a/drivers/pci/hotplug/ibmphp.h b/drivers/pci/hotplug/ibmphp.h
index b89f850c3a4e..e90a4ebf6550 100644
--- a/drivers/pci/hotplug/ibmphp.h
+++ b/drivers/pci/hotplug/ibmphp.h
@@ -378,7 +378,6 @@ int ibmphp_add_pfmem_from_mem(struct resource_node *);
struct bus_node *ibmphp_find_res_bus(u8);
void ibmphp_print_test(void); /* for debugging purposes */
-void ibmphp_hpc_initvars(void);
int ibmphp_hpc_readslot(struct slot *, u8, u8 *);
int ibmphp_hpc_writeslot(struct slot *, u8);
void ibmphp_lock_operations(void);
diff --git a/drivers/pci/hotplug/ibmphp_core.c b/drivers/pci/hotplug/ibmphp_core.c
index 5752b57198e3..e04b17d81e38 100644
--- a/drivers/pci/hotplug/ibmphp_core.c
+++ b/drivers/pci/hotplug/ibmphp_core.c
@@ -1312,8 +1312,6 @@ static int __init ibmphp_init(void)
ibmphp_debug = debug;
- ibmphp_hpc_initvars();
-
for (i = 0; i < 16; i++)
irqs[i] = 0;
diff --git a/drivers/pci/hotplug/ibmphp_hpc.c b/drivers/pci/hotplug/ibmphp_hpc.c
index 752c384cbd4c..508a62a6b5f9 100644
--- a/drivers/pci/hotplug/ibmphp_hpc.c
+++ b/drivers/pci/hotplug/ibmphp_hpc.c
@@ -15,13 +15,13 @@
#include <linux/wait.h>
#include <linux/time.h>
+#include <linux/completion.h>
#include <linux/delay.h>
#include <linux/module.h>
#include <linux/pci.h>
#include <linux/init.h>
#include <linux/mutex.h>
#include <linux/sched.h>
-#include <linux/semaphore.h>
#include <linux/kthread.h>
#include "ibmphp.h"
@@ -88,10 +88,10 @@ static int to_debug = 0;
//----------------------------------------------------------------------------
// global variables
//----------------------------------------------------------------------------
-static struct mutex sem_hpcaccess; // lock access to HPC
-static struct semaphore semOperations; // lock all operations and
+static DEFINE_MUTEX(sem_hpcaccess); // lock access to HPC
+static DEFINE_MUTEX(operations_mutex); // lock all operations and
// access to data structures
-static struct semaphore sem_exit; // make sure polling thread goes away
+static DECLARE_COMPLETION(exit_complete); // make sure polling thread goes away
static struct task_struct *ibmphp_poll_thread;
//----------------------------------------------------------------------------
// local function prototypes
@@ -109,23 +109,6 @@ static int hpc_wait_ctlr_notworking(int, struct controller *, void __iomem *, u8
//----------------------------------------------------------------------------
-/*----------------------------------------------------------------------
-* Name: ibmphp_hpc_initvars
-*
-* Action: initialize semaphores and variables
-*---------------------------------------------------------------------*/
-void __init ibmphp_hpc_initvars(void)
-{
- debug("%s - Entry\n", __func__);
-
- mutex_init(&sem_hpcaccess);
- sema_init(&semOperations, 1);
- sema_init(&sem_exit, 0);
- to_debug = 0;
-
- debug("%s - Exit\n", __func__);
-}
-
/*----------------------------------------------------------------------
* Name: i2c_ctrl_read
*
@@ -780,7 +763,7 @@ void free_hpc_access(void)
*---------------------------------------------------------------------*/
void ibmphp_lock_operations(void)
{
- down(&semOperations);
+ mutex_lock(&operations_mutex);
to_debug = 1;
}
@@ -790,7 +773,7 @@ void ibmphp_lock_operations(void)
void ibmphp_unlock_operations(void)
{
debug("%s - Entry\n", __func__);
- up(&semOperations);
+ mutex_unlock(&operations_mutex);
to_debug = 0;
debug("%s - Exit\n", __func__);
}
@@ -816,7 +799,7 @@ static int poll_hpc(void *data)
while (!kthread_should_stop()) {
/* try to get the lock to do some kind of hardware access */
- down(&semOperations);
+ mutex_lock(&operations_mutex);
switch (poll_state) {
case POLL_LATCH_REGISTER:
@@ -871,13 +854,13 @@ static int poll_hpc(void *data)
break;
case POLL_SLEEP:
/* don't sleep with a lock on the hardware */
- up(&semOperations);
+ mutex_unlock(&operations_mutex);
msleep(POLL_INTERVAL_SEC * 1000);
if (kthread_should_stop())
goto out_sleep;
- down(&semOperations);
+ mutex_lock(&operations_mutex);
if (poll_count >= POLL_LATCH_CNT) {
poll_count = 0;
@@ -887,12 +870,12 @@ static int poll_hpc(void *data)
break;
}
/* give up the hardware semaphore */
- up(&semOperations);
+ mutex_unlock(&operations_mutex);
/* sleep for a short time just for good measure */
out_sleep:
msleep(100);
}
- up(&sem_exit);
+ complete(&exit_complete);
debug("%s - Exit\n", __func__);
return 0;
}
@@ -1060,9 +1043,9 @@ void __exit ibmphp_hpc_stop_poll_thread(void)
debug("after locking operations\n");
// wait for poll thread to exit
- debug("before sem_exit down\n");
- down(&sem_exit);
- debug("after sem_exit down\n");
+ debug("before exit_complete down\n");
+ wait_for_completion(&exit_complete);
+ debug("after exit_completion down\n");
// cleanup
debug("before free_hpc_access\n");
@@ -1070,8 +1053,6 @@ void __exit ibmphp_hpc_stop_poll_thread(void)
debug("after free_hpc_access\n");
ibmphp_unlock_operations();
debug("after unlock operations\n");
- up(&sem_exit);
- debug("after sem exit up\n");
debug("%s - Exit\n", __func__);
}
--
2.20.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] pci: ibmphp_hpc: turn semaphores into completions or mutexes
2018-12-10 21:49 [PATCH] pci: ibmphp_hpc: turn semaphores into completions or mutexes Arnd Bergmann
@ 2019-01-29 23:16 ` Bjorn Helgaas
0 siblings, 0 replies; 2+ messages in thread
From: Bjorn Helgaas @ 2019-01-29 23:16 UTC (permalink / raw)
To: Arnd Bergmann
Cc: Rafael J. Wysocki, Lukas Wunner, Andy Shevchenko, Tyrel Datwyler,
linux-pci, linux-kernel
On Mon, Dec 10, 2018 at 10:49:10PM +0100, Arnd Bergmann wrote:
> The sem_exit variable is conceptually a completion, so it should
> be called that.
>
> Similarly, the semOperations semaphore is a simple mutex, and
> can be changed into that, respectively.
>
> With both converted, the ibmphp_hpc_initvars() function is no longer
> used and can be removed.
>
> Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Applied to pci/hotplug for v5.1, thanks!
> ---
> drivers/pci/hotplug/ibmphp.h | 1 -
> drivers/pci/hotplug/ibmphp_core.c | 2 --
> drivers/pci/hotplug/ibmphp_hpc.c | 47 +++++++++----------------------
> 3 files changed, 14 insertions(+), 36 deletions(-)
>
> diff --git a/drivers/pci/hotplug/ibmphp.h b/drivers/pci/hotplug/ibmphp.h
> index b89f850c3a4e..e90a4ebf6550 100644
> --- a/drivers/pci/hotplug/ibmphp.h
> +++ b/drivers/pci/hotplug/ibmphp.h
> @@ -378,7 +378,6 @@ int ibmphp_add_pfmem_from_mem(struct resource_node *);
> struct bus_node *ibmphp_find_res_bus(u8);
> void ibmphp_print_test(void); /* for debugging purposes */
>
> -void ibmphp_hpc_initvars(void);
> int ibmphp_hpc_readslot(struct slot *, u8, u8 *);
> int ibmphp_hpc_writeslot(struct slot *, u8);
> void ibmphp_lock_operations(void);
> diff --git a/drivers/pci/hotplug/ibmphp_core.c b/drivers/pci/hotplug/ibmphp_core.c
> index 5752b57198e3..e04b17d81e38 100644
> --- a/drivers/pci/hotplug/ibmphp_core.c
> +++ b/drivers/pci/hotplug/ibmphp_core.c
> @@ -1312,8 +1312,6 @@ static int __init ibmphp_init(void)
>
> ibmphp_debug = debug;
>
> - ibmphp_hpc_initvars();
> -
> for (i = 0; i < 16; i++)
> irqs[i] = 0;
>
> diff --git a/drivers/pci/hotplug/ibmphp_hpc.c b/drivers/pci/hotplug/ibmphp_hpc.c
> index 752c384cbd4c..508a62a6b5f9 100644
> --- a/drivers/pci/hotplug/ibmphp_hpc.c
> +++ b/drivers/pci/hotplug/ibmphp_hpc.c
> @@ -15,13 +15,13 @@
>
> #include <linux/wait.h>
> #include <linux/time.h>
> +#include <linux/completion.h>
> #include <linux/delay.h>
> #include <linux/module.h>
> #include <linux/pci.h>
> #include <linux/init.h>
> #include <linux/mutex.h>
> #include <linux/sched.h>
> -#include <linux/semaphore.h>
> #include <linux/kthread.h>
> #include "ibmphp.h"
>
> @@ -88,10 +88,10 @@ static int to_debug = 0;
> //----------------------------------------------------------------------------
> // global variables
> //----------------------------------------------------------------------------
> -static struct mutex sem_hpcaccess; // lock access to HPC
> -static struct semaphore semOperations; // lock all operations and
> +static DEFINE_MUTEX(sem_hpcaccess); // lock access to HPC
> +static DEFINE_MUTEX(operations_mutex); // lock all operations and
> // access to data structures
> -static struct semaphore sem_exit; // make sure polling thread goes away
> +static DECLARE_COMPLETION(exit_complete); // make sure polling thread goes away
> static struct task_struct *ibmphp_poll_thread;
> //----------------------------------------------------------------------------
> // local function prototypes
> @@ -109,23 +109,6 @@ static int hpc_wait_ctlr_notworking(int, struct controller *, void __iomem *, u8
> //----------------------------------------------------------------------------
>
>
> -/*----------------------------------------------------------------------
> -* Name: ibmphp_hpc_initvars
> -*
> -* Action: initialize semaphores and variables
> -*---------------------------------------------------------------------*/
> -void __init ibmphp_hpc_initvars(void)
> -{
> - debug("%s - Entry\n", __func__);
> -
> - mutex_init(&sem_hpcaccess);
> - sema_init(&semOperations, 1);
> - sema_init(&sem_exit, 0);
> - to_debug = 0;
> -
> - debug("%s - Exit\n", __func__);
> -}
> -
> /*----------------------------------------------------------------------
> * Name: i2c_ctrl_read
> *
> @@ -780,7 +763,7 @@ void free_hpc_access(void)
> *---------------------------------------------------------------------*/
> void ibmphp_lock_operations(void)
> {
> - down(&semOperations);
> + mutex_lock(&operations_mutex);
> to_debug = 1;
> }
>
> @@ -790,7 +773,7 @@ void ibmphp_lock_operations(void)
> void ibmphp_unlock_operations(void)
> {
> debug("%s - Entry\n", __func__);
> - up(&semOperations);
> + mutex_unlock(&operations_mutex);
> to_debug = 0;
> debug("%s - Exit\n", __func__);
> }
> @@ -816,7 +799,7 @@ static int poll_hpc(void *data)
>
> while (!kthread_should_stop()) {
> /* try to get the lock to do some kind of hardware access */
> - down(&semOperations);
> + mutex_lock(&operations_mutex);
>
> switch (poll_state) {
> case POLL_LATCH_REGISTER:
> @@ -871,13 +854,13 @@ static int poll_hpc(void *data)
> break;
> case POLL_SLEEP:
> /* don't sleep with a lock on the hardware */
> - up(&semOperations);
> + mutex_unlock(&operations_mutex);
> msleep(POLL_INTERVAL_SEC * 1000);
>
> if (kthread_should_stop())
> goto out_sleep;
>
> - down(&semOperations);
> + mutex_lock(&operations_mutex);
>
> if (poll_count >= POLL_LATCH_CNT) {
> poll_count = 0;
> @@ -887,12 +870,12 @@ static int poll_hpc(void *data)
> break;
> }
> /* give up the hardware semaphore */
> - up(&semOperations);
> + mutex_unlock(&operations_mutex);
> /* sleep for a short time just for good measure */
> out_sleep:
> msleep(100);
> }
> - up(&sem_exit);
> + complete(&exit_complete);
> debug("%s - Exit\n", __func__);
> return 0;
> }
> @@ -1060,9 +1043,9 @@ void __exit ibmphp_hpc_stop_poll_thread(void)
> debug("after locking operations\n");
>
> // wait for poll thread to exit
> - debug("before sem_exit down\n");
> - down(&sem_exit);
> - debug("after sem_exit down\n");
> + debug("before exit_complete down\n");
> + wait_for_completion(&exit_complete);
> + debug("after exit_completion down\n");
>
> // cleanup
> debug("before free_hpc_access\n");
> @@ -1070,8 +1053,6 @@ void __exit ibmphp_hpc_stop_poll_thread(void)
> debug("after free_hpc_access\n");
> ibmphp_unlock_operations();
> debug("after unlock operations\n");
> - up(&sem_exit);
> - debug("after sem exit up\n");
>
> debug("%s - Exit\n", __func__);
> }
> --
> 2.20.0
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2019-01-29 23:17 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-12-10 21:49 [PATCH] pci: ibmphp_hpc: turn semaphores into completions or mutexes Arnd Bergmann
2019-01-29 23:16 ` Bjorn Helgaas
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).