Changeset c8d5bed in rtems


Ignore:
Timestamp:
Jan 2, 2018, 3:31:08 PM (19 months ago)
Author:
Sebastian Huber <sebastian.huber@…>
Branches:
master
Children:
f9027ccf
Parents:
e16111b2
git-author:
Sebastian Huber <sebastian.huber@…> (01/02/18 15:31:08)
git-committer:
Sebastian Huber <sebastian.huber@…> (02/07/18 07:58:29)
Message:

libblock: Use self-contained mutex for nvdisk

Update #2843.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • cpukit/libblock/src/nvdisk.c

    re16111b2 rc8d5bed  
    2626#include <inttypes.h>
    2727
    28 #include "rtems/blkdev.h"
    29 #include "rtems/diskdevs.h"
    30 #include "rtems/nvdisk.h"
     28#include <rtems/blkdev.h>
     29#include <rtems/diskdevs.h>
     30#include <rtems/nvdisk.h>
     31#include <rtems/thread.h>
    3132
    3233/**
     
    103104  uint32_t                  device_count; /**< The number of NV devices. */
    104105  uint32_t                  cs_pages;     /**< The num of pages of checksums. */
    105   rtems_id                  lock;         /**< Mutex for threading protection.*/
     106  rtems_mutex               lock;         /**< Mutex for threading protection.*/
    106107  uint32_t info_level;                    /**< The info trace level. */
    107108} rtems_nvdisk;
     
    691692  rtems_device_minor_number minor = rtems_filesystem_dev_minor_t (dev);
    692693  rtems_blkdev_request*     r = argp;
    693   rtems_status_code         sc;
    694694
    695695  if (minor >= rtems_nvdisk_count)
     
    707707  errno = 0;
    708708
    709   sc = rtems_semaphore_obtain (rtems_nvdisks[minor].lock, RTEMS_WAIT, 0);
    710   if (sc != RTEMS_SUCCESSFUL)
    711     errno = EIO;
    712   else
    713   {
    714     errno = 0;
    715     switch (req)
    716     {
    717       case RTEMS_BLKIO_REQUEST:
    718         switch (r->req)
    719         {
    720           case RTEMS_BLKDEV_REQ_READ:
    721             errno = rtems_nvdisk_read (&rtems_nvdisks[minor], r);
    722             break;
    723 
    724           case RTEMS_BLKDEV_REQ_WRITE:
    725             errno = rtems_nvdisk_write (&rtems_nvdisks[minor], r);
    726             break;
    727 
    728           default:
    729             errno = EINVAL;
    730             break;
    731         }
    732         break;
    733 
    734       case RTEMS_NVDISK_IOCTL_ERASE_DISK:
    735         errno = rtems_nvdisk_erase_disk (&rtems_nvdisks[minor]);
    736         break;
    737 
    738       case RTEMS_NVDISK_IOCTL_INFO_LEVEL:
    739         rtems_nvdisks[minor].info_level = (uintptr_t) argp;
    740         break;
    741 
    742       default:
    743         rtems_blkdev_ioctl (dd, req, argp);
    744         break;
    745     }
    746 
    747     sc = rtems_semaphore_release (rtems_nvdisks[minor].lock);
    748     if (sc != RTEMS_SUCCESSFUL)
    749       errno = EIO;
    750   }
     709  rtems_mutex_lock (&rtems_nvdisks[minor].lock);
     710
     711  switch (req)
     712  {
     713    case RTEMS_BLKIO_REQUEST:
     714      switch (r->req)
     715      {
     716        case RTEMS_BLKDEV_REQ_READ:
     717          errno = rtems_nvdisk_read (&rtems_nvdisks[minor], r);
     718          break;
     719
     720        case RTEMS_BLKDEV_REQ_WRITE:
     721          errno = rtems_nvdisk_write (&rtems_nvdisks[minor], r);
     722          break;
     723
     724        default:
     725          errno = EINVAL;
     726          break;
     727      }
     728      break;
     729
     730    case RTEMS_NVDISK_IOCTL_ERASE_DISK:
     731      errno = rtems_nvdisk_erase_disk (&rtems_nvdisks[minor]);
     732      break;
     733
     734    case RTEMS_NVDISK_IOCTL_INFO_LEVEL:
     735      rtems_nvdisks[minor].info_level = (uintptr_t) argp;
     736      break;
     737
     738    default:
     739      rtems_blkdev_ioctl (dd, req, argp);
     740      break;
     741  }
     742
     743  rtems_mutex_unlock (&rtems_nvdisks[minor].lock);
    751744
    752745  return errno == 0 ? 0 : -1;
     
    831824    }
    832825
    833     sc = rtems_semaphore_create (rtems_build_name ('N', 'V', 'D', 'K'), 1,
    834                                  RTEMS_PRIORITY | RTEMS_BINARY_SEMAPHORE |
    835                                  RTEMS_INHERIT_PRIORITY, 0, &nvd->lock);
    836     if (sc != RTEMS_SUCCESSFUL)
    837     {
    838       rtems_nvdisk_error ("disk lock create failed");
    839       return sc;
    840     }
     826    rtems_mutex_init (&nvd->lock, "NV Disk");
    841827  }
    842828
Note: See TracChangeset for help on using the changeset viewer.