Changes in / [7afcb26:abe87b9] in rtems
- Files:
-
- 43 added
- 28 edited
Legend:
- Unmodified
- Added
- Removed
-
c/src/lib/libbsp/sparc/erc32/make/custom/erc32.cfg
r7afcb26 rabe87b9 16 16 17 17 # optimize flag: typically -O2 18 CFLAGS_OPTIMIZE_V = -O 2-g18 CFLAGS_OPTIMIZE_V = -O0 -g -
c/src/make/Makefile.am
r7afcb26 rabe87b9 23 23 24 24 rtems_bsp_makedir = $(rtems_bspdir)/make 25 rtems_bsp_make_DATA = bsp.cfg target.cfg 25 rtems_bsp_make_DATA = bsp.cfg target.cfg bsp.mk 26 26 27 27 bsp.cfg: bsp.cfg.in Makefile -
c/src/make/configure.ac
r7afcb26 rabe87b9 81 81 # Explicitly list all Makefiles here 82 82 AC_CONFIG_FILES([Makefile 83 bsp.mk 83 84 ]) 84 85 AC_OUTPUT -
cpukit/Makefile.am
r7afcb26 rabe87b9 25 25 SUBDIRS += pppd 26 26 SUBDIRS += mghttpd 27 SUBDIRS += gtest 27 28 28 29 noinst_DATA = preinstall-stamp -
cpukit/configure.ac
r7afcb26 rabe87b9 13 13 AM_MAINTAINER_MODE 14 14 15 RTEMS_ENABLE_CXX 15 16 RTEMS_ENABLE_MULTILIB 16 17 RTEMS_ENABLE_MULTIPROCESSING … … 18 19 RTEMS_ENABLE_RTEMS_DEBUG 19 20 RTEMS_ENABLE_NETWORKING 21 22 AM_CONDITIONAL(HAS_CXX,test "$RTEMS_HAS_CPLUSPLUS" = "yes") 20 23 21 24 RTEMS_ENV_RTEMSCPU … … 31 34 32 35 RTEMS_PROG_CC_FOR_TARGET 36 RTEMS_PROG_CXX_FOR_TARGET 33 37 RTEMS_PROG_CCAS 34 38 RTEMS_CANONICALIZE_TOOLS … … 386 390 pppd/Makefile 387 391 mghttpd/Makefile 392 gtest/Makefile 388 393 wrapup/Makefile]) 389 394 -
cpukit/libblock/include/rtems/bdbuf.h
r7afcb26 rabe87b9 476 476 * 477 477 * @retval RTEMS_SUCCESSFUL Successful operation. 478 * @retval RTEMS_NOT_CONFIGURED Not initialized.479 * @retval RTEMS_INVALID_ID No such device.480 478 * @retval RTEMS_INVALID_NUMBER Invalid block size. 481 479 */ … … 507 505 * 508 506 * @retval RTEMS_SUCCESSFUL Successful operation. 509 * @retval RTEMS_NOT_CONFIGURED Not initialized.510 * @retval RTEMS_INVALID_ID No such device.511 507 * @retval RTEMS_INVALID_NUMBER Invalid block size. 512 508 * @retval RTEMS_IO_ERROR IO error. … … 530 526 * 531 527 * @retval RTEMS_SUCCESSFUL Successful operation. 532 * @retval RTEMS_NOT_CONFIGURED Not initialized.533 528 * @retval RTEMS_INVALID_ADDRESS The reference is NULL. 534 529 */ … … 549 544 * 550 545 * @retval RTEMS_SUCCESSFUL Successful operation. 551 * @retval RTEMS_NOT_CONFIGURED Not initialized.552 546 * @retval RTEMS_INVALID_ADDRESS The reference is NULL. 553 547 */ … … 567 561 * 568 562 * @retval RTEMS_SUCCESSFUL Successful operation. 569 * @retval RTEMS_NOT_CONFIGURED Not initialized.570 563 * @retval RTEMS_INVALID_ADDRESS The reference is NULL. 571 564 */ … … 585 578 * 586 579 * @retval RTEMS_SUCCESSFUL Successful operation. 587 * @retval RTEMS_NOT_CONFIGURED Not initialized.588 * @retval RTEMS_INVALID_ID No such device.589 580 */ 590 581 rtems_status_code … … 598 589 void 599 590 rtems_bdbuf_purge_dev (const rtems_disk_device *dd); 591 592 /** 593 * @brief Sets the block size of a disk device. 594 * 595 * This will also change the block_to_media_block_shift and bds_per_group 596 * fields of the disk device. 597 * 598 * @param dd [in, out] The disk device. 599 * @param dd [in] The new block size. 600 * 601 * @retval RTEMS_SUCCESSFUL Successful operation. 602 * @retval RTEMS_INVALID_NUMBER Invalid block size. 603 */ 604 rtems_status_code 605 rtems_bdbuf_set_block_size (rtems_disk_device *dd, uint32_t block_size); 600 606 601 607 /** @} */ -
cpukit/libblock/include/rtems/diskdevs.h
r7afcb26 rabe87b9 110 110 * @brief Device block size in bytes. 111 111 * 112 * This is the minimum transfer unit. It can be any size. 112 * This is the minimum transfer unit. It must be positive. 113 * 114 * @see rtems_bdbuf_set_block_size(). 113 115 */ 114 116 uint32_t block_size; … … 120 122 */ 121 123 uint32_t media_block_size; 124 125 /** 126 * @brief Block to media block shift. 127 * 128 * In case this value is non-negative the media block of a block can be 129 * calculated as media block = block << block_to_media_block_shift, otherwise 130 * a 64-bit operation will be used. 131 * 132 * @see rtems_bdbuf_set_block_size(). 133 */ 134 int block_to_media_block_shift; 135 136 /** 137 * @brief Buffer descriptors per group count. 138 * 139 * @see rtems_bdbuf_set_block_size(). 140 */ 141 size_t bds_per_group; 122 142 123 143 /** … … 223 243 * @retval RTEMS_NOT_CONFIGURED Cannot lock disk device operation mutex. 224 244 * @retval RTEMS_INVALID_ADDRESS IO control handler is @c NULL. 225 * @retval RTEMS_INVALID_NUMBER Block size is zero.245 * @retval RTEMS_INVALID_NUMBER Block size is invalid. 226 246 * @retval RTEMS_NO_MEMORY Not enough memory. 227 247 * @retval RTEMS_RESOURCE_IN_USE Disk device descriptor is already in use. -
cpukit/libblock/src/bdbuf.c
r7afcb26 rabe87b9 816 816 } 817 817 818 /**819 * Change the block number for the block size to the block number for the media820 * block size. We have to use 64bit maths. There is no short cut here.821 *822 * @param block The logical block number in the block size terms.823 * @param block_size The block size.824 * @param media_block_size The block size of the media.825 * @return rtems_blkdev_bnum The media block number.826 */827 818 static rtems_blkdev_bnum 828 rtems_bdbuf_media_block (rtems_blkdev_bnum block, 829 size_t block_size, 830 size_t media_block_size) 831 { 832 return (rtems_blkdev_bnum) 833 ((((uint64_t) block) * block_size) / media_block_size); 819 rtems_bdbuf_media_block (const rtems_disk_device *dd, rtems_blkdev_bnum block) 820 { 821 if (dd->block_to_media_block_shift >= 0) 822 return block << dd->block_to_media_block_shift; 823 else 824 /* 825 * Change the block number for the block size to the block number for the media 826 * block size. We have to use 64bit maths. There is no short cut here. 827 */ 828 return (rtems_blkdev_bnum) 829 ((((uint64_t) block) * dd->block_size) / dd->media_block_size); 834 830 } 835 831 … … 1057 1053 } 1058 1054 1059 rtems_chain_extract (&bd->link);1055 rtems_chain_extract_unprotected (&bd->link); 1060 1056 } 1061 1057 … … 1064 1060 { 1065 1061 rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_FREE); 1066 rtems_chain_prepend (&bdbuf_cache.lru, &bd->link);1062 rtems_chain_prepend_unprotected (&bdbuf_cache.lru, &bd->link); 1067 1063 } 1068 1064 … … 1077 1073 { 1078 1074 rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_CACHED); 1079 rtems_chain_append (&bdbuf_cache.lru, &bd->link);1075 rtems_chain_append_unprotected (&bdbuf_cache.lru, &bd->link); 1080 1076 } 1081 1077 … … 1124 1120 1125 1121 rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_MODIFIED); 1126 rtems_chain_append (&bdbuf_cache.modified, &bd->link);1122 rtems_chain_append_unprotected (&bdbuf_cache.modified, &bd->link); 1127 1123 1128 1124 if (bd->waiters) … … 1429 1425 bd->buffer = buffer; 1430 1426 1431 rtems_chain_append (&bdbuf_cache.lru, &bd->link);1427 rtems_chain_append_unprotected (&bdbuf_cache.lru, &bd->link); 1432 1428 1433 1429 if ((b % bdbuf_cache.max_bds_per_group) == … … 1526 1522 /* Fall through */ 1527 1523 case RTEMS_BDBUF_STATE_CACHED: 1528 rtems_chain_extract (&bd->link);1524 rtems_chain_extract_unprotected (&bd->link); 1529 1525 /* Fall through */ 1530 1526 case RTEMS_BDBUF_STATE_EMPTY: … … 1551 1547 { 1552 1548 rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_SYNC); 1553 rtems_chain_extract (&bd->link);1554 rtems_chain_append (&bdbuf_cache.sync, &bd->link);1549 rtems_chain_extract_unprotected (&bd->link); 1550 rtems_chain_append_unprotected (&bdbuf_cache.sync, &bd->link); 1555 1551 rtems_bdbuf_wake_swapper (); 1556 1552 } … … 1646 1642 rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_SYNC); 1647 1643 1648 rtems_chain_append (&bdbuf_cache.sync, &bd->link);1644 rtems_chain_append_unprotected (&bdbuf_cache.sync, &bd->link); 1649 1645 1650 1646 if (bd->waiters) … … 1737 1733 1738 1734 static rtems_status_code 1739 rtems_bdbuf_obtain_disk (const rtems_disk_device *dd, 1740 rtems_blkdev_bnum block, 1741 rtems_blkdev_bnum *media_block_ptr, 1742 size_t *bds_per_group_ptr) 1743 { 1744 if (!bdbuf_cache.initialised) 1745 return RTEMS_NOT_CONFIGURED; 1746 1747 if (media_block_ptr != NULL) 1748 { 1749 /* 1750 * Compute the media block number. Drivers work with media block number not 1751 * the block number a BD may have as this depends on the block size set by 1752 * the user. 1753 */ 1754 rtems_blkdev_bnum mb = rtems_bdbuf_media_block (block, 1755 dd->block_size, 1756 dd->media_block_size); 1757 if (mb >= dd->size) 1758 { 1759 return RTEMS_INVALID_NUMBER; 1760 } 1761 1762 *media_block_ptr = mb + dd->start; 1763 } 1764 1765 if (bds_per_group_ptr != NULL) 1766 { 1767 size_t bds_per_group = rtems_bdbuf_bds_per_group (dd->block_size); 1768 1769 if (bds_per_group == 0) 1770 { 1771 return RTEMS_INVALID_NUMBER; 1772 } 1773 1774 *bds_per_group_ptr = bds_per_group; 1775 } 1735 rtems_bdbuf_get_media_block (const rtems_disk_device *dd, 1736 rtems_blkdev_bnum block, 1737 rtems_blkdev_bnum *media_block_ptr) 1738 { 1739 /* 1740 * Compute the media block number. Drivers work with media block number not 1741 * the block number a BD may have as this depends on the block size set by 1742 * the user. 1743 */ 1744 rtems_blkdev_bnum mb = rtems_bdbuf_media_block (dd, block); 1745 if (mb >= dd->size) 1746 { 1747 return RTEMS_INVALID_NUMBER; 1748 } 1749 1750 *media_block_ptr = mb + dd->start; 1776 1751 1777 1752 return RTEMS_SUCCESSFUL; … … 1786 1761 rtems_bdbuf_buffer *bd = NULL; 1787 1762 rtems_blkdev_bnum media_block = 0; 1788 size_t bds_per_group = 0; 1789 1790 sc = rtems_bdbuf_obtain_disk (dd, block, &media_block, &bds_per_group); 1763 1764 sc = rtems_bdbuf_get_media_block (dd, block, &media_block); 1791 1765 if (sc != RTEMS_SUCCESSFUL) 1792 1766 return sc; … … 1801 1775 media_block, block, (unsigned) dd->dev); 1802 1776 1803 bd = rtems_bdbuf_get_buffer_for_access (dd, media_block, bds_per_group);1777 bd = rtems_bdbuf_get_buffer_for_access (dd, media_block, dd->bds_per_group); 1804 1778 1805 1779 switch (bd->state) … … 1867 1841 rtems_bdbuf_buffer *bd = NULL; 1868 1842 rtems_blkdev_bnum media_block_end = dd->start + dd->size; 1869 rtems_blkdev_bnum media_block_count = dd->block_size / dd->media_block_size; 1843 rtems_blkdev_bnum media_block_count = dd->block_to_media_block_shift >= 0 ? 1844 dd->block_size >> dd->block_to_media_block_shift 1845 : dd->block_size / dd->media_block_size; 1870 1846 uint32_t block_size = dd->block_size; 1871 1847 uint32_t transfer_index = 1; … … 2004 1980 rtems_bdbuf_buffer *bd = NULL; 2005 1981 rtems_blkdev_bnum media_block = 0; 2006 size_t bds_per_group = 0; 2007 2008 sc = rtems_bdbuf_obtain_disk (dd, block, &media_block, &bds_per_group); 1982 1983 sc = rtems_bdbuf_get_media_block (dd, block, &media_block); 2009 1984 if (sc != RTEMS_SUCCESSFUL) 2010 1985 return sc; … … 2024 1999 2025 2000 rtems_bdbuf_lock_cache (); 2026 rtems_bdbuf_create_read_request (dd, media_block, bds_per_group, req, &bd);2001 rtems_bdbuf_create_read_request (dd, media_block, dd->bds_per_group, req, &bd); 2027 2002 2028 2003 if (req->bufnum > 0) … … 2031 2006 if (sc == RTEMS_SUCCESSFUL) 2032 2007 { 2033 rtems_chain_extract (&bd->link);2008 rtems_chain_extract_unprotected (&bd->link); 2034 2009 rtems_bdbuf_group_obtain (bd); 2035 2010 } … … 2070 2045 rtems_bdbuf_check_bd_and_lock_cache (rtems_bdbuf_buffer *bd, const char *kind) 2071 2046 { 2072 if (!bdbuf_cache.initialised)2073 return RTEMS_NOT_CONFIGURED;2074 2047 if (bd == NULL) 2075 2048 return RTEMS_INVALID_ADDRESS; … … 2185 2158 rtems_bdbuf_syncdev (const rtems_disk_device *dd) 2186 2159 { 2187 rtems_status_code sc = RTEMS_SUCCESSFUL;2188 2189 2160 if (rtems_bdbuf_tracer) 2190 2161 printf ("bdbuf:syncdev: %08x\n", (unsigned) dd->dev); 2191 2192 sc = rtems_bdbuf_obtain_disk (dd, 0, NULL, NULL);2193 if (sc != RTEMS_SUCCESSFUL)2194 return sc;2195 2162 2196 2163 /* … … 2270 2237 transfer->write_req->bufnum = 0; 2271 2238 2272 while ((node = rtems_chain_get (&transfer->bds)) != NULL)2239 while ((node = rtems_chain_get_unprotected(&transfer->bds)) != NULL) 2273 2240 { 2274 2241 rtems_bdbuf_buffer* bd = (rtems_bdbuf_buffer*) node; … … 2292 2259 (bd->block != (last_block + bufs_per_bd))) 2293 2260 { 2294 rtems_chain_prepend (&transfer->bds, &bd->link);2261 rtems_chain_prepend_unprotected (&transfer->bds, &bd->link); 2295 2262 write = true; 2296 2263 } … … 2429 2396 rtems_bdbuf_set_state (bd, RTEMS_BDBUF_STATE_TRANSFER); 2430 2397 2431 rtems_chain_extract (node);2398 rtems_chain_extract_unprotected (node); 2432 2399 2433 2400 tnode = tnode->previous; … … 2439 2406 if (bd->block > tbd->block) 2440 2407 { 2441 rtems_chain_insert (tnode, node);2408 rtems_chain_insert_unprotected (tnode, node); 2442 2409 node = NULL; 2443 2410 } … … 2447 2414 2448 2415 if (node) 2449 rtems_chain_prepend (transfer, node);2416 rtems_chain_prepend_unprotected (transfer, node); 2450 2417 2451 2418 node = next_node; … … 2499 2466 { 2500 2467 worker = (rtems_bdbuf_swapout_worker*) 2501 rtems_chain_get (&bdbuf_cache.swapout_workers);2468 rtems_chain_get_unprotected (&bdbuf_cache.swapout_workers); 2502 2469 if (worker) 2503 2470 transfer = &worker->transfer; … … 2629 2596 worker->transfer.dd = BDBUF_INVALID_DEV; 2630 2597 2631 rtems_chain_append (&bdbuf_cache.swapout_workers, &worker->link);2598 rtems_chain_append_unprotected (&bdbuf_cache.swapout_workers, &worker->link); 2632 2599 2633 2600 rtems_bdbuf_unlock_cache (); … … 2659 2626 rtems_fatal_error_occurred (RTEMS_BLKDEV_FATAL_BDBUF_SO_NOMEM); 2660 2627 2661 rtems_chain_append (&bdbuf_cache.swapout_workers, &worker->link);2628 rtems_chain_append_unprotected (&bdbuf_cache.swapout_workers, &worker->link); 2662 2629 worker->enabled = true; 2663 2630 worker->transfer.write_req = rtems_bdbuf_swapout_writereq_alloc (); … … 2806 2773 rtems_chain_node *node = NULL; 2807 2774 2808 while ((node = rtems_chain_get (purge_list)) != NULL)2775 while ((node = rtems_chain_get_unprotected (purge_list)) != NULL) 2809 2776 { 2810 2777 rtems_bdbuf_buffer *bd = (rtems_bdbuf_buffer *) node; … … 2848 2815 /* Fall through */ 2849 2816 case RTEMS_BDBUF_STATE_CACHED: 2850 rtems_chain_extract (&cur->link);2851 rtems_chain_append (purge_list, &cur->link);2817 rtems_chain_extract_unprotected (&cur->link); 2818 rtems_chain_append_unprotected (purge_list, &cur->link); 2852 2819 break; 2853 2820 case RTEMS_BDBUF_STATE_TRANSFER: … … 2907 2874 rtems_bdbuf_unlock_cache (); 2908 2875 } 2876 2877 rtems_status_code 2878 rtems_bdbuf_set_block_size (rtems_disk_device *dd, uint32_t block_size) 2879 { 2880 rtems_status_code sc = RTEMS_SUCCESSFUL; 2881 2882 rtems_bdbuf_lock_cache (); 2883 2884 if (block_size > 0) 2885 { 2886 size_t bds_per_group = rtems_bdbuf_bds_per_group (block_size); 2887 2888 if (bds_per_group != 0) 2889 { 2890 int block_to_media_block_shift = 0; 2891 uint32_t media_blocks_per_block = block_size / dd->media_block_size; 2892 uint32_t one = 1; 2893 2894 while ((one << block_to_media_block_shift) < media_blocks_per_block) 2895 { 2896 ++block_to_media_block_shift; 2897 } 2898 2899 if ((dd->media_block_size << block_to_media_block_shift) != block_size) 2900 block_to_media_block_shift = -1; 2901 2902 dd->block_size = block_size; 2903 dd->block_to_media_block_shift = block_to_media_block_shift; 2904 dd->bds_per_group = bds_per_group; 2905 } 2906 else 2907 { 2908 sc = RTEMS_INVALID_NUMBER; 2909 } 2910 } 2911 else 2912 { 2913 sc = RTEMS_INVALID_NUMBER; 2914 } 2915 2916 rtems_bdbuf_unlock_cache (); 2917 2918 return sc; 2919 } -
cpukit/libblock/src/blkdev-imfs.c
r7afcb26 rabe87b9 269 269 rtems_status_code sc = RTEMS_SUCCESSFUL; 270 270 271 if (block_ size > 0 && block_count > 0) {271 if (block_count > 0) { 272 272 rtems_blkdev_imfs_context *ctx = calloc(1, sizeof(*ctx)); 273 273 274 274 if (ctx != NULL) { 275 275 rtems_disk_device *dd = &ctx->dd; 276 int rv;277 276 278 277 ctx->fd = -1; … … 281 280 dd->size = block_count; 282 281 dd->media_block_size = block_size; 283 dd->block_size = block_size;284 282 dd->ioctl = handler; 285 283 dd->driver_data = driver_data; … … 289 287 } 290 288 291 rv = IMFS_make_generic_node( 292 device, 293 S_IFBLK | S_IRWXU | S_IRWXG | S_IRWXO, 294 &rtems_blkdev_imfs_control, 295 ctx 296 ); 297 298 if (rv != 0) { 289 sc = rtems_bdbuf_set_block_size(dd, block_size); 290 if (sc == RTEMS_SUCCESSFUL) { 291 int rv = IMFS_make_generic_node( 292 device, 293 S_IFBLK | S_IRWXU | S_IRWXG | S_IRWXO, 294 &rtems_blkdev_imfs_control, 295 ctx 296 ); 297 298 if (rv != 0) { 299 free(ctx); 300 sc = RTEMS_UNSATISFIED; 301 } 302 } else { 299 303 free(ctx); 300 sc = RTEMS_UNSATISFIED;301 304 } 302 305 } else { -
cpukit/libblock/src/blkdev-ioctl.c
r7afcb26 rabe87b9 24 24 rtems_blkdev_ioctl(rtems_disk_device *dd, uint32_t req, void *argp) 25 25 { 26 size_t *arg_size = argp;26 rtems_status_code sc; 27 27 int rc = 0; 28 28 … … 30 30 { 31 31 case RTEMS_BLKIO_GETMEDIABLKSIZE: 32 * arg_size= dd->media_block_size;32 *(uint32_t *) argp = dd->media_block_size; 33 33 break; 34 34 35 35 case RTEMS_BLKIO_GETBLKSIZE: 36 * arg_size= dd->block_size;36 *(uint32_t *) argp = dd->block_size; 37 37 break; 38 38 39 39 case RTEMS_BLKIO_SETBLKSIZE: 40 dd->block_size = *arg_size; 41 break; 42 43 case RTEMS_BLKIO_GETSIZE: 44 *arg_size = dd->size; 45 break; 46 47 case RTEMS_BLKIO_SYNCDEV: 48 { 49 rtems_status_code sc = rtems_bdbuf_syncdev(dd); 40 sc = rtems_bdbuf_set_block_size(dd, *(uint32_t *) argp); 50 41 if (sc != RTEMS_SUCCESSFUL) { 51 42 errno = EIO; … … 53 44 } 54 45 break; 55 } 46 47 case RTEMS_BLKIO_GETSIZE: 48 *(rtems_blkdev_bnum *) argp = dd->size; 49 break; 50 51 case RTEMS_BLKIO_SYNCDEV: 52 sc = rtems_bdbuf_syncdev(dd); 53 if (sc != RTEMS_SUCCESSFUL) { 54 errno = EIO; 55 rc = -1; 56 } 57 break; 56 58 57 59 case RTEMS_BLKIO_GETDISKDEV: 58 { 59 rtems_disk_device **dd_ptr = argp; 60 *dd_ptr = dd; 60 *(rtems_disk_device **) argp = dd; 61 61 break; 62 }63 62 64 63 default: -
cpukit/libblock/src/diskdevs.c
r7afcb26 rabe87b9 221 221 } 222 222 223 static int null_handler( 224 rtems_disk_device *dd, 225 uint32_t req, 226 void *argp 227 ) 228 { 229 return -1; 230 } 231 223 232 rtems_status_code rtems_disk_create_phys( 224 233 dev_t dev, … … 237 246 } 238 247 239 if (block_size == 0) {240 return RTEMS_INVALID_NUMBER;241 }242 243 248 sc = disk_lock(); 244 249 if (sc != RTEMS_SUCCESSFUL) { … … 256 261 dd->start = 0; 257 262 dd->size = block_count; 258 dd-> block_size = dd->media_block_size = block_size;263 dd->media_block_size = block_size; 259 264 dd->ioctl = handler; 260 265 dd->driver_data = driver_data; … … 262 267 if ((*handler)(dd, RTEMS_BLKIO_CAPABILITIES, &dd->capabilities) < 0) { 263 268 dd->capabilities = 0; 269 } 270 271 sc = rtems_bdbuf_set_block_size(dd, block_size); 272 if (sc != RTEMS_SUCCESSFUL) { 273 dd->ioctl = null_handler; 274 rtems_disk_delete(dev); 275 disk_unlock(); 276 277 return sc; 264 278 } 265 279 … … 320 334 dd->start = begin_block; 321 335 dd->size = block_count; 322 dd->block_size = dd->media_block_size = physical_disk->block_size; 336 dd->block_size = physical_disk->block_size; 337 dd->media_block_size = physical_disk->media_block_size; 338 dd->block_to_media_block_shift = physical_disk->block_to_media_block_shift; 339 dd->bds_per_group = physical_disk->bds_per_group; 323 340 dd->ioctl = physical_disk->ioctl; 324 341 dd->driver_data = physical_disk->driver_data; -
cpukit/libblock/src/flashdisk.c
r7afcb26 rabe87b9 178 178 uint32_t block_count; /**< The number of avail. blocks. */ 179 179 uint32_t unavail_blocks; /**< The number of unavail blocks. */ 180 uint32_t starvation_threshold; /**< Erased blocks starvation threshold. */ 180 181 uint32_t erased_blocks; /**< The number of erased blocks. */ 181 182 … … 281 282 rtems_fdisk_is_erased_blocks_starvation (rtems_flashdisk* fd) 282 283 { 283 bool starvation = fd->erased_blocks < fd-> unavail_blocks;284 bool starvation = fd->erased_blocks < fd->starvation_threshold; 284 285 285 286 if (starvation) … … 1261 1262 for (spage = 0; spage < ssc->pages; spage++) 1262 1263 { 1263 uint32_t dst_pages;1264 1264 rtems_fdisk_page_desc* spd = &ssc->page_descriptors[spage]; 1265 1266 if (!dsc && ssc->pages_active > 0) 1267 { 1268 rtems_fdisk_error ("recycle: no available dst segment"); 1269 return EIO; 1270 } 1265 1271 1266 1272 if (rtems_fdisk_page_desc_flags_set (spd, RTEMS_FDISK_PAGE_ACTIVE) && 1267 1273 !rtems_fdisk_page_desc_flags_set (spd, RTEMS_FDISK_PAGE_USED)) 1268 1274 { 1275 uint32_t dst_pages; 1269 1276 rtems_fdisk_page_desc* dpd; 1270 1277 uint32_t dpage; … … 1352 1359 dst_pages = rtems_fdisk_seg_pages_available (dsc); 1353 1360 if (dst_pages == 0) 1354 {1355 1361 dsc = rtems_fdisk_seg_most_available (&fd->available); 1356 if (!dsc)1357 {1358 rtems_fdisk_error ("recycle: no available dst segment");1359 return EIO;1360 }1361 }1362 1362 1363 1363 (*pages)--; … … 1406 1406 if (rtems_fdisk_is_erased_blocks_starvation (fd)) 1407 1407 { 1408 #if RTEMS_FDISK_TRACE 1409 rtems_fdisk_printf (fd, " resolve starvation"); 1410 #endif 1411 1408 1412 ssc = rtems_fdisk_segment_queue_pop_head (&fd->used); 1409 1413 if (!ssc) … … 1483 1487 1484 1488 if (!ssc || (pages == 0) || ((compacted_segs + segments) == 1)) 1489 { 1490 #if RTEMS_FDISK_TRACE 1491 rtems_fdisk_printf (fd, " nothing to compact"); 1492 #endif 1485 1493 break; 1494 } 1486 1495 1487 1496 #if RTEMS_FDISK_TRACE … … 1540 1549 */ 1541 1550 fd->erased_blocks = 0; 1551 fd->starvation_threshold = 0; 1542 1552 for (device = 0; device < fd->device_count; device++) 1543 1553 { … … 1558 1568 sc->pages = 1559 1569 rtems_fdisk_pages_in_segment (sd, fd->block_size) - sc->pages_desc; 1570 if (sc->pages > fd->starvation_threshold) 1571 fd->starvation_threshold = sc->pages; 1560 1572 1561 1573 sc->pages_active = 0; … … 2226 2238 rtems_fdisk_printf (fd, "Block count\t%d", fd->block_count); 2227 2239 rtems_fdisk_printf (fd, "Unavail blocks\t%d", fd->unavail_blocks); 2240 rtems_fdisk_printf (fd, "Starvation threshold\t%d", fd->starvation_threshold); 2228 2241 rtems_fdisk_printf (fd, "Starvations\t%d", fd->starvations); 2229 2242 count = rtems_fdisk_segment_count_queue (&fd->available); -
cpukit/libcsupport/include/sys/ioccom.h
r7afcb26 rabe87b9 37 37 #define _SYS_IOCCOM_H_ 38 38 39 #include < sys/types.h>39 #include <rtems.h> 40 40 41 41 /* … … 77 77 #define RTEMS_IO_SNDWAKEUP 5 78 78 79 typedef enum { 80 RTEMS_IOCTL_SELECT_OTHER, 81 RTEMS_IOCTL_SELECT_READ, 82 RTEMS_IOCTL_SELECT_WRITE 83 } rtems_ioctl_select_kind; 84 85 /** 86 * @brief IO control request for select() support. 87 * 88 * The driver shall return 89 * - 1, when the request can be fullfilled immediately, 90 * - 0, when the request task must wait, and 91 * - -1, in case of an error. 92 */ 93 typedef struct { 94 rtems_ioctl_select_kind kind; 95 rtems_id request_task_id; 96 } rtems_ioctl_select_request; 97 98 #define RTEMS_IOCTL_SELECT _IOW('R', 0, rtems_ioctl_select_request) 99 100 #define RTEMS_IOCTL_SELECT_EVENT RTEMS_EVENT_24 101 79 102 /* copied from libnetworking/sys/filio.h and commented out there */ 80 103 /* Generic file-descriptor ioctl's. */ -
cpukit/libcsupport/src/termios.c
r7afcb26 rabe87b9 510 510 } 511 511 512 static bool 513 rtems_termios_can_read (const struct rtems_termios_tty *tty) 514 { 515 if (tty->cindex == tty->ccount) { 516 if (tty->device.outputUsesInterrupts == TERMIOS_IRQ_DRIVEN) { 517 return tty->rawInBuf.Head != tty->rawInBuf.Tail; 518 } else { 519 return true; 520 } 521 } else { 522 return tty->cindex < tty->ccount; 523 } 524 } 525 526 static bool 527 rtems_termios_can_write (const struct rtems_termios_tty *tty) 528 { 529 /* 530 * Termios has no non-blocking writes. In case the raw output buffer is 531 * full, we wait for the interrupt or poll. 532 */ 533 return true; 534 } 535 536 static void 537 rtems_termios_select_wakeup (struct termios *tty, void *arg) 538 { 539 rtems_id task_id = (rtems_id) arg; 540 rtems_status_code sc = rtems_event_send (task_id, RTEMS_IOCTL_SELECT_EVENT); 541 if (sc != RTEMS_SUCCESSFUL) 542 rtems_fatal_error_occurred (sc); 543 } 544 545 static int 546 rtems_termios_select (struct rtems_termios_tty *tty, 547 const rtems_ioctl_select_request *request) 548 { 549 int rv = 0; 550 551 rtems_interrupt_level level; 552 rtems_interrupt_disable(level); 553 switch (request->kind) { 554 case RTEMS_IOCTL_SELECT_READ: 555 if (rtems_termios_can_read (tty)) { 556 rv = 1; 557 } else { 558 tty->tty_rcvwakeup = 0; 559 tty->tty_rcv.sw_pfn = rtems_termios_select_wakeup; 560 tty->tty_rcv.sw_arg = (void *) request->request_task_id; 561 } 562 break; 563 case RTEMS_IOCTL_SELECT_WRITE: 564 if (rtems_termios_can_write (tty)) { 565 rv = 1; 566 } else { 567 tty->tty_snd.sw_pfn = rtems_termios_select_wakeup; 568 tty->tty_snd.sw_arg = (void *) request->request_task_id; 569 } 570 break; 571 default: 572 break; 573 } 574 rtems_interrupt_enable(level); 575 576 return rv; 577 } 578 512 579 rtems_status_code 513 580 rtems_termios_ioctl (void *arg) … … 531 598 sc = RTEMS_INVALID_NUMBER; 532 599 } 600 break; 601 602 case RTEMS_IOCTL_SELECT: 603 args->ioctl_return = rtems_termios_select (tty, args->buffer); 533 604 break; 534 605 -
cpukit/libnetworking/rtems/rtems_select.c
r7afcb26 rabe87b9 30 30 #include <net/if.h> 31 31 #include <net/route.h> 32 33 RTEMS_STATIC_ASSERT(RTEMS_IOCTL_SELECT_OTHER == 0, other); 34 RTEMS_STATIC_ASSERT(RTEMS_IOCTL_SELECT_READ == FREAD, fread); 35 RTEMS_STATIC_ASSERT(RTEMS_IOCTL_SELECT_WRITE == FWRITE, fwrite); 36 RTEMS_STATIC_ASSERT(RTEMS_IOCTL_SELECT_EVENT == SBWAIT_EVENT, sbwait_event); 32 37 33 38 /* … … 89 94 int n = 0; 90 95 static int flag[3] = { FREAD, FWRITE, 0 }; 96 int update_obits; 97 int rv; 98 rtems_ioctl_select_request select_request; 99 100 select_request.request_task_id = tid; 91 101 92 102 for (msk = 0; msk < 3; msk++) { … … 99 109 continue; 100 110 bits &= ~bit; 111 update_obits = 0; 101 112 so = rtems_bsdnet_fdToSocket (fd); 102 if (so == NULL) 103 return (EBADF); 104 if (socket_select (so, flag[msk], tid)) { 113 if (so != NULL) { 114 if (socket_select (so, flag[msk], tid)) { 115 update_obits = 1; 116 } 117 } else { 118 select_request.kind = flag[msk]; 119 120 rtems_bsdnet_semaphore_release(); 121 rv = ioctl (fd, RTEMS_IOCTL_SELECT, &select_request); 122 rtems_bsdnet_semaphore_obtain(); 123 if (rv == 1) { 124 update_obits = 1; 125 } else if (rv != 0) { 126 return (EBADF); 127 } 128 } 129 130 if (update_obits) { 105 131 obits[msk][fd/NFDBITS] |= 106 132 (1 << (fd % NFDBITS)); -
cpukit/sapi/Makefile.am
r7afcb26 rabe87b9 17 17 include_rtems_HEADERS += include/rtems/mptables.h 18 18 include_rtems_HEADERS += include/rtems/cbs.h 19 include_rtems_HEADERS += include/rtems/rbheap.h 19 20 include_rtems_HEADERS += include/rtems/rbtree.h 20 21 include_rtems_HEADERS += include/rtems/sptables.h … … 39 40 src/rtemsapi.c src/extensiondata.c src/getversionstring.c \ 40 41 src/chainappendnotify.c src/chaingetnotify.c src/chaingetwait.c \ 41 src/chainprependnotify.c 42 src/chainprependnotify.c src/rbheap.c 42 43 libsapi_a_CPPFLAGS = $(AM_CPPFLAGS) 43 44 -
cpukit/sapi/inline/rtems/rbtree.inl
r7afcb26 rabe87b9 272 272 } 273 273 274 /** @brief Find the node's in-order predecessor 275 * 276 * This function returns a pointer to the in-order predecessor 277 * of @a the_node if it exists, and NULL if not. 274 /** 275 * @copydoc _RBTree_Predecessor_unprotected() 276 */ 277 RTEMS_INLINE_ROUTINE rtems_rbtree_node* rtems_rbtree_predecessor_unprotected( 278 const rtems_rbtree_control *rbtree, 279 const rtems_rbtree_node *node 280 ) 281 { 282 return _RBTree_Predecessor_unprotected( rbtree, node ); 283 } 284 285 /** 286 * @copydoc _RBTree_Predecessor() 278 287 */ 279 288 RTEMS_INLINE_ROUTINE rtems_rbtree_node* rtems_rbtree_predecessor( 280 rtems_rbtree_node *the_node 281 ) 282 { 283 return _RBTree_Predecessor( the_node ); 284 } 285 286 /** @brief Find the node's in-order successor 287 * 288 * This function returns a pointer to the in-order successor 289 * of @a the_node if it exists, and NULL if not. 289 const rtems_rbtree_control *rbtree, 290 const rtems_rbtree_node *node 291 ) 292 { 293 return _RBTree_Predecessor( rbtree, node ); 294 } 295 296 /** 297 * @copydoc _RBTree_Successor_unprotected() 298 */ 299 RTEMS_INLINE_ROUTINE rtems_rbtree_node* rtems_rbtree_successor_unprotected( 300 const rtems_rbtree_control *rbtree, 301 const rtems_rbtree_node *node 302 ) 303 { 304 return _RBTree_Successor_unprotected( rbtree, node ); 305 } 306 307 /** 308 * @copydoc _RBTree_Successor() 290 309 */ 291 310 RTEMS_INLINE_ROUTINE rtems_rbtree_node* rtems_rbtree_successor( 292 rtems_rbtree_node *the_node 293 ) 294 { 295 return _RBTree_Successor( the_node ); 311 const rtems_rbtree_control *rbtree, 312 const rtems_rbtree_node *node 313 ) 314 { 315 return _RBTree_Successor( rbtree, node ); 296 316 } 297 317 -
cpukit/sapi/preinstall.am
r7afcb26 rabe87b9 65 65 PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/cbs.h 66 66 67 $(PROJECT_INCLUDE)/rtems/rbheap.h: include/rtems/rbheap.h $(PROJECT_INCLUDE)/rtems/$(dirstamp) 68 $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/rbheap.h 69 PREINSTALL_FILES += $(PROJECT_INCLUDE)/rtems/rbheap.h 70 67 71 $(PROJECT_INCLUDE)/rtems/rbtree.h: include/rtems/rbtree.h $(PROJECT_INCLUDE)/rtems/$(dirstamp) 68 72 $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/rtems/rbtree.h -
cpukit/score/Makefile.am
r7afcb26 rabe87b9 266 266 libscore_a_SOURCES += src/rbtree.c \ 267 267 src/rbtreeextract.c src/rbtreefind.c src/rbtreefindheader.c \ 268 src/rbtreeget.c src/rbtreeinsert.c src/rbtreepeek.c 268 src/rbtreeget.c src/rbtreeinsert.c src/rbtreepeek.c src/rbtreenext.c \ 269 src/rbtreeiterate.c 269 270 270 271 ## THREAD_C_FILES -
cpukit/score/cpu/nios2/nios2-mpu-add-region.c
r7afcb26 rabe87b9 81 81 uint32_t mpuacc = 0; 82 82 83 if ( _Nios2_MPU_Is_valid_index( config, data, index) ) {83 if ( _Nios2_MPU_Is_valid_index( config, index, data ) ) { 84 84 if ( !force ) { 85 85 _Nios2_MPU_Get_region_registers( index, data, &mpubase, &mpuacc ); -
cpukit/score/cpu/nios2/nios2-mpu-descriptor.c
r7afcb26 rabe87b9 89 89 ); 90 90 bool ok = is_valid_base_and_end 91 && _Nios2_MPU_Is_valid_index( config, desc-> data, desc->index)91 && _Nios2_MPU_Is_valid_index( config, desc->index, desc->data ) 92 92 && _Nios2_Is_valid_permission( desc->data, desc->perm ) 93 93 && !(!desc->data && desc->cacheable) … … 107 107 return ok; 108 108 } 109 110 bool _Nios2_MPU_Get_region_descriptor( 111 const Nios2_MPU_Configuration *config, 112 int index, 113 bool data, 114 Nios2_MPU_Region_descriptor *desc 115 ) 116 { 117 bool ok = _Nios2_MPU_Is_valid_index( config, index, data ); 118 119 if ( ok ) { 120 uint32_t mpubase; 121 uint32_t mpuacc; 122 123 _Nios2_MPU_Get_region_registers( index, data, &mpubase, &mpuacc ); 124 125 desc->index = index; 126 desc->base = (void *) (mpubase & NIOS2_MPUBASE_BASE_MASK); 127 if ( config->region_uses_limit ) { 128 desc->end = (void *) (mpuacc & NIOS2_MPUACC_LIMIT_MASK); 129 } else { 130 desc->end = (void *) ((mpuacc & NIOS2_MPUACC_MASK_MASK) + 1); 131 } 132 desc->perm = (mpuacc & NIOS2_MPUACC_PERM_MASK) >> NIOS2_MPUACC_PERM_OFFSET; 133 desc->data = data; 134 desc->cacheable = (mpuacc & NIOS2_MPUACC_C) != 0; 135 desc->read = (mpuacc & NIOS2_MPUACC_RD) != 0; 136 desc->write = (mpuacc & NIOS2_MPUACC_WR) != 0; 137 } 138 139 return ok; 140 } -
cpukit/score/cpu/nios2/rtems/score/nios2-utility.h
r7afcb26 rabe87b9 387 387 static inline bool _Nios2_MPU_Is_valid_index( 388 388 const Nios2_MPU_Configuration *config, 389 bool data,390 int index389 int index, 390 bool data 391 391 ) 392 392 { … … 400 400 uint32_t *mpubase, 401 401 uint32_t *mpuacc 402 ); 403 404 bool _Nios2_MPU_Get_region_descriptor( 405 const Nios2_MPU_Configuration *config, 406 int index, 407 bool data, 408 Nios2_MPU_Region_descriptor *desc 402 409 ); 403 410 … … 452 459 } 453 460 461 static inline void _Nios2_MPU_Set_region_registers( 462 uint32_t mpubase, 463 uint32_t mpuacc 464 ) 465 { 466 _Nios2_Set_ctlreg_mpubase( mpubase ); 467 _Nios2_Set_ctlreg_mpuacc( mpuacc ); 468 _Nios2_Flush_pipeline(); 469 } 470 454 471 static inline void _Nios2_MPU_Enable( void ) 455 472 { -
cpukit/score/include/rtems/score/rbtree.h
r7afcb26 rabe87b9 322 322 ); 323 323 324 /** 325 * @brief Returns the in-order next node of a node. 326 * 327 * @param[in] rbtree The red-black tree. 328 * @param[in] node The node. 329 * @param[in] dir The direction. 330 * 331 * @retval NULL The in-order next node does not exist. 332 * @retval otherwise The next node. 333 */ 334 RBTree_Node *_RBTree_Next_unprotected( 335 const RBTree_Control *rbtree, 336 const RBTree_Node *node, 337 RBTree_Direction dir 338 ); 339 340 /** 341 * @copydoc _RBTree_Next_unprotected() 342 * 343 * The function disables the interrupts protect the operation. 344 */ 345 RBTree_Node *_RBTree_Next( 346 const RBTree_Control *rbtree, 347 const RBTree_Node *node, 348 RBTree_Direction dir 349 ); 350 351 /** 352 * @brief Red-black tree visitor. 353 * 354 * @param[in] node The node. 355 * @param[in] dir The direction. 356 * @param[in] visitor_arg The visitor argument. 357 * 358 * @retval true Stop the iteration. 359 * @retval false Continue the iteration. 360 * 361 * @see _RBTree_Iterate_unprotected(). 362 */ 363 typedef bool (*RBTree_Visitor)( 364 const RBTree_Node *node, 365 RBTree_Direction dir, 366 void *visitor_arg 367 ); 368 369 /** 370 * @brief Red-black tree iteration. 371 * 372 * @param[in] rbtree The red-black tree. 373 * @param[in] dir The direction. 374 * @param[in] visitor The visitor. 375 * @param[in] visitor_arg The visitor argument. 376 */ 377 void _RBTree_Iterate_unprotected( 378 const RBTree_Control *rbtree, 379 RBTree_Direction dir, 380 RBTree_Visitor visitor, 381 void *visitor_arg 382 ); 383 324 384 #ifndef __RTEMS_APPLICATION__ 325 385 #include <rtems/score/rbtree.inl> -
cpukit/score/inline/rtems/score/rbtree.inl
r7afcb26 rabe87b9 377 377 } 378 378 379 /** @brief Find the nodes in-order predecessor 380 * 381 * This function returns a pointer to the in-order predecessor 382 * of @a the_node if it exists, and NULL if not. 379 /** 380 * @brief Returns the predecessor of a node. 381 * 382 * @param[in] rbtree The red-black tree. 383 * @param[in] node The node. 384 * 385 * @retval NULL The predecessor does not exist. 386 * @retval otherwise The predecessor node. 387 */ 388 RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Predecessor_unprotected( 389 const RBTree_Control *rbtree, 390 const RBTree_Node *node 391 ) 392 { 393 return _RBTree_Next_unprotected( rbtree, node, RBT_LEFT ); 394 } 395 396 /** 397 * @copydoc _RBTree_Predecessor_unprotected() 398 * 399 * The function disables the interrupts protect the operation. 383 400 */ 384 401 RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Predecessor( 385 RBTree_Node *the_node 386 ) 387 { 388 RBTree_Node* iter_node; 389 if (!the_node) return NULL; 390 iter_node = the_node->child[RBT_LEFT]; 391 if (!iter_node) return NULL; 392 while (iter_node->child[RBT_RIGHT]) { 393 iter_node = iter_node->child[RBT_RIGHT]; 394 } 395 return iter_node; 396 } 397 398 /** @brief Find the nodes in-order successor 399 * 400 * This function returns a pointer to the in-order successor 401 * of @a the_node if it exists, and NULL if not. 402 const RBTree_Control *rbtree, 403 const RBTree_Node *node 404 ) 405 { 406 return _RBTree_Next( rbtree, node, RBT_LEFT ); 407 } 408 409 /** 410 * @brief Returns the successor of a node. 411 * 412 * @param[in] rbtree The red-black tree. 413 * @param[in] node The node. 414 * 415 * @retval NULL The successor does not exist. 416 * @retval otherwise The successor node. 417 */ 418 RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Successor_unprotected( 419 const RBTree_Control *rbtree, 420 const RBTree_Node *node 421 ) 422 { 423 return _RBTree_Next_unprotected( rbtree, node, RBT_RIGHT ); 424 } 425 426 /** 427 * @copydoc _RBTree_Successor_unprotected() 428 * 429 * The function disables the interrupts protect the operation. 402 430 */ 403 431 RTEMS_INLINE_ROUTINE RBTree_Node *_RBTree_Successor( 404 RBTree_Node *the_node 405 ) 406 { 407 RBTree_Node* iter_node; 408 if (!the_node) return NULL; 409 iter_node = the_node->child[RBT_RIGHT]; 410 if (!iter_node) return NULL; 411 while (iter_node->child[RBT_LEFT]) { 412 iter_node = iter_node->child[RBT_LEFT]; 413 } 414 return iter_node; 432 const RBTree_Control *rbtree, 433 const RBTree_Node *node 434 ) 435 { 436 return _RBTree_Next( rbtree, node, RBT_RIGHT ); 415 437 } 416 438 -
testsuites/libtests/Makefile.am
r7afcb26 rabe87b9 6 6 7 7 SUBDIRS = POSIX 8 SUBDIRS += rbheap01 8 9 SUBDIRS += flashdisk01 9 10 -
testsuites/libtests/configure.ac
r7afcb26 rabe87b9 44 44 # Explicitly list all Makefiles here 45 45 AC_CONFIG_FILES([Makefile 46 rbheap01/Makefile 46 47 syscall01/Makefile 47 48 flashdisk01/Makefile -
testsuites/libtests/flashdisk01/test-file-system.c
r7afcb26 rabe87b9 597 597 if (pos != (off_t) -1) { 598 598 size_t buf_size = sizeof(fs->buf); 599 size_t offset = HEADER_SIZE + 1; 599 600 long random = lrand48(); 600 size_t out = get_bucket_with_random(buf_size , random) + 1;601 size_t out = get_bucket_with_random(buf_size - offset, random) + offset; 601 602 ssize_t out_actual = 0; 602 603 uint8_t *buf = fs->buf; … … 605 606 size_t word_count = 0; 606 607 size_t w = 0; 607 608 /* Must be big enough for the header */609 out = out >= HEADER_SIZE ? out : HEADER_SIZE;610 608 611 609 /* -
testsuites/sptests/sprbtree01/init.c
r7afcb26 rabe87b9 441 441 442 442 puts( "INIT - Verify rtems_rbtree_predecessor/successor"); 443 p = rtems_rbtree_predecessor( p);443 p = rtems_rbtree_predecessor(&rbtree1, p); 444 444 if(p && rtems_rbtree_container_of(p,test_node,Node)->id != 29) { 445 445 puts ("INIT - ERROR ON RBTREE ID MISMATCH"); … … 447 447 } 448 448 p = rtems_rbtree_find(&rbtree1, &search_node.Node); 449 p = rtems_rbtree_successor( p);449 p = rtems_rbtree_successor(&rbtree1, p); 450 450 if(p && rtems_rbtree_container_of(p,test_node,Node)->id != 31) { 451 451 puts ("INIT - ERROR ON RBTREE ID MISMATCH");
Note: See TracChangeset
for help on using the changeset viewer.