Skip to content
ReleaseNotes 635 KiB
Newer Older
14001 14002 14003 14004 14005 14006 14007 14008 14009 14010 14011 14012 14013 14014 14015 14016 14017 14018 14019 14020 14021 14022 14023 14024 14025 14026 14027 14028 14029 14030 14031 14032 14033 14034 14035 14036 14037 14038 14039 14040 14041 14042 14043 14044 14045 14046 14047 14048 14049 14050 14051 14052 14053 14054 14055 14056 14057 14058 14059 14060 14061 14062 14063 14064 14065 14066 14067 14068 14069 14070 14071 14072 14073 14074 14075 14076 14077 14078 14079 14080 14081 14082 14083 14084 14085 14086 14087 14088 14089 14090 14091 14092 14093 14094 14095 14096 14097 14098 14099 14100 14101 14102 14103 14104 14105 14106 14107 14108 14109 14110 14111 14112 14113 14114 14115 14116 14117 14118 14119 14120 14121 14122 14123 14124 14125 14126 14127 14128 14129 14130 14131 14132 14133 14134 14135 14136 14137 14138 14139 14140 14141 14142 14143 14144 14145 14146 14147 14148 14149 14150 14151 14152 14153 14154 14155 14156 14157 14158 14159 14160 14161 14162 14163 14164 14165 14166 14167 14168 14169 14170 14171 14172 14173 14174 14175 14176 14177 14178 14179 14180 14181 14182 14183 14184 14185 14186 14187 14188 14189 14190 14191 14192 14193 14194 14195 14196 14197 14198 14199 14200 14201 14202 14203 14204 14205 14206 14207 14208 14209 14210 14211 14212 14213 14214 14215 14216 14217 14218 14219 14220 14221 14222 14223 14224 14225 14226 14227 14228 14229 14230 14231 14232 14233 14234 14235 14236 14237 14238 14239 14240 14241 14242 14243 14244 14245 14246 14247 14248 14249 14250 14251 14252 14253 14254 14255 14256 14257 14258 14259 14260 14261 14262 14263 14264 14265 14266 14267 14268 14269 14270 14271 14272 14273 14274 14275 14276 14277 14278 14279 14280 14281 14282 14283 14284 14285 14286 14287 14288 14289 14290 14291 14292 14293 14294 14295 14296 14297 14298 14299 14300 14301 14302 14303 14304 14305 14306 14307 14308 14309 14310 14311 14312 14313 14314 14315 14316 14317 14318 14319 14320 14321 14322 14323 14324 14325 14326 14327 14328 14329 14330 14331 14332 14333 14334 14335 14336 14337 14338 14339 14340 14341 14342 14343 14344 14345 14346 14347 14348 14349 14350 14351 14352 14353 14354 14355 14356 14357 14358 14359 14360 14361 14362 14363 14364 14365 14366 14367 14368 14369 14370 14371 14372 14373 14374 14375 14376 14377 14378 14379 14380 14381 14382 14383 14384 14385 14386 14387 14388 14389 14390 14391 14392 14393 14394 14395 14396 14397 14398 14399 14400 14401 14402 14403 14404 14405 14406 14407 14408 14409 14410 14411 14412 14413 14414 14415 14416 14417 14418 14419 14420 14421 14422 14423 14424 14425 14426 14427 14428 14429 14430 14431 14432 14433 14434 14435 14436 14437 14438 14439 14440 14441 14442 14443 14444 14445 14446 14447 14448 14449 14450 14451 14452 14453 14454 14455 14456 14457 14458 14459 14460 14461 14462 14463 14464 14465 14466 14467 14468 14469 14470 14471 14472 14473 14474 14475 14476 14477 14478 14479 14480 14481 14482 14483 14484 14485 14486 14487 14488 14489 14490 14491 14492 14493 14494 14495 14496 14497 14498 14499 14500 14501 14502 14503 14504 14505 14506 14507 14508 14509 14510 14511

      - apps/platform:  Create gnu/ subdirectory that contains the one and
        only GNU C++ initialization function.  Remove all other C++
        initialization functions.

Bugfixes.  Only the most critical bugfixes are listed here (see the
ChangeLog for the complete list of bugfixes and for additional, more
detailed bugfix information):

    * Core OS:

      - Priority inheritance:  When CONFIG_SEM_PREALLOCHOLDERS==0, there is
        only a single, hard-allocated holder structure.  This is problem
        because in sem_wait() the holder is released, but needs to remain in
        the holder container until sem_restorebaseprio() is called.  The call
        to sem_restorebaseprio() must be one of the last things the
        sem_wait() does because it can cause the task to be suspended. If in
        sem_wait(), a new task gets the semaphore count then it will fail to
        allocate the holder and will not participate in priority
        inheritance.  This fix is to add two hard-allocated holders in the
        sem_t structure:  One of the old holder and one for the new holder.
      - Priority inheritance:  sem_holder sem_findholder missing
        inintalization of pholder.  sem_findholder would fail and code
        optimization covered this up.  From David Sidrane.
      - Partial Fix priority inheritance CONFIG_SEM_PREALLOCHOLDERS=0.  From
        David Sidrane.
      - Priority inheritance:  sem_boostholderprio prevent overrun of
        pend_reprios.  The second case rtcb->sched_priority <=
        htcb->sched_priority did not check if there is sufficient space in
        the pend_reprios array.  From David Sidrane.
      - lp_worker:  Guard from pend_reprios overlow.  From David Sidrane.
      - Priority inheritance: Fixes improper restoration of base_priority in
        the case of CONFIG_SEM_PREALLOCHOLDERS=0.  The call to
        sem_restorebaseprio_task context switches in the
        sem_foreachholder(sem, sem_restoreholderprioB, stcb); call prior to
        releasing the holder. So the running task is left as a holder as is
        the started task. Leaving both slots filled thus failing to perform
        the boost/or restoration on the correct tcb.  This PR fixes this by
        releasing the running task slot prior to reprioritization that can
        lead to the context switch.  To faclitate this, the interface to
        sem_restorebaseprio needed to take the tcb from the holder prior to
        the holder being freed. In the failure case where sched_verifytcb
        fails it added the overhead of looking up the holder.  There is also
        the additional thunking on the foreach to get from holer to
        holder->tcb.  An alternate approach could be to leve the interface
        the same and allocate a holder on the stack of sem_restoreholderprioB
        copy the sem's holder to it, free it as is done in this pr and and
        then pass that address sem_restoreholderprio as the holder. It could
        then get the holder's tcb but we would keep the same sem_findholder
        in sched_verifytcb.  From David Sidrane.
      - Priority inheritance:  Fixes improper restoration of base_priority.
        From David Sidrane.
      - sem_holder:  Indexing error.  From David Sidrane.

          if (sem->holder[0].htcb != NULL || sem->holder[**1**].htcb != NULL)
      - realloc():  When realloc() has to fall back to calling malloc(), size
        including overhead was being provided to malloc(), causing a slightly
        larger allocation than needed.  Noted by initialkjc@yahoo.com.
      - scheduler:  Fix tg_flags check with GROUP_FLAG_NOCLDWAIT.  From Masayuki
        Ishikawa.
      - scheduler:  Fix CHILD_FLAG_EXITED in include/nuttx/sched.h.  From
        Masayuki Ishikawa.
      - binfmt/elf:  Fix offset value when calling elf_read() in
        elf_symname().  From Masayuki Ishikawa.
      - binfmt/elf:  Fix offset value when calling elf_read() in
        elf_sectname().  From Masayuki Ishikawa.
      - There can be a failure in IOB allocation to some asynchronous
        behavior caused by the use of sem_post().  Consider this scenario:
        (1) Task A holds an IOB.  There are no further IOBs.  The value of
        semcount is zero. Task B calls iob_alloc().  Since there are not
        IOBs, it calls sem_wait().  The value of semcount is now -1.  (2)
        Task A frees the IOB.  iob_free() adds the IOB to the free list and
        calls sem_post() this makes Task B ready to run and sets semcount to
        zero NOT 1.  There is one IOB in the free list and semcount is zero.
        When Task B wakes up it would increment the sem_count back to the
        correct value.  (3) But an interrupt or another task runs occurs
        before Task B executes.  The interrupt or other tak takes the IOB off
        of the free list and decrements the semcount.  But since semcount is
        then < 0, this causes the assertion because that is an invalid state
        in the interrupt handler. So I think that the root cause is that
        there the asynchrony between incrementing the semcount.  This change
        separates the list of IOBs:  Currently there is only a free list of
        IOBs.  The problem, I believe, is because of asynchronies due
        sem_post() post cause the semcount and the list content to become out
        of sync.  This change adds a new 'committed' list:  When there is a
        task waiting for an IOB, it will go into the committed list rather
        than the free list before the semaphore is posted.  On the waiting
        side, when awakened from the semaphore wait, it will expect to find
        its IOB in the committed list, rather than free list.  In this way,
        the content of the free list and the value of the semaphore count
        always remain in sync.
      - binfmt:  Fix .dtor memory allocation.  From Masayuki Ishikawa.

    * File System/Block and MTD Drivers:

      - SmartFS:  If whence is SEEK_END, the file offset shall be set to the
        size of the file plus offset. Noted by eunb.song@samsung.com.
      - mtd/progmem:  Fix incorrect target address calculation.
        progmem_read/write() is incorrectly calculating the target address,
        expecting the offset argument is given in a block number. This is
        completely wrong and as a result invalid flash region is accessed.
        Byte-oriented read/write interfaces of mtd device accept the target
        address in a byte offset, not a block number.  From Heesub Shin.
      - procfs:  Fix wrong member IDs are displayed when 'cat
        /proc/<pid>/group/status'.  From Nobutaka Toyoshima.
      - procfs:  Fix incorrect uptime with CONFIG_SYSTEM_TIME64.  From
        Masayuki Ishikawa.
      - vfs/poll: round timeout up to next full tick.  Calling poll() with
        timeout less than half tick (thus MSEC2TICK(timeout) => 0) caused
        returning error with EAGAIN. Instead of rounding timeout down, value
        should be rounded up. Open Group spec for poll says:
        "Implementations may place limitations on the granularity of timeout
        intervals. If the requested timeout interval requires a finer
        granularity than the implementation supports, the actual timeout
        interval will be rounded up to the next supported value."  From Jussi
        Kivilinna.
      - mtd/config:  erase block between block read and write.  From Juha
        Niskanen.
      - mtd:  Build RAMTRON and AT45DB drivers only if selected.  From Juha
        Niskanen.
      - mtd/config:  Fix byte read interface test.  From Juha Niskanen.
      - mtd:  Fix some unallocated and NULL pointer issues.  rwb->wrflush and
        rwb->wrmaxblocks in rwbuffer could get unallocated values from
        ftl_initialize() in some configurations.  Also fixes related assert:

          up_assert: Assertion failed at file:rwbuffer.c line: 643

        that can happen with the following configuration:

          CONFIG_FTL_WRITEBUFFER=y
          CONFIG_DRVR_WRITEBUFFER=y
          # CONFIG_FS_WRITABLE is not set

        These problems are caused by CONFIG variable differences between the
        buffer layers. TODO: This is not a perfect solution. readahead
        support has similar issues.  From Juha Niskanen.
      - net procfs:  Fix buffer corruption and refactor netdev_statistics.c.
        From Masayuki Ishikawa.
      - FAT:  Fix 'Missing unlock' in fs_fat32.c.  From Masayuki Ishikawa.
      - VFS fdopen:  Add missing file stream flags clearing.  Clear file
        stream structure regardless of config options. Structure clearing is
        needed as previous use of stream list entry might leave fs_flags
        set.  From Harri Luhtala.
      - mtd/smart: Fix use of uninitialized variable.  From Jussi Kivilinna.
      - mtd/w25.c:  Enable short delay after sector/chip erase.  From Jussi
        Kivilinna.
      - mtd/config:  Add some error checks for I/O errors.  From Juha
        Niskanen.

    * Graphics/Graphic Drivers:

      - net procfs:  Some long lines were being generated that cause buffer-
        related problems and corrupted output.

    * Networking/Network Drivers:

      - Fixed wrong assert on udp dgram send.  From Pascal Speck.
      - TCP/IPv6: Fix a compile issue when IPv6, but not IPv4 is enabled.
      - net/socket/accept:  Fix building with CONFIG_NET_LOCAL_STREAM.  From
        Jussi Kivilinna.
      - Argument of network device IOCTL should be unsigned long, just as
        will all other IOCTL methods.
      - net/socket:  Fix cloning of local and raw sockets.  From Jussi
        Kivilinna.
      - TCP:  Wait for 3-Way Handshare before accept() returns.  From Simon
        Piriou.
      - TCP:  Send RST if applicaiton 'unlistens()' before we complete the
        connection sequence.
      - TCP:  An RST received during the 3-way handshake requires a little
        more clean-up.
      - IPv6:  Fix net_ipv6_pref2mask().  From Masayuki Ishikawa.
      - network IOCTL commands:  The only place in net/netdev/netdev_ioctl.c
        where the interface state should change is for SIOCSIFFLAGS.  The
        other ones .. SIOCSIFADDR, SIOSLIFADDR, SIODIFADDR ..  should not
        change the link state.  From Sebastien Lorquet.
      - TCP:  Fix tcp_findlistner() in dual stack mode.  From Masayuki
        Ishikawa.

    * Common Drivers:

      - Fix as5048b by adding missing frequency parameter.  From Andreas
        Bihlmaier.
      - multiple fixes in nrf24l01 driver:  (1) signal POLLIN if there is
        already data in the FIFO, (2) send ETIMEDOUT to userspace after 2
        seconds if TX IRQ was not received, (3) handle FIFO overflow, (4)
        handle invalid pipes/empty FIFO, and (5) multiple cosmetics (missing
        static, duplicate define, missing \n).  From Leif Jakob.
      - input/mxt:  Prevent overriding i2c transfer return value.
        put_reg/get_reg function was overriding i2c transfer error code with
        i2creset return value, that lead to OK status although actual
        transfer failed.  From Juha Niskanen.
      - drivers/audio/wm8904:  WM8904 has same problem as that fixed by Juha
        Niskanen in the MaxTouch driver.
      - UART 16550:  Missing left parenthesis in function prototype.  This is
        Bitbucket Issue #41.
      - USBMSC:  Fix a wrong lun number issue.  From Masayuki Ishikawa.
      - drivers/i2c:  Fix compile issues if CONFIG_DISABLE_PSEUDOFS_OPERATIONS
        is enabled.
      - drivers/serial: I discovered a problem in the file
        drivers/serial/serial.c concerning the function uart_close(…). In the
        case that a serial device is opened with the flag O_NONBLOCK the
        function uart_close(…) blocks until all data in the buffer is
        transmitted. The function close(…) called on an handle opened with
        O_NONBLOCK should not block. The problem occurred with a CDC/ACM
        device.  From Stefan Kolb.
      - drivers:  Fix some bad NULL checks.  From Juha Niskanen.
      - drivers:  Rename newly introduced up_i2creset to I2C_RESET.  From
        Juha Niskanen.
      - drivers/bch:  BCH character driver bch_ioctl() always returns -ENOTTY
        for DIOC_GETPRIV command.  It should returns OK if DIOC_GETPRIV
        command succeeds.  From  EunBong Song.
      - Replace sprintf() with snprintf() in pipe.c.  From Nobutaka Toyoshima.
      - drivers/bch:  Fix 'Missing Unlock' in bchdev_driver.c.  From Masayuki
        Ishikawa.
      - button_upper:  Fix interrupt enabling for poll-events.  From Jussi
        Kivilinna.
      - drivers/{sensors,usbmisc}:  Fix uninitialized I2C frequency.  From
        Juha Niskanen.

    * ARM:

      - Set EABI stack alignment for all ARM architectures (remove OABI
        code).  From David Cabecinhas.
      - Remove redundant interrupt stack coloring and OABI code.  From David
        Cabecinhas.
      - Fix off-by-one interrupt stack allocation in 8-byte aligned
        architectures.  From David Cabecinhas.

    * ARMv6-M:

      - CONFIG_DEBUG_HARDFAULT should be available for Cortex-M0 too.

    * Microchip/Atmel SAM3/4 Drivers:

      - SAM3/4:  Fixed configurations for TWI master.  Obviously an
        incomplete port from SAMA5.

    * Microchip/Atmel SAMv7 Drivers:

      - SAMV7: Watchdog:  Fix Forbidden Window Value.  According the Datasheet
        the WDD Value is the lower bound of a so called Forbidden Window and
        to disable this we have to set the WDD Value greater than or equal to
        the WDV Value.  This seems to be a bug in the datasheet. It looks
        like we have to set it to a greater value than the WDV to really
        disable this Thing.  When triggering the Watchdog faster than the
        (very slow) clock source of the Watchdog fires, this Forbidden Window
        Feature resets the System if WDD equals to WDV.  This Changeset
        disables the Forbidden Window by setting the WDD Value to the Maximum
        (0xfff) Value possible.  From Frank Benkert.
      - SAMV7 EMAC:  Add conditional logic to account the fact that the
        SAMV71 has 6 rather than 3 queues after version 1.  From Ian McAfee.

    * NXP/Freescale Kinetis Drivers:

      - Kinetis:  Fixed GPIO _PIN_OUTPUT_LOWDRIVE swapped with
        _PIN_OUTPUT_OPENDRAIN.  From David Sidrane.
      - Ensure interrupts are back on BEFORE running code dependant on
        clock_systimer.  From David Sidrane.
      - Kinetis k66, k64, k60, k40, k20: Pin mux configure all I2C signals as
        Open Drain.  The output structure of the GPIO for I2C needs to be
        open drain.  When left at the default, one can observe on a scope the
        slave contending with the push-pull during the ACK.  From David
        Sidrane.
      - Kinetis K66:  Fixed TMP2_CH1 definition.  From David Sidrane.
      - Kinetis K66:  Define ALT1 to match ref manual.  From David Sidrane.
      - Kinetis K66:  GPIO and pin mux cleanup.  From David Sidrane.
      - Kinetis ADC:  Various corrections and updates.  From David Sidrane.

    * NXP/Freescale LPC43xx:

      - Add missing PINCONF_INBUFFER in several places of
        lpc4310203050_pinconfig.h.  From Andreas Bihlmaier.
      - Fix logic in preprocessor checks and correct arguments to
        lpc43_pin_config initialization.  From Andreas Bihlmaier.

    * NXP/Freescale LPC43xx Drivers:

      - Fix logic error in lpc43_adc.  From Andreas Bihlmaier.
      - Use correct macro for irqid (fortunately both point to
        LPC43_IRQ_EXTINT+18).  From Andreas Bihlmaier.
      - Actually write modified value to register.  From Andreas Bihlmaier.
      - Increase number of supported PWM channels from 4 to 6.  From Andreas
        Bihlmaier.

    * Silicon Labs EFM32 Drivers:

      - EFM32 I2C: Fix timeout calculation.  From Masayuki Ishikawa.

    * STMicro STM32:

      - As discovered by dcabecinhas.  This fix assume the 8 byte alignment
        options for size stack size or this will overwrite the first word
        after TOS.  See
        https://github.com/PX4/Firmware/issues/6613#issuecomment-285869778.
        From David Sidrane.
      - STM32 F7:  In stm32_allocateheap.c There are 5 not 4 configurations.
        From David Sidrane.

    * STMicro STM32 Drivers:

      - STM32, STM32 F7, STM32 L4:  OTG host drivers: Do not do data toggle
        if interrupt transfer is NAKed.  Sugested by webbbn@gmail.com.
      - Save elapsed time before handling I2C in stm32_i2c_sem_waitstop().
        This change follows the same logic as in previous fix to
        stm32_i2c_sem_waitdone().  It is possible that a context switch
        occurs after I2C registers are read but before elapsed time is saved
        in stm32_i2c_sem_waitstop(). It is then possible that the registers
        were read only once with "elapsed time" equal 0. When scheduler
        resumes this thread it is quite possible that now "elapsed time" will
        be well above timeout threshold. In that case the function returns
        and reports a timeout, even though the registers were not read
        "recently". Fix this by inverting the order of operations in the loop
        - save elapsed time before reading registers. This way a context
        switch anywhere in the loop will not cause an erroneous "timeout"
        error.  From Freddie Chopin.
      - STM32, STM32 F7, and STM32 L4:  Clone Freddie Chopin's I2C change to
        similar STM32 I2C drivers.  From David Sidrane.
      - STM32:  OTG host implementations of stm32_in_transfer() must obey the
        polling interval for the case of isochronous and interrupt endpoints.
      - STM32:  Fix erase sector number for microcontrolers with more than 11
        sectors.  Erase a sector from the second bank cause the bit 4 of SNB
        being set but never unsed, so trying to erase a sector from the first
        bank was acually eraseing a sector from the second bank.  From José
        Roberto de Souza.
      - STM32:  Make up_progmem thread safe.  Writing to a flash sector while
        starting the erase of other sector have a undefined behavior so lets
        add a semaphore and syncronize access to Flash registers.  But for
        the semaphore to work it needs to be initialized so each board needs
        call stm32_flash_initialize() on initialization, so to avoid runtime
        problems it is only using semaphore and making it thread safe if
        initialized, after all boards starts to call stm32_flash_initialize()
        we can remove the boolean and the check.  From José Roberto de Souza.
      - STM32:  Add workaround for flash data cache corruption on
        read-while-write.  This is a known hardware issue on some STM32 see
        the errata of your model and if you make use of both memory banks you
        should enable it.  From José Roberto de Souza.
      - STM32 Flash fixes.  From José Roberto de Souza.
      - STM32 Flash:  Missing unlock on F1 HSI off path.  From David Sidrane.
      - STM32 F4 I2C: I needed to use DS3231, I remember that in past it
        worked ok, but now for stm32f4xx is used another driver (chip
        specific, stm32f40xxx_i2c.c) and DS3231 driver doesn't work.  After
        investigating a problem I found that I2C driver (isr routine) has a
        few places there it sends stop bit even if not all messages are
        managed. So, e.g., removing stm32_i2c_sendstop (#1744) and adding
        stm32_i2c_sendstart after data reading helps to make DS3231 working.
        From  Alexander Oryshchenko; verified by David Sidrane.
      - STM32 F7 Serial:  Serial fix for dropped data:  (1) Revert the
        inherited dma bug from the stm32.  see
        https://bitbucket.org/nuttx/nuttx/commits/df9ae3c13fc2fff2c21ebdb098c520b11f43280d
        for details.  And (2) Most all CR1-CR3 settings can not be configured
        while UE is true. Threfore we make all operation atomic and disable
        UE and restore it's originalstate on exit.  From David Sidrane.
      - STM32 L1:  Fix IWDG and WWDG debug mode stop for STM32L15XX.  From
        Juha Niskanen.
      - STM32 F7:  Fix UART7 and UART8 IFLOWCONTROL options.  From Jussi
        Kivilinna.
      - STM32 F7:  Add warning for RXDMA + IFLOWCONTROL combination.
        Combination of RXDMA + IFLOWCONTROL does not work as one might
        expect.  Since RXDMA uses circular DMA-buffer, DMA will always keep
        reading new data from USART peripheral even if DMA buffer underruns.
        Thus this combination only does following: RTS is asserted on USART
        setup and deasserted on shutdown and does not perform actual RTS
        flow-control.  Data loss can be demonstrated by doing long up_mdelay
        inside irq critical section and feeding data to RXDMA+IFLOWCONTROL
        UART.  From Jussi Kivilinna.
      - STM32 F7 Serial:  Do not stop processing input in SW flow-control
        mode.  From Jussi Kivilinna.
      - STM32 L4 DMA: Correct bad channel definition.  From Sebastien Lorquet.
      - STM32 F7:  Warn if no DMA2 configured when using ADC with DMA.  Also
        correct ADC channel numbers that DMA callback passes to upper half
        driver.  From Juha Niskanen.
      - STM32 F7 ADC:  Do not override ADCPRE_DIV when measuring
        internal voltage.  From Juha Niskanen.
      - STM32 L4:  Don't think these chips have DPFPU, DTCM or ITCM.  From
        Juha Niskanen.
      - STM32 F7 Flash:  macro naming errors, there is no FLASH_CONFIG_F for
        F7.  From Juha Niskanen.
      - STM32 L4: stm32l4x6xx_pinmap:  Update I2C4 and DCMI pins.  From Juha
        Niskanen.
      - STM32 L4: stm32l4_i2c: change wrong macro to CONFIG_I2C_POLLED.  From
        Juha Niskanen.
      - Fix STM32F7 I2C interrupt handler.  From Jussi Kivilinna.
      - STM32:  Serial Allow configuring Rx DMA buffer size.  From David
        Sidrane.
      - STM32 CAN: I had the problem that the transmit FIFO size (= actual
        elements in FIFO) was slowly increasing over time, and was full after
        a few hours.  The reason was that the code hit the line
        "canerr("ERROR: No available mailbox\n");" in stm32_cansend, so
        can_xmit thinks it has sent the packet to the hardware, but actually
        has not. Therefore the transmit interrupt never happens which would
        call can_txdone, and so the size of the FIFO size does not decrease.
        The reason why the code actually hit the mentioned line above, is
        because stm32can_txready uses a different (incomplete) condition than
        stm32can_send to determine if the mailbox can be used for sending,
        and thus can_xmit forwards the packet to stm32can_send.
        stm32can_txready considered mailboxes OK for sending if the mailbox
        was empty, but did not consider that mailboxes may not yet be used if
        the request completed bit is set - stm32can_txinterrupt has to
        process these mailboxes first.  Note that I have also modified
        stm32can_txinterrupt - I removed the if condition, because the CAN
        controller retries to send the packet until it succeeds. Also if the
        condition would not evaluate to true, can_txdone would not be called
        and the FIFO size would not decrease also.  From Lederhilger Martin.
      - STM32 Serial:  Fix freezing serial port.  Serial interrupt
        enable/disable functions do not disable interrupts and can freeze
        device when serial interrupt is received while execution is at those
        functions. Trivially triggered with two or more threads write to
        regular syslog stream and to emergency stream. In this case, freeze
        happens because of mismatch of priv->ie (TXEIE == 0) and actually
        enabled interrupts in USART registers (TXEIE == 1), which leads to
        unhandled TXE interrupt and causes interrupt storm for USART.  From
        Jussi Kivilinna.
      - STM32 I2C:  Make private symbols static.  From Juha Niskanen.
      - STM32 L4 GPIO:  Put back EXTI line source selection.  From Juha
        Niskanen.
      - STM32 L4 RTC:  Store RTC MAGIC to backup reg, not to address zero.
        From Juha Niskanen.

    * STMicro STM32 Boards:

      - Disable serial console on stm32f103-minimum usbnsh example project
        config. Devices enumerate after this change.  From Bob Ryan.
      - Nucleo-144:  Default for choice in Kconfig was not one of the
        possible choices.
      - Nucleo-F4X1RE User LEDS: Issue #51 reports compilation problems with
        stm32_userled.c.  Reported by Gappi92.

    * TI Tiva Drivers:

      - Tiva I2C:  Correct an error in conditional compilation.
      - Tiva SSI:  Resolves issue 52 'Copy-Paste error in
        tiva_ssibus_initialize()' submitted by Aleksandr Kazantsev.

    * C Library/Header Files:

      - C Library vsnprintf():  Fix precision for string formatting.  Fixes
        use of format precision to truncate input string.  From Jussi
        Kivilinna.
      - C Library vsnprintf():  If size is zero, then vsnprintf() should
        return the size of the required buffer without writing anything.
        From Jussi Kivilinna.
      - C Library netdb: in dns_query_callback, ret != -EADDRNOTAVAIL
        condition consumes error returns including EAGAIN in this case,
        dns query retransmission doesn't work.  From Ritajina.
      - C Library netdb:  Fix time info in lib_dnscache.c.  From Masayuki
        Ishikawa.
      - C Library netdb: Fix bugs in lib_gethostbynamer.c. This fix sets
        h_name in struct hostent returned by gethostbyname().  From Masayuki
        Ishikawa.
      - C Library Defect Workaround: replace '%6.6u' format with an
        equivalent '%06u'.  From Tomasz Wozniak.

    * Tools

      - Fix mksyscall host binary name.  From Alan Carvalho de Assis.

    * Applications (apps/)

      - Fix some calls to task_create():  argv[0] is the first parameter, not
        the name of the task.
      - Bitbucket Issue 5:  I found an unexpected behavior in apps/
        configuration generation. Adding external symbolic link in apps/
        directory and using Make.defs for Kconfig generation, Kconfig file
        has a wrong path in the source argument. It contains original dir
        path outside of the source tree instead path to sub-directory in
        apps/.  The problem is connected with make/system symbolic link path
        resolution.  Corrected by a patch submitted by Artur Madrzak with
        Issue 5.
      - apps/: Make more globals static to avoid name clashes.  From Juha
        Niskanen.

    * NSH: apps/nshlib:

      - NSH library:  In nsh_argexand(), if CONFIG_NSH_ARGCAT is defined but
        CONFIG_NSH_CMDPARMS defined and/or CONFIG_DISABLE_ENVIRON not
        defined, then there is a situation that causes an infinite loop in
        the parser.  Noted by Freddie Chopin.
      - NSH library:  Fix building when CONFIG_NET_USRSOCK enabled with other
        link-layers.  From Jussi Kivilinna.
      - NSH library:  Fix some warnings about integer/pointer casts of
        different sizes (probably only effects 64-bit simulation).
      - NSH library:  Fix open flags in nsh_codeccmd.c.  From Masayuki
        Ishikawa.
      - I need to look at the registers that are at or around 0xe000ef90.
        Using mw and xd, I see that nsh does not support pointers greater
        than 0x7fffffff.  A quick look at the source shows that the pointers
        for those two commands are set with calls to strtol() rather than
        strtoul().  Changing the two pointer-setting instances to strtoul()
        fixes the problem, at least for my architecture/config.  From Ian
        McAfee.
      - NSH library: Fix a resource leak in cmd_hexdump().  From Nobutaka
        Toyoshima.

    * Examples/Tests: apps/examples:

      - apps/examples/hidkbd:  Remove call to arch_usbhost_initialize().
        That is violation of the OS interfacing rules and will no longer be
        supported.  USB host should be initialized as part of the normal
        board bring-up logic as with any other devices and should not involve
        illegal calls from applications into the OS.
      - apps/examples/usbterm:  Removed because it is not very useful and
        because it can be configured to use an illegal call into the OS.
      - examples/mm: Fix Makefile.  Built-in was not being registered.
      - examples/hidkbd:  Add some missing configuration settings.
      - examples/random:  Avoid stack overflows.  From Juha Niskanen.
      - examples/nettest:  Fix an error in pre-processor expression.
      - examples/mtdpart:  Prevent part array overflow.  mtdpart examples
        create partions and allocate from 1 index not a 0 index to part[]
        array. This cause buffer overflow for part array.  This change fixes
        this problem.  From  EunBong Song.
      - examples/can:  Fix can example app to print data when
        CONFIG_EXAMPLES_CAN_READ is defined.  From Alan Carvalho de Assis.

    * Network Utilies: apps/netuils:

      - Not a clean fix, but at least makes DHCP working with
        CONFIG_NETDEV_MULTINIC.  From Andreas Bihlmaier.
      - Ensure netlib will not be broken when setip will not bring the
        network up anymore.  From Sebastien Lorquet.

    * CAN Utilies: apps/canutils:

      - Fix libcanard github download link to get it compiling correctly.
        From Alan Carvalho de Assis.
      - Fix to use the new canardInit() function.  From Alan Carvalho de
        Assis.

    * System Unitilities (apps/system)

      - system/dhcpc:  Add missing argument of fprintf.

    * Tools (apps/tools):

      - The dedicated windows tool at tools/mkkconfig.bat uses $APPSDIR,
        which is not a windows shell variable, and is left uninitialized, but
        in fact should be the current directory.  From Sebastien Lorquet.