#include <linux/moduleparam.h>
 #include <linux/device.h>
 #include <linux/poll.h>
+#include <linux/mutex.h>
 
 #include <asm/uaccess.h>
-#include <asm/semaphore.h>
 #include <asm/atomic.h>
 #include <asm/ebcdic.h>
 
  * to transfer in a readbuffer, which is protected by the readbuffer_mutex.
  */
 static char readbuffer[PAGE_SIZE];
-static DECLARE_MUTEX(readbuffer_mutex);
+static DEFINE_MUTEX(readbuffer_mutex);
 
 static int dasd_eer_open(struct inode *inp, struct file *filp)
 {
        struct eerbuffer *eerb;
 
        eerb = (struct eerbuffer *) filp->private_data;
-       if (down_interruptible(&readbuffer_mutex))
+       if (mutex_lock_interruptible(&readbuffer_mutex))
                return -ERESTARTSYS;
 
        spin_lock_irqsave(&bufferlock, flags);
                                  /* has been deleted             */
                eerb->residual = 0;
                spin_unlock_irqrestore(&bufferlock, flags);
-               up(&readbuffer_mutex);
+               mutex_unlock(&readbuffer_mutex);
                return -EIO;
        } else if (eerb->residual > 0) {
                /* OK we still have a second half of a record to deliver */
                        if (!tc) {
                                /* no data available */
                                spin_unlock_irqrestore(&bufferlock, flags);
-                               up(&readbuffer_mutex);
+                               mutex_unlock(&readbuffer_mutex);
                                if (filp->f_flags & O_NONBLOCK)
                                        return -EAGAIN;
                                rc = wait_event_interruptible(
                                        eerb->head != eerb->tail);
                                if (rc)
                                        return rc;
-                               if (down_interruptible(&readbuffer_mutex))
+                               if (mutex_lock_interruptible(&readbuffer_mutex))
                                        return -ERESTARTSYS;
                                spin_lock_irqsave(&bufferlock, flags);
                        }
        spin_unlock_irqrestore(&bufferlock, flags);
 
        if (copy_to_user(buf, readbuffer, effective_count)) {
-               up(&readbuffer_mutex);
+               mutex_unlock(&readbuffer_mutex);
                return -EFAULT;
        }
 
-       up(&readbuffer_mutex);
+       mutex_unlock(&readbuffer_mutex);
        return effective_count;
 }