From b8ed800f3219eaa2a18c2b1369933c61605a3e3f Mon Sep 17 00:00:00 2001 From: Giovanni Di Sirio Date: Fri, 20 Mar 2020 08:57:53 +0000 Subject: [PATCH] Fixed bug #1076. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/stable_20.3.x@13458 27425a3e-05d8-49a3-a47f-9c15f0e5edd8 --- os/rt/src/chmtx.c | 62 +++++--------- readme.txt | 214 +--------------------------------------------- 2 files changed, 24 insertions(+), 252 deletions(-) diff --git a/os/rt/src/chmtx.c b/os/rt/src/chmtx.c index c590c2aa0..e7744f144 100644 --- a/os/rt/src/chmtx.c +++ b/os/rt/src/chmtx.c @@ -487,27 +487,31 @@ void chMtxUnlockS(mutex_t *mp) { void chMtxUnlockAllS(void) { thread_t *ctp = currp; - while (ctp->mtxlist != NULL) { - mutex_t *mp = ctp->mtxlist; - ctp->mtxlist = mp->next; - if (chMtxQueueNotEmptyS(mp)) { + if (ctp->mtxlist != NULL) { + do { + mutex_t *mp = ctp->mtxlist; + ctp->mtxlist = mp->next; + if (chMtxQueueNotEmptyS(mp)) { + thread_t *tp; #if CH_CFG_USE_MUTEXES_RECURSIVE == TRUE - mp->cnt = (cnt_t)1; + mp->cnt = (cnt_t)1; #endif - thread_t *tp = queue_fifo_remove(&mp->queue); - mp->owner = tp; - mp->next = tp->mtxlist; - tp->mtxlist = mp; - (void) chSchReadyI(tp); - } - else { + tp = queue_fifo_remove(&mp->queue); + mp->owner = tp; + mp->next = tp->mtxlist; + tp->mtxlist = mp; + (void) chSchReadyI(tp); + } + else { #if CH_CFG_USE_MUTEXES_RECURSIVE == TRUE - mp->cnt = (cnt_t)0; + mp->cnt = (cnt_t)0; #endif - mp->owner = NULL; - } + mp->owner = NULL; + } + } while (ctp->mtxlist != NULL); + ctp->prio = ctp->realprio; + chSchRescheduleS(); } - ctp->prio = ctp->realprio; } /** @@ -522,33 +526,9 @@ void chMtxUnlockAllS(void) { * @api */ void chMtxUnlockAll(void) { - thread_t *ctp = currp; chSysLock(); - if (ctp->mtxlist != NULL) { - do { - mutex_t *mp = ctp->mtxlist; - ctp->mtxlist = mp->next; - if (chMtxQueueNotEmptyS(mp)) { -#if CH_CFG_USE_MUTEXES_RECURSIVE == TRUE - mp->cnt = (cnt_t)1; -#endif - thread_t *tp = queue_fifo_remove(&mp->queue); - mp->owner = tp; - mp->next = tp->mtxlist; - tp->mtxlist = mp; - (void) chSchReadyI(tp); - } - else { -#if CH_CFG_USE_MUTEXES_RECURSIVE == TRUE - mp->cnt = (cnt_t)0; -#endif - mp->owner = NULL; - } - } while (ctp->mtxlist != NULL); - ctp->prio = ctp->realprio; - chSchRescheduleS(); - } + chMtxUnlockAllS(); chSysUnlock(); } diff --git a/readme.txt b/readme.txt index ed48b74f4..bf0893f99 100644 --- a/readme.txt +++ b/readme.txt @@ -73,214 +73,6 @@ *** Releases and Change Log *** ***************************************************************************** -*** Next *** -- EXT: Updated lwIP to version 2.1.2. -- HAL: Added support for timers 9..17, 20..22 to STM32 PWM driver. -- HAL: Added support for timers 9..17, 20..22 to STM32 ICU driver. -- HAL: Added support for timers 10 and 13 to STM32 GPT driver. -- HAL: Added support for timers 9..14 to STM32 ST driver. -- HAL: STM32 ST driver is now integrated with new IRQ infrastructure and - performs cross-checks with GPT, ICU and PWM drivers on timers usage. -- HAL: Improved support for shared handlers. Now there are centralized - inclusion modules (.inc) containing shared handlers. The new modules - can be included by the various STM32 platforms. So far the new system - has been implemented for STM32G0, STM32G4, STM32L0, STM32L4, STM32L4+, - STM32F7, STM3277. It shall be gradually introduced for all the others. -- HAL: Idle callback support for STM32 USARTv1 UART driver. -- LIB: Added support for asynchronous jobs queues to OSLIB. -- LIB: Added support for delegate threads to OSLIB. -- NIL: Improvements to messages, new functions chMsgWaitS(), - chMsgWaitTimeoutS(), chMsgWaitTimeout(). -- RT: Improvements to messages, new functions chMsgWaitS(), - chMsgWaitTimeoutS(), chMsgWaitTimeout(), chMsgPollS(), - chMsgPoll(). -- HAL: TRNG support added to STM32F7xx, STM32G0xx, STM32G4xx, - STM32H7xx and STM32L0xx. -- NEW: Added support for .cc files extensions in makefiles. -- HAL: New RTCv3 driver for STM32G0xx and STM32G4xx. -- HAL: Added support for DAC3 and DAC4 in STM32 DACv1 driver. -- NIL: New functions: chSemResetWithMessageI() and chSemResetWithMessage(). -- RT: New functions: chSemResetWithMessageI() and chSemResetWithMessage(). -- HAL: Added canTryAbortX() function to CAN driver, implemented - for STM32 CANv1. -- HAL: Added error handling to WSPI driver, now LLDs can report error - conditions to upper layers. -- NEW: Added mcuconf.h generator for STM32G4x1, STM32G4x3 and STM32G4x4. -- HAL: STM32 DMAv1 driver improvements and generalization, added support - for 8 channels. -- HAL: Initial STM32G4xx support in HAL. -- HAL: Added script to generate board files from command line, just - run ./os/hal/boards/genboard.sh with the board directory name - as parameter. -- HAL: Modified the ST driver to support, optionally, multiple additional - callback-capable channels. -- RT: Removed regarm_t type from port layer and replaced with uint32_t, this - avoids a lot of casts in the code. -- NIL: Removed regarm_t type from port layer and replaced with uint32_t, this - avoids a lot of casts in the code. -- NEW: ARM SandBox subsystem added. -- LIB: Added a cache class to OSLIB. -- NEW: Added an option to change the shell thread name. -- HAL: Made bus acquire/release functions in SNOR driver public. -- NEW: Added mcuconf.h generator for STM32L052/L053/L062/L063. -- NEW: Added mcuconf.h generator for STM32L072/L073. -- HAL: Initial STM32G0xx support in HAL. -- HAL: Added STM32L452 support in HAL. -- HAL: Implemented TIMPRE setting for STM32F7xx HAL. -- NEW: Merged FatFS 0.13c. -- NEW: Added a "library generator" project for RT, it allows to - generate a library with a pre-configured RT. It also includes - an "header generator" able to generate an unified "ch.h" with - all options resolved. -- LIB: Improved OSLIB initialization. -- NEW: Lots of style fixes thanks to the new tool. -- NEW: Code style checker tool added. -- NEW: Added and embedded flash driver model in HAL. Added an implementation - for STM32F1xx, STM32L4xx, STM32L4xx+. -- HAL: Modified AES GCM function signatures. -- HAL: Added H753 to all H7 mcuconf.h files. -- HAL: Added transactional updates to MFS. Doubled data headers magic numbers - for improved safety and to keep the final write aligned to 64 bits, it - is required for STM32 ECC flash. -- VAR: Modified syscalls.c to allocate memory from bottom upward, ChibiOS - allocators take memory from top downward. This way the memory taken - using _sbrk_r() does not contain "holes" caused by other allocators. -- LIB: Re-introduced missing chGuardedPoolGetCounterI() function to guarded - pools allocator. -- LIB: Modified core allocator to be able to get blocks starting from bottom - or top of the available memory range. - Removed alignment enforcement for requested block size. Alignment is - only ensured on the returned pointer, this should reduce memory usage - is some cases. -- HAL: Added a new interface for range-finder devices (used by EX). -- HAL: Added mcuconf.h updater tool for STM32F407 (backported to 19.1.1). -- NIL: Integrated NIL 4.0. -- FIX: Fixed state check in CMSIS osKernelInitialize() wrapper (bug #1075) - (backported to 19.1.4)(backported to 18.2.3). -- FIX: Fixed missing IRQ disabling in ADCv1 and ADCv3 STM32 drivers (bug #1073) - (backported to 19.1.4)(backported to 18.2.3). -- FIX: Fixed missing parenthesis in ADC _adc_isr_error_code macro (bug #1072) - (backported to 19.1.4)(backported to 18.2.3). -- FIX: Fixed invalid macro check in test library (bug #1071) - (backported to 19.1.4). -- FIX: Fixed non-standard declaration in STM32 ADCv3 driver (bug #1070) - (backported to 19.1.4)(backported to 18.2.3). -- FIX: Fixed problem in the I2C fallback driver (bug #1069) - (backported to 19.1.4)(backported to 18.2.3). -- FIX: Fixed TIM8 missing on STM32H7xx (bug #1068) - (backported to 19.1.4)(backported to 18.2.3). -- FIX: Fixed Sharing issues with GPT TIMv1 driver (bug #1067) - (backported to 19.1.4)(backported to 18.2.3). -- FIX: Fixed incorrect pointer type in lwipthread.c low_level_input causes - panic on packet reception (bug #1009) - (backported to 19.1.4)(backported to 18.2.3). -- FIX: Fixed wrong check on STM32_DAC_DUAL_MODE in DACv1 STM32 driver - (bug #1065)(backported to 19.1.4)(backported to 18.2.3). -- FIX: Fixed I2Cv1 extra interrupts (bug #1064) - (backported to 19.1.4)(backported to 18.2.3). -- FIX: Fixed I2C4 broken on STM32H7xx (bug #1063) - (backported to 19.1.4)(backported to 18.2.3). -- FIX: Fixed I2C fallback driver broken (bug #1061) - (backported to 19.1.4)(backported to 18.2.3). -- FIX: Fixed STM32 ADC1 sample time macros (bug #1059) - (backported to 19.1.4)(backported to 18.2.3). -- FIX: Fixed STM32 ADCv1 error callback disabled on some devices (bug #1058) - (backported to 19.1.4)(backported to 18.2.3). -- FIX: Fixed error in uartSendFullTimeout() HAL function (bug #1057) - (backported to 19.1.4)(backported to 18.2.3). -- FIX: Fixed OS-less Cortex-M OSAL problem with critical zones (bug #1056) - (backported to 19.1.4)(backported to 18.2.3). -- FIX: Fixed missing RTCv1 definitions in STM32F37x registry (bug #1054) - (backported to 19.1.4). -- FIX: Fixed assertion triggered in STM32 OTGv1 driver (bug #1053) - (backported to 19.1.4)(backported to 18.2.3). -- FIX: Fixed STM32 CANv1 compile fails if CAN3 is used alone (bug #1052) - (backported to 19.1.4)(backported to 18.2.3). -- FIX: Fixed palIsLineEventEnabledX() compile fail on STM32L4 (bug #1051) - (backported to 19.1.4). -- FIX: Fixed wrong clock disable check in STM32 DACv1 driver (bug #1050) - (backported to 19.1.4)(backported to 18.2.3). -- FIX: Fixed clock tree differences in STM32F4 family (bug #1049) - (backported to 19.1.4)(backported to 18.2.3). -- FIX: Fixed wrong debug check in STM32 I2Cv1 driver (bug #1048) - (backported to 19.1.4)(backported to 18.2.3). -- FIX: Fixed warning in simulator PAL driver (bug #1047) - (backported to 19.1.4)(backported to 18.2.3). -- FIX: Fixed board initialization failure on STM32F030x6 (bug #1046) - (backported to 19.1.4)(backported to 18.2.3). -- FIX: Fixed STM32 I2Cv1 BTF event not cleared (bug #1045) - (backported to 19.1.4)(backported to 18.2.3). -- FIX: Fixed serial NOR driver wrong macro definition (bug #1044) - (backported to 19.1.4). -- FIX: Fixed STM32F7 I2C registry dma channel (bug #1043) - (backported to 19.1.4)(backported to 18.2.3). -- FIX: Fixed missing dummy cycles in memory map mode on STM32 QSPI driver - (bug #1042)(backported to 19.1.4). -- FIX: Fixed missing DMA definitions for STM32F412 I2C3 (bug #1041) - (backported to 19.1.4)(backported to 18.2.3). -- FIX: Fixed misplaced parenthesis in hal_files.h (bug #1040) - (backported to 19.1.4). -- FIX: Fixed wrong day-of-the-week in STM32 RTCv2 driver (bug #1039). -- FIX: Fixed missing bracket in MX25 flash driver (bug #1038) - (backported to 19.1.3). -- FIX: Fixed some M7 demos compile as M4 (bug #1037)(backported to 19.1.3). -- FIX: Fixed missing I2C4 RCC definitions for L4/L4+ (bug #1036) - (backported to 19.1.3)(backported to 18.2.3). -- FIX: Fixed missing delay after STM32 wait states setup (bug #1035) - (backported to 19.1.3)(backported to 18.2.3). -- FIX: Fixed reduced time slices in RT (bug #1034) - (backported to 19.1.3)(backported to 18.2.3). -- FIX: Fixed GCC scatter files alignment problem (bug #1033) - (backported to 19.1.3)(backported to 18.2.3). -- FIX: Fixed long intervals fail when interval type is larger than time type - (bug #1031)(backported to 19.1.3)(backported to 18.2.3). -- FIX: Fixed Round Robin check missing when in tick-less mode (bug #1030) - (backported to 19.1.3)(backported to 18.2.3). -- FIX: Fixed RCC_AHB1ENR_BKPSRAMEN not present in all STMF4xx devices - (bug #1029)(backported to 19.1.3)(backported to 18.2.3). -- FIX: Fixed MPU fix #1027 broke stack checking on Cortex-M devices without - MPU (bug #1028)(backported to 19.1.3)(backported to 18.2.3). -- FIX: Fixed MPU setup missing on thread start (bug #1027) - (backported to 19.1.2)(backported to 18.2.3). -- FIX: Fixed invalid I2C4 DMAs for STM32F76x (bug #1026) - (backported to 19.1.2)(backported to 18.2.3). -- FIX: Fixed invalid STM32_UART7_RX_DMA_CHN for STM32F469 (bug #1025) - (backported to 19.1.2)(backported to 18.2.3). -- FIX: Fixed invalid EXTI registry constant for STM32L4+ (bug #1024) - (backported to 19.1.2). -- FIX: Fixed missing RTC definitions in STM32L1xx registry (bug #1023) - (backported to 19.1.2). -- FIX: Fixed missing EXTI driver integration on some platforms (bug #1022) - (backported to 19.1.2). -- FIX: Fixed various UART clock naming errors in STM32H7 HAL (bug #1021) - (backported to 19.1.1)(backported to 18.2.3). -- FIX: Fixed missing STM32L4+ check in GPIOv3 driver (bug #1020) - (backported to 19.1.1)(backported to 18.2.3). -- FIX: Fixed call to obsolete dmaStreamRelease() in STM32 I2Cv3 driver - (bug #1019)(backported to 19.1.1). -- FIX: Fixed misconfiguration in STM32L4R9I DIscovery board files (bug #1018) - (backported to 19.1.1). -- FIX: Fixed wrong Debug launch configuration in STM32L4Rx demos (bug #1017) - (backported to 19.1.1). -- FIX: Fixed wrong ADCSEL definitions in STM32H7 HAL (bug #1016) - (backported to 19.1.1)(backported to 18.2.3). -- FIX: Fixed chTimeIsInRangeX() failing under some configurations (bug #1015) - (backported to 19.1.1)(backported to 18.2.3). -- FIX: Fixed invalid AXI errata fix for STM32H7xx (bug #1014) - (backported to 19.1.1)(backported to 18.2.3). -- FIX: Fixed invalid ADCD3 initialization in STM32 ADCv3 driver (bug #1013) - (backported to 19.1.1)(backported to 18.2.3). -- FIX: Fixed invalid call to dmaStreamRelease() in STM32 SDIOv1 driver - (bug #1012)(backported to 19.1.1). -- FIX: Fixed wrong license restriction check in Nil (bug #1011) - (backported to 19.1.1)(backported to 18.2.3). -- FIX: Fixed uninitialized variables in STM32 DMA drivers (bug #1010) - (backported to 19.1.1). -- FIX: Fixed wrong mcuconf.h in some testex demos related to STM32F407 - (bug #1008)(backported to 19.1.1)(backported to 18.2.3). -- FIX: Fixed problem in STM32 mcuconf.h template files (bug #1007) - (backported to 19.1.1)(backported to 18.2.3). -- EX: Fixed I2C Acquire bus called twice in the HTS221 initialization - (bug #1006)(backported to 19.1.1)(backported to 18.2.3). -- EX: Fixed missing I2C release bus in LPS22HB initialization (bug #1005) - (backported to 19.1.1). +*** 20.3.1 *** +- FIX: Fixed problem in chMtxUnlockAllS() (bug #1076). +