#include <linux/kernel.h>
#include <linux/interrupt.h>
#include <linux/module.h>
+#include <linux/mutex.h>
#include <asm/sn/intr.h>
#include <asm/sn/sn_sal.h>
#include <asm/sn/xp.h>
registration = &xpc_registrations[ch_number];
- if (down_interruptible(®istration->sema) != 0) {
+ if (mutex_lock_interruptible(®istration->mutex) != 0) {
return xpcInterrupted;
}
/* if XPC_CHANNEL_REGISTERED(ch_number) */
if (registration->func != NULL) {
- up(®istration->sema);
+ mutex_unlock(®istration->mutex);
return xpcAlreadyRegistered;
}
registration->key = key;
registration->func = func;
- up(®istration->sema);
+ mutex_unlock(®istration->mutex);
xpc_interface.connect(ch_number);
* figured XPC's users will just turn around and call xpc_disconnect()
* again anyways, so we might as well wait, if need be.
*/
- down(®istration->sema);
+ mutex_lock(®istration->mutex);
/* if !XPC_CHANNEL_REGISTERED(ch_number) */
if (registration->func == NULL) {
- up(®istration->sema);
+ mutex_unlock(®istration->mutex);
return;
}
xpc_interface.disconnect(ch_number);
- up(®istration->sema);
+ mutex_unlock(®istration->mutex);
return;
}
xp_nofault_PIOR_target = SH1_IPI_ACCESS;
}
- /* initialize the connection registration semaphores */
+ /* initialize the connection registration mutex */
for (ch_number = 0; ch_number < XPC_NCHANNELS; ch_number++) {
- sema_init(&xpc_registrations[ch_number].sema, 1); /* mutex */
+ mutex_init(&xpc_registrations[ch_number].mutex);
}
return 0;