Changeset 39ee704e in rtems
- Timestamp:
- 05/31/12 08:27:29 (11 years ago)
- Branches:
- 4.11, 5, master
- Children:
- 96b1d7f
- Parents:
- 6273201
- git-author:
- Sebastian Huber <sebastian.huber@…> (05/31/12 08:27:29)
- git-committer:
- Sebastian Huber <sebastian.huber@…> (06/04/12 07:54:31)
- Files:
-
- 4 added
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
cpukit/libblock/include/rtems/bdbuf.h
r6273201 r39ee704e 47 47 * 48 48 * The Block Device Buffer Management implements a cache between the disk 49 * devices and file systems. The code provides read 49 * devices and file systems. The code provides read-ahead and write queuing to 50 50 * the drivers and fast cache look-up using an AVL tree. 51 51 * … … 153 153 * 154 154 * The code performs multiple block reads and writes. Multiple block reads or 155 * read 155 * read-ahead increases performance with hardware that supports it. It also 156 156 * helps with a large cache as the disk head movement is reduced. It however 157 157 * is a speculative operation so excessive use can remove valuable and needed 158 * blocks from the cache. 158 * blocks from the cache. The read-ahead is triggered after two misses of 159 * ascending consecutive blocks or a read hit of a block read by the 160 * most-resent read-ahead transfer. The read-ahead works per disk, but all 161 * transfers are issued by the read-ahead task. 159 162 * 160 163 * The cache has the following lists of buffers: … … 380 383 * supported. It is also the 381 384 * allocation size. */ 385 rtems_task_priority read_ahead_priority; /**< Priority of the read-ahead 386 * task. */ 382 387 } rtems_bdbuf_config; 383 388 … … 390 395 391 396 /** 392 * The max_read_ahead_blocks value is altered if there are fewer buffers393 * than this defined max. This stops thrashing in the cache.397 * The default value for the maximum read-ahead blocks disables the read-ahead 398 * feature. 394 399 */ 395 400 #define RTEMS_BDBUF_MAX_READ_AHEAD_BLOCKS_DEFAULT 0 … … 425 430 #define RTEMS_BDBUF_SWAPOUT_WORKER_TASK_PRIORITY_DEFAULT \ 426 431 RTEMS_BDBUF_SWAPOUT_TASK_PRIORITY_DEFAULT 432 433 /** 434 * Default read-ahead task priority. The same as the swap-out task. 435 */ 436 #define RTEMS_BDBUF_READ_AHEAD_TASK_PRIORITY_DEFAULT \ 437 RTEMS_BDBUF_SWAPOUT_TASK_PRIORITY_DEFAULT 427 438 428 439 /** … … 622 633 * @brief Purges all buffers corresponding to the disk device @a dd. 623 634 * 624 * This may result in loss of data. 635 * This may result in loss of data. The read-ahead state of this device is reset. 625 636 * 626 637 * Before you can use this function, the rtems_bdbuf_init() routine must be … … 636 647 * @brief Sets the block size of a disk device. 637 648 * 638 * This will set the block size derived fields of the disk device. 649 * This will set the block size derived fields of the disk device. The 650 * read-ahead state of this device is reset. 639 651 * 640 652 * Before you can use this function, the rtems_bdbuf_init() routine must be -
cpukit/libblock/include/rtems/diskdevs.h
r6273201 r39ee704e 17 17 #include <rtems.h> 18 18 #include <rtems/libio.h> 19 #include <rtems/chain.h> 19 20 #include <stdlib.h> 20 21 … … 56 57 57 58 /** 59 * @brief Trigger value to disable further read-ahead requests. 60 */ 61 #define RTEMS_DISK_READ_AHEAD_NO_TRIGGER ((rtems_blkdev_bnum) -1) 62 63 /** 64 * @brief Read-ahead control. 65 */ 66 typedef struct { 67 /** 68 * @brief Chain node for the read-ahead request queue of the read-ahead task. 69 */ 70 rtems_chain_node node; 71 72 /** 73 * @brief Block value to trigger the read-ahead request. 74 * 75 * A value of @ref RTEMS_DISK_READ_AHEAD_NO_TRIGGER will disable further 76 * read-ahead requests since no valid block can have this value. 77 */ 78 rtems_blkdev_bnum trigger; 79 80 /** 81 * @brief Start block for the next read-ahead request. 82 * 83 * In case the trigger value is out of range of valid blocks, this value my 84 * be arbitrary. 85 */ 86 rtems_blkdev_bnum next; 87 } rtems_disk_read_ahread; 88 89 /** 58 90 * @brief Description of a disk device (logical and physical disks). 59 91 * … … 169 201 */ 170 202 bool deleted; 203 204 /** 205 * @brief Read-ahead control for this disk. 206 */ 207 rtems_disk_read_ahread read_ahead; 171 208 }; 172 209 -
cpukit/libblock/src/bdbuf.c
r6273201 r39ee704e 135 135 size_t group_count; /**< The number of groups. */ 136 136 rtems_bdbuf_group* groups; /**< The groups. */ 137 rtems_id read_ahead_task; /**< Read-ahead task */ 138 rtems_chain_control read_ahead_chain; /**< Read-ahead request chain */ 139 bool read_ahead_enabled; /**< Read-ahead enabled */ 137 140 138 141 bool initialised; /**< Initialised state. */ … … 181 184 #define RTEMS_BLKDEV_FATAL_BDBUF_STATE_1 RTEMS_BLKDEV_FATAL_ERROR(29) 182 185 #define RTEMS_BLKDEV_FATAL_BDBUF_STATE_2 RTEMS_BLKDEV_FATAL_ERROR(30) 186 #define RTEMS_BLKDEV_FATAL_BDBUF_RA_WAKE_UP RTEMS_BLKDEV_FATAL_ERROR(31) 183 187 184 188 /** … … 188 192 #define RTEMS_BDBUF_TRANSFER_SYNC RTEMS_EVENT_1 189 193 #define RTEMS_BDBUF_SWAPOUT_SYNC RTEMS_EVENT_2 194 #define RTEMS_BDBUF_READ_AHEAD_WAKE_UP RTEMS_EVENT_1 190 195 191 196 /** … … 220 225 #endif 221 226 222 /*223 * The swap out task.224 */225 227 static rtems_task rtems_bdbuf_swapout_task(rtems_task_argument arg); 228 229 static rtems_task rtems_bdbuf_read_ahead_task(rtems_task_argument arg); 226 230 227 231 /** … … 1366 1370 rtems_chain_initialize_empty (&bdbuf_cache.modified); 1367 1371 rtems_chain_initialize_empty (&bdbuf_cache.sync); 1372 rtems_chain_initialize_empty (&bdbuf_cache.read_ahead_chain); 1368 1373 1369 1374 /* … … 1487 1492 goto error; 1488 1493 1494 if (bdbuf_config.max_read_ahead_blocks > 0) 1495 { 1496 bdbuf_cache.read_ahead_enabled = true; 1497 sc = rtems_bdbuf_create_task (rtems_build_name('B', 'R', 'D', 'A'), 1498 bdbuf_config.read_ahead_priority, 1499 RTEMS_BDBUF_READ_AHEAD_TASK_PRIORITY_DEFAULT, 1500 rtems_bdbuf_read_ahead_task, 1501 0, 1502 &bdbuf_cache.read_ahead_task); 1503 if (sc != RTEMS_SUCCESSFUL) 1504 goto error; 1505 } 1506 1489 1507 rtems_bdbuf_unlock_cache (); 1490 1508 … … 1492 1510 1493 1511 error: 1512 1513 if (bdbuf_cache.read_ahead_task != 0) 1514 rtems_task_delete (bdbuf_cache.read_ahead_task); 1494 1515 1495 1516 if (bdbuf_cache.swapout != 0) … … 1853 1874 } 1854 1875 1855 static void 1856 rtems_bdbuf_create_read_request (const rtems_disk_device *dd, 1857 rtems_blkdev_bnum media_block, 1858 rtems_blkdev_request *req, 1859 rtems_bdbuf_buffer **bd_ptr) 1860 { 1861 rtems_bdbuf_buffer *bd = NULL; 1862 rtems_blkdev_bnum media_block_end = dd->start + dd->size; 1863 rtems_blkdev_bnum media_block_count = dd->block_to_media_block_shift >= 0 ? 1864 1U << dd->block_to_media_block_shift 1865 : dd->block_size / dd->media_block_size; 1866 uint32_t block_size = dd->block_size; 1867 uint32_t transfer_index = 1; 1868 uint32_t transfer_count = bdbuf_config.max_read_ahead_blocks + 1; 1869 1870 if (media_block_end - media_block < transfer_count) 1871 transfer_count = media_block_end - media_block; 1876 static rtems_status_code 1877 rtems_bdbuf_execute_transfer_request (const rtems_disk_device *dd, 1878 rtems_blkdev_request *req, 1879 bool cache_locked) 1880 { 1881 rtems_status_code sc = RTEMS_SUCCESSFUL; 1882 int result = 0; 1883 uint32_t transfer_index = 0; 1884 bool wake_transfer_waiters = false; 1885 bool wake_buffer_waiters = false; 1886 1887 if (cache_locked) 1888 rtems_bdbuf_unlock_cache (); 1889 1890 result = dd->ioctl (dd->phys_dev, RTEMS_BLKIO_REQUEST, req); 1891 1892 if (result == 0) 1893 { 1894 rtems_bdbuf_wait_for_event (RTEMS_BDBUF_TRANSFER_SYNC); 1895 sc = req->status; 1896 } 1897 else 1898 sc = RTEMS_IO_ERROR; 1899 1900 rtems_bdbuf_lock_cache (); 1901 1902 for (transfer_index = 0; transfer_index < req->bufnum; ++transfer_index) 1903 { 1904 rtems_bdbuf_buffer *bd = req->bufs [transfer_index].user; 1905 bool waiters = bd->waiters; 1906 1907 if (waiters) 1908 wake_transfer_waiters = true; 1909 else 1910 wake_buffer_waiters = true; 1911 1912 rtems_bdbuf_group_release (bd); 1913 1914 if (sc == RTEMS_SUCCESSFUL && bd->state == RTEMS_BDBUF_STATE_TRANSFER) 1915 rtems_bdbuf_make_cached_and_add_to_lru_list (bd); 1916 else 1917 rtems_bdbuf_discard_buffer (bd); 1918 1919 if (rtems_bdbuf_tracer) 1920 rtems_bdbuf_show_users ("transfer", bd); 1921 } 1922 1923 if (wake_transfer_waiters) 1924 rtems_bdbuf_wake (&bdbuf_cache.transfer_waiters); 1925 1926 if (wake_buffer_waiters) 1927 rtems_bdbuf_wake (&bdbuf_cache.buffer_waiters); 1928 1929 if (!cache_locked) 1930 rtems_bdbuf_unlock_cache (); 1931 1932 if (sc == RTEMS_SUCCESSFUL || sc == RTEMS_UNSATISFIED) 1933 return sc; 1934 else 1935 return RTEMS_IO_ERROR; 1936 } 1937 1938 static rtems_status_code 1939 rtems_bdbuf_execute_read_request (const rtems_disk_device *dd, 1940 rtems_bdbuf_buffer *bd, 1941 uint32_t transfer_count) 1942 { 1943 rtems_blkdev_request *req = NULL; 1944 rtems_blkdev_bnum media_block = bd->block; 1945 uint32_t media_blocks_per_block = dd->media_blocks_per_block; 1946 uint32_t block_size = dd->block_size; 1947 uint32_t transfer_index = 1; 1948 1949 /* 1950 * TODO: This type of request structure is wrong and should be removed. 1951 */ 1952 #define bdbuf_alloc(size) __builtin_alloca (size) 1953 1954 req = bdbuf_alloc (sizeof (rtems_blkdev_request) + 1955 sizeof (rtems_blkdev_sg_buffer) * transfer_count); 1872 1956 1873 1957 req->req = RTEMS_BLKDEV_REQ_READ; … … 1878 1962 req->bufnum = 0; 1879 1963 1880 bd = rtems_bdbuf_get_buffer_for_access (dd, media_block); 1881 1882 *bd_ptr = bd; 1964 rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_TRANSFER); 1883 1965 1884 1966 req->bufs [0].user = bd; … … 1890 1972 rtems_bdbuf_show_users ("read", bd); 1891 1973 1892 switch (bd->state)1893 {1894 case RTEMS_BDBUF_STATE_CACHED:1895 case RTEMS_BDBUF_STATE_MODIFIED:1896 return;1897 case RTEMS_BDBUF_STATE_EMPTY:1898 rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_TRANSFER);1899 break;1900 default:1901 rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_1);1902 break;1903 }1904 1905 1974 while (transfer_index < transfer_count) 1906 1975 { 1907 media_block += media_block _count;1976 media_block += media_blocks_per_block; 1908 1977 1909 1978 bd = rtems_bdbuf_get_buffer_for_read_ahead (dd, media_block); … … 1920 1989 1921 1990 if (rtems_bdbuf_tracer) 1922 rtems_bdbuf_show_users ("read -ahead", bd);1991 rtems_bdbuf_show_users ("read", bd); 1923 1992 1924 1993 ++transfer_index; … … 1926 1995 1927 1996 req->bufnum = transfer_index; 1928 } 1929 1930 static rtems_status_code 1931 rtems_bdbuf_execute_transfer_request (const rtems_disk_device *dd, 1932 rtems_blkdev_request *req, 1933 bool cache_locked) 1934 { 1935 rtems_status_code sc = RTEMS_SUCCESSFUL; 1936 int result = 0; 1937 uint32_t transfer_index = 0; 1938 bool wake_transfer_waiters = false; 1939 bool wake_buffer_waiters = false; 1940 1941 if (cache_locked) 1942 rtems_bdbuf_unlock_cache (); 1943 1944 result = dd->ioctl (dd->phys_dev, RTEMS_BLKIO_REQUEST, req); 1945 1946 if (result == 0) 1947 { 1948 rtems_bdbuf_wait_for_event (RTEMS_BDBUF_TRANSFER_SYNC); 1949 sc = req->status; 1950 } 1951 else 1952 sc = RTEMS_IO_ERROR; 1953 1954 rtems_bdbuf_lock_cache (); 1955 1956 for (transfer_index = 0; transfer_index < req->bufnum; ++transfer_index) 1957 { 1958 rtems_bdbuf_buffer *bd = req->bufs [transfer_index].user; 1959 bool waiters = bd->waiters; 1960 1961 if (waiters) 1962 wake_transfer_waiters = true; 1963 else 1964 wake_buffer_waiters = true; 1965 1966 rtems_bdbuf_group_release (bd); 1967 1968 if (sc == RTEMS_SUCCESSFUL && bd->state == RTEMS_BDBUF_STATE_TRANSFER) 1969 rtems_bdbuf_make_cached_and_add_to_lru_list (bd); 1970 else 1971 rtems_bdbuf_discard_buffer (bd); 1972 1973 if (rtems_bdbuf_tracer) 1974 rtems_bdbuf_show_users ("transfer", bd); 1975 } 1976 1977 if (wake_transfer_waiters) 1978 rtems_bdbuf_wake (&bdbuf_cache.transfer_waiters); 1979 1980 if (wake_buffer_waiters) 1981 rtems_bdbuf_wake (&bdbuf_cache.buffer_waiters); 1982 1983 if (!cache_locked) 1984 rtems_bdbuf_unlock_cache (); 1985 1986 if (sc == RTEMS_SUCCESSFUL || sc == RTEMS_UNSATISFIED) 1987 return sc; 1988 else 1989 return RTEMS_IO_ERROR; 1997 1998 return rtems_bdbuf_execute_transfer_request (dd, req, true); 1999 } 2000 2001 static bool 2002 rtems_bdbuf_is_read_ahead_active (const rtems_disk_device *dd) 2003 { 2004 return !rtems_chain_is_node_off_chain (&dd->read_ahead.node); 2005 } 2006 2007 static void 2008 rtems_bdbuf_read_ahead_cancel (rtems_disk_device *dd) 2009 { 2010 if (rtems_bdbuf_is_read_ahead_active (dd)) 2011 { 2012 rtems_chain_extract_unprotected (&dd->read_ahead.node); 2013 rtems_chain_set_off_chain (&dd->read_ahead.node); 2014 } 2015 } 2016 2017 static void 2018 rtems_bdbuf_read_ahead_reset (rtems_disk_device *dd) 2019 { 2020 rtems_bdbuf_read_ahead_cancel (dd); 2021 dd->read_ahead.trigger = RTEMS_DISK_READ_AHEAD_NO_TRIGGER; 2022 } 2023 2024 static void 2025 rtems_bdbuf_check_read_ahead_trigger (rtems_disk_device *dd, 2026 rtems_blkdev_bnum block) 2027 { 2028 if (dd->read_ahead.trigger == block 2029 && !rtems_bdbuf_is_read_ahead_active (dd)) 2030 { 2031 rtems_status_code sc; 2032 rtems_chain_control *chain = &bdbuf_cache.read_ahead_chain; 2033 2034 rtems_chain_append_unprotected (chain, &dd->read_ahead.node); 2035 sc = rtems_event_send (bdbuf_cache.read_ahead_task, 2036 RTEMS_BDBUF_READ_AHEAD_WAKE_UP); 2037 if (sc != RTEMS_SUCCESSFUL) 2038 rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_RA_WAKE_UP); 2039 } 2040 } 2041 2042 static void 2043 rtems_bdbuf_set_read_ahead_trigger (rtems_disk_device *dd, 2044 rtems_blkdev_bnum block) 2045 { 2046 if (dd->read_ahead.trigger != block) 2047 { 2048 rtems_bdbuf_read_ahead_cancel (dd); 2049 dd->read_ahead.trigger = block + 1; 2050 dd->read_ahead.next = block + 2; 2051 } 1990 2052 } 1991 2053 … … 1996 2058 { 1997 2059 rtems_status_code sc = RTEMS_SUCCESSFUL; 1998 rtems_blkdev_request *req = NULL;1999 2060 rtems_bdbuf_buffer *bd = NULL; 2000 2061 rtems_blkdev_bnum media_block; 2001 2002 /*2003 * TODO: This type of request structure is wrong and should be removed.2004 */2005 #define bdbuf_alloc(size) __builtin_alloca (size)2006 2007 req = bdbuf_alloc (sizeof (rtems_blkdev_request) +2008 sizeof (rtems_blkdev_sg_buffer) *2009 (bdbuf_config.max_read_ahead_blocks + 1));2010 2062 2011 2063 rtems_bdbuf_lock_cache (); … … 2018 2070 media_block + dd->start, block, (unsigned) dd->dev); 2019 2071 2020 rtems_bdbuf_create_read_request (dd, media_block, req, &bd); 2021 2022 if (req->bufnum > 0) 2023 { 2024 sc = rtems_bdbuf_execute_transfer_request (dd, req, true); 2025 if (sc == RTEMS_SUCCESSFUL) 2026 { 2027 rtems_chain_extract_unprotected (&bd->link); 2028 rtems_bdbuf_group_obtain (bd); 2029 } 2030 } 2031 2032 if (sc == RTEMS_SUCCESSFUL) 2033 { 2034 switch (bd->state) 2035 { 2036 case RTEMS_BDBUF_STATE_CACHED: 2072 rtems_bdbuf_check_read_ahead_trigger (dd, block); 2073 bd = rtems_bdbuf_get_buffer_for_access (dd, media_block); 2074 switch (bd->state) 2075 { 2076 case RTEMS_BDBUF_STATE_CACHED: 2077 rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_CACHED); 2078 break; 2079 case RTEMS_BDBUF_STATE_MODIFIED: 2080 rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_MODIFIED); 2081 break; 2082 case RTEMS_BDBUF_STATE_EMPTY: 2083 rtems_bdbuf_set_read_ahead_trigger (dd, block); 2084 sc = rtems_bdbuf_execute_read_request (dd, bd, 1); 2085 if (sc == RTEMS_SUCCESSFUL) 2086 { 2037 2087 rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_CACHED); 2038 break; 2039 case RTEMS_BDBUF_STATE_MODIFIED: 2040 rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_ACCESS_MODIFIED); 2041 break; 2042 default: 2043 rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_4); 2044 break; 2045 } 2046 2047 if (rtems_bdbuf_tracer) 2048 { 2049 rtems_bdbuf_show_users ("read", bd); 2050 rtems_bdbuf_show_usage (); 2051 } 2052 } 2053 else 2054 { 2055 bd = NULL; 2088 rtems_chain_extract_unprotected (&bd->link); 2089 rtems_bdbuf_group_obtain (bd); 2090 } 2091 else 2092 { 2093 bd = NULL; 2094 } 2095 break; 2096 default: 2097 rtems_bdbuf_fatal (bd->state, RTEMS_BLKDEV_FATAL_BDBUF_STATE_4); 2098 break; 2056 2099 } 2057 2100 } … … 2885 2928 rtems_chain_initialize_empty (&purge_list); 2886 2929 rtems_bdbuf_lock_cache (); 2930 rtems_bdbuf_read_ahead_reset (dd); 2887 2931 rtems_bdbuf_gather_for_purge (&purge_list, dd); 2888 2932 rtems_bdbuf_purge_list (&purge_list); … … 2920 2964 dd->block_to_media_block_shift = block_to_media_block_shift; 2921 2965 dd->bds_per_group = bds_per_group; 2966 2967 rtems_bdbuf_read_ahead_reset (dd); 2922 2968 } 2923 2969 else … … 2935 2981 return sc; 2936 2982 } 2983 2984 static rtems_task 2985 rtems_bdbuf_read_ahead_task (rtems_task_argument arg) 2986 { 2987 rtems_chain_control *chain = &bdbuf_cache.read_ahead_chain; 2988 2989 while (bdbuf_cache.read_ahead_enabled) 2990 { 2991 rtems_chain_node *node; 2992 2993 rtems_bdbuf_wait_for_event (RTEMS_BDBUF_READ_AHEAD_WAKE_UP); 2994 rtems_bdbuf_lock_cache (); 2995 2996 while ((node = rtems_chain_get_unprotected (chain)) != NULL) 2997 { 2998 rtems_disk_device *dd = (rtems_disk_device *) 2999 ((char *) node - offsetof (rtems_disk_device, read_ahead.node)); 3000 rtems_blkdev_bnum block = dd->read_ahead.next; 3001 rtems_blkdev_bnum media_block = 0; 3002 rtems_status_code sc = 3003 rtems_bdbuf_get_media_block (dd, block, &media_block); 3004 3005 rtems_chain_set_off_chain (&dd->read_ahead.node); 3006 3007 if (sc == RTEMS_SUCCESSFUL) 3008 { 3009 rtems_bdbuf_buffer *bd = 3010 rtems_bdbuf_get_buffer_for_read_ahead (dd, media_block); 3011 3012 if (bd != NULL) 3013 { 3014 uint32_t transfer_count = dd->block_count - block; 3015 uint32_t max_transfer_count = bdbuf_config.max_read_ahead_blocks; 3016 3017 if (transfer_count >= max_transfer_count) 3018 { 3019 transfer_count = max_transfer_count; 3020 dd->read_ahead.trigger += max_transfer_count / 2 + 1; 3021 dd->read_ahead.next += max_transfer_count; 3022 } 3023 else 3024 { 3025 dd->read_ahead.trigger = RTEMS_DISK_READ_AHEAD_NO_TRIGGER; 3026 } 3027 3028 rtems_bdbuf_execute_read_request (dd, bd, transfer_count); 3029 } 3030 } 3031 else 3032 { 3033 dd->read_ahead.trigger = RTEMS_DISK_READ_AHEAD_NO_TRIGGER; 3034 } 3035 } 3036 3037 rtems_bdbuf_unlock_cache (); 3038 } 3039 3040 rtems_task_delete (RTEMS_SELF); 3041 } -
cpukit/libblock/src/diskdevs-init.c
r6273201 r39ee704e 37 37 dd->ioctl = handler; 38 38 dd->driver_data = driver_data; 39 dd->read_ahead.trigger = RTEMS_DISK_READ_AHEAD_NO_TRIGGER; 39 40 40 41 if (block_count > 0) { … … 68 69 dd->ioctl = phys_dd->ioctl; 69 70 dd->driver_data = phys_dd->driver_data; 71 dd->read_ahead.trigger = RTEMS_DISK_READ_AHEAD_NO_TRIGGER; 70 72 71 73 if (phys_dd->phys_dev == phys_dd) { -
cpukit/sapi/include/confdefs.h
r6273201 r39ee704e 1242 1242 RTEMS_BDBUF_BUFFER_MAX_SIZE_DEFAULT 1243 1243 #endif 1244 #ifndef CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY 1245 #define CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY \ 1246 RTEMS_BDBUF_READ_AHEAD_TASK_PRIORITY_DEFAULT 1247 #endif 1244 1248 #ifdef CONFIGURE_INIT 1245 1249 const rtems_bdbuf_config rtems_bdbuf_configuration = { … … 1254 1258 CONFIGURE_BDBUF_CACHE_MEMORY_SIZE, 1255 1259 CONFIGURE_BDBUF_BUFFER_MIN_SIZE, 1256 CONFIGURE_BDBUF_BUFFER_MAX_SIZE 1260 CONFIGURE_BDBUF_BUFFER_MAX_SIZE, 1261 CONFIGURE_BDBUF_READ_AHEAD_TASK_PRIORITY 1257 1262 }; 1258 1263 #endif 1259 1264 1260 #define CONFIGURE_LIBBLOCK_TASKS (1 + CONFIGURE_SWAPOUT_WORKER_TASKS) 1265 #define CONFIGURE_LIBBLOCK_TASKS \ 1266 (1 + CONFIGURE_SWAPOUT_WORKER_TASKS + \ 1267 (CONFIGURE_BDBUF_MAX_READ_AHEAD_BLOCKS != 0)) 1261 1268 1262 1269 #define CONFIGURE_LIBBLOCK_TASK_EXTRA_STACKS \ -
testsuites/libtests/Makefile.am
r6273201 r39ee704e 2 2 3 3 SUBDIRS = POSIX 4 SUBDIRS += block13 4 5 SUBDIRS += rbheap01 5 6 SUBDIRS += flashdisk01 -
testsuites/libtests/configure.ac
r6273201 r39ee704e 42 42 # Explicitly list all Makefiles here 43 43 AC_CONFIG_FILES([Makefile 44 block13/Makefile 44 45 rbheap01/Makefile 45 46 syscall01/Makefile
Note: See TracChangeset
for help on using the changeset viewer.