documentation fixes

Avoid designated initializers for C++ compatibility
Fixed invalid state transition from FRESH to CACHED
Free memory in case of an error.
This commit is contained in:
Thomas Doerfler
2009-11-30 12:39:51 +00:00
parent 91182bc7fd
commit 47c23279bd
5 changed files with 63 additions and 22 deletions

View File

@@ -1,3 +1,12 @@
2009-11-30 Sebastian Huber <sebastian.huber@embedded-brains.de>
* libblock/include/rtems/bdbuf.h: Documentation.
* libblock/include/rtems/blkdev.h: Avoid designated initializers for
C++ compatibility.
* libblock/src/bdbuf.c: Fixed invalid state transition from FRESH to
CACHED.
* libblock/src/ide_part_table.c: Free memory in case of an error.
2009-11-30 Sebastian Huber <sebastian.huber@embedded-brains.de> 2009-11-30 Sebastian Huber <sebastian.huber@embedded-brains.de>
* rtems/include/rtems/rtems/timer.h: Added timer server control block * rtems/include/rtems/rtems/timer.h: Added timer server control block

View File

@@ -79,6 +79,7 @@ extern "C" {
* *
* @dot * @dot
* digraph state { * digraph state {
* size="16,8";
* e [label="EMPTY",style="filled",fillcolor="aquamarine"]; * e [label="EMPTY",style="filled",fillcolor="aquamarine"];
* f [label="FRESH",style="filled",fillcolor="seagreen"]; * f [label="FRESH",style="filled",fillcolor="seagreen"];
* c [label="CACHED",style="filled",fillcolor="chartreuse"]; * c [label="CACHED",style="filled",fillcolor="chartreuse"];
@@ -159,47 +160,73 @@ extern "C" {
*/ */
/** /**
* State of a buffer of the cache. * @brief State of a buffer of the cache.
*
* The state has several implications. Depending on the state a buffer can be
* in the AVL tree, in a list, in use by an entity and a group user or not.
*/ */
typedef enum typedef enum
{ {
/** /**
* Not in the cache. Not in a list. Not in use. * @brief Empty.
*
* Not in the AVL tree. Not in a list. Not in use. Not a user of its
* group.
*/ */
RTEMS_BDBUF_STATE_EMPTY = 0, RTEMS_BDBUF_STATE_EMPTY = 0,
/** /**
* In the cache. Not in a list. In use by a get or read request. * @brief Fresh.
*
* In the AVL tree. Not in a list. In use by a get or read request. A user
* of its group.
*/ */
RTEMS_BDBUF_STATE_FRESH, RTEMS_BDBUF_STATE_FRESH,
/** /**
* In the cache. In the LRU list. Not in use. * @brief Cached.
*
* In the AVL tree. In the LRU list. Not in use. Not a user of its group.
*/ */
RTEMS_BDBUF_STATE_CACHED, /**< In the cache and available */ RTEMS_BDBUF_STATE_CACHED,
/** /**
* In the cache. Not in a list. In use by an upper layer. * @brief Accessed by upper layer.
*
* In the AVL tree. Not in a list. In use by an upper layer. A user of its
* group.
*/ */
RTEMS_BDBUF_STATE_ACCESS, RTEMS_BDBUF_STATE_ACCESS,
/** /**
* In the cache. Not in a list. In use by an upper layer. * @brief Accessed and modified by upper layer.
*
* In the AVL tree. Not in a list. In use by an upper layer. A user of its
* group.
*/ */
RTEMS_BDBUF_STATE_ACCESS_MODIFIED, RTEMS_BDBUF_STATE_ACCESS_MODIFIED,
/** /**
* In the cache. In the modified list. Not in use. * @brief Modified by upper layer.
*
* In the AVL tree. In the modified list. In use by swapout mechanic. A
* user of its group.
*/ */
RTEMS_BDBUF_STATE_MODIFIED, RTEMS_BDBUF_STATE_MODIFIED,
/** /**
* In the cache. In the sync list. Not in use. * @brief Scheduled for synchronization.
*
* In the AVL tree. In the sync list. In use by swapout mechanic. A user
* of its group.
*/ */
RTEMS_BDBUF_STATE_SYNC, RTEMS_BDBUF_STATE_SYNC,
/** /**
* In the cache. Not in a list. In use by the block device driver. * @brief In transfer by block device driver.
*
* In the AVL tree. Not in a list. In use by the block device driver. A
* user of its group.
*/ */
RTEMS_BDBUF_STATE_TRANSFER RTEMS_BDBUF_STATE_TRANSFER
} rtems_bdbuf_buf_state; } rtems_bdbuf_buf_state;

View File

@@ -182,11 +182,11 @@ typedef struct rtems_blkdev_request {
* appropriate IO control handler. * appropriate IO control handler.
*/ */
#define RTEMS_GENERIC_BLOCK_DEVICE_DRIVER_ENTRIES \ #define RTEMS_GENERIC_BLOCK_DEVICE_DRIVER_ENTRIES \
.open_entry = rtems_blkdev_generic_open, \ rtems_blkdev_generic_open, \
.close_entry = rtems_blkdev_generic_close, \ rtems_blkdev_generic_close, \
.read_entry = rtems_blkdev_generic_read, \ rtems_blkdev_generic_read, \
.write_entry = rtems_blkdev_generic_write, \ rtems_blkdev_generic_write, \
.control_entry = rtems_blkdev_generic_ioctl rtems_blkdev_generic_ioctl
/** /**
* Generic block device read primitive. * Generic block device read primitive.

View File

@@ -1831,21 +1831,25 @@ rtems_bdbuf_create_read_request (rtems_blkdev_request *req,
if (media_block_end - media_block < transfer_count) if (media_block_end - media_block < transfer_count)
transfer_count = media_block_end - media_block; transfer_count = media_block_end - media_block;
bd = rtems_bdbuf_get_buffer_for_access (dev, media_block, bds_per_group);
req->bufnum = 0; req->bufnum = 0;
bd = rtems_bdbuf_get_buffer_for_access (dev, media_block, bds_per_group);
req->bufs [0].user = bd; req->bufs [0].user = bd;
req->bufs [0].block = media_block; req->bufs [0].block = media_block;
req->bufs [0].length = block_size; req->bufs [0].length = block_size;
req->bufs [0].buffer = bd->buffer; req->bufs [0].buffer = bd->buffer;
if (rtems_bdbuf_tracer)
rtems_bdbuf_show_users ("read", bd);
switch (bd->state) switch (bd->state)
{ {
case RTEMS_BDBUF_STATE_CACHED: case RTEMS_BDBUF_STATE_CACHED:
case RTEMS_BDBUF_STATE_MODIFIED: case RTEMS_BDBUF_STATE_MODIFIED:
return; return;
case RTEMS_BDBUF_STATE_FRESH: case RTEMS_BDBUF_STATE_FRESH:
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_TRANSFER);
break; break;
default: default:
rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_1); rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_1);
@@ -1854,11 +1858,6 @@ rtems_bdbuf_create_read_request (rtems_blkdev_request *req,
while (transfer_index < transfer_count) while (transfer_index < transfer_count)
{ {
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_TRANSFER);
if (rtems_bdbuf_tracer)
rtems_bdbuf_show_users ("reading", bd);
media_block += media_block_count; media_block += media_block_count;
bd = rtems_bdbuf_get_buffer_for_read_ahead (dev, media_block, bd = rtems_bdbuf_get_buffer_for_read_ahead (dev, media_block,
@@ -1867,11 +1866,16 @@ rtems_bdbuf_create_read_request (rtems_blkdev_request *req,
if (bd == NULL) if (bd == NULL)
break; break;
rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_TRANSFER);
req->bufs [transfer_index].user = bd; req->bufs [transfer_index].user = bd;
req->bufs [transfer_index].block = media_block; req->bufs [transfer_index].block = media_block;
req->bufs [transfer_index].length = block_size; req->bufs [transfer_index].length = block_size;
req->bufs [transfer_index].buffer = bd->buffer; req->bufs [transfer_index].buffer = bd->buffer;
if (rtems_bdbuf_tracer)
rtems_bdbuf_show_users ("read-ahead", bd);
++transfer_index; ++transfer_index;
} }

View File

@@ -513,6 +513,7 @@ rtems_ide_part_table_initialize(char *dev_name)
rc = rtems_ide_part_table_get(dev_name, disk_desc); rc = rtems_ide_part_table_get(dev_name, disk_desc);
if (rc != RTEMS_SUCCESSFUL) if (rc != RTEMS_SUCCESSFUL)
{ {
free(disk_desc);
return rc; return rc;
} }