Skip to content
  1. May 20, 2017
  2. May 19, 2017
  3. May 18, 2017
  4. May 17, 2017
  5. May 16, 2017
    • Gregory Nutt's avatar
      syslog: Add header file inclusion to eliminate a warning; mm/iob: private... · 5ce2ece1
      Gregory Nutt authored
      syslog: Add header file inclusion to eliminate a warning; mm/iob: private function needs static storage class.
      5ce2ece1
    • Gregory Nutt's avatar
      There can be a failure in IOB allocation to some asynchronous behavior caused... · 6a3800f6
      Gregory Nutt authored
      There can be a failure in IOB allocation to some asynchronous behavior caused by the use of sem_post().  Consider this scenario:
      
      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 v
      alue of semcount is now -1.
      
      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.
      
      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.
      6a3800f6
    • Jussi Kivilinna's avatar
    • Sebastien Lorquet's avatar
      Improve temp display accuracy · 4fe79e03
      Sebastien Lorquet authored
      Reformat some code
      4fe79e03
    • Sebastien Lorquet's avatar
      compact function definitions · 883e9ef0
      Sebastien Lorquet authored
      883e9ef0
    • Sebastien Lorquet's avatar
      improve definition of freq deviation · 22bf9a49
      Sebastien Lorquet authored
      22bf9a49
    • Sebastien Lorquet's avatar
      5f07a52f
    • Sebastien Lorquet's avatar
      Support ADC readings · 68dff877
      Sebastien Lorquet authored
      68dff877
    • EunBong Song's avatar
      drivers/bch: BCH character driver bch_ioctl() always returns -ENOTTY for... · 5ef00f0b
      EunBong Song authored
      drivers/bch: BCH character driver bch_ioctl() always returns -ENOTTY for DIOC_GETPRIV command.  It should returns OK if DIOC_GETPRIV command succeeds.
      5ef00f0b
    • Sebastien Lorquet's avatar
      Merge branch 'master' into radio · ad5097ba
      Sebastien Lorquet authored
      ad5097ba
    • Sebastien Lorquet's avatar
      si4463_initialize now returns an int · a08a9c37
      Sebastien Lorquet authored
      reorganize debug comments
      cleanup pending status at boot
      a08a9c37
    • Lederhilger Martin's avatar
      I had the problem that the transmit FIFO size (= actual elements in FIFO) was... · b8e7d5c4
      Lederhilger Martin authored
      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 condi...
      b8e7d5c4
    • Gregory Nutt's avatar
      Update some comments. · 56c8456f
      Gregory Nutt authored
      56c8456f
  6. May 15, 2017