Skip to content

problem with g_iob_sem.semcount in socketCAN #9353

@haitomatic

Description

@haitomatic

Hi, I am using Nuttx SocketCAN together with UAVCAN in PX4 and got into a problem with g_iob_sem.semcount either exceeds the CONFIG_IOB_NBUFFERS or gets as low as 1. These happen expecially at high data rate (~1000fps for standard 2.0B CAN frame). When they occur, socketCAN network iface stops functional and no more RX/TX.

Regarding semcount oveflow issue, I dug into the code and noticed that in the TX path, iob_update_pktlen sporadically while doing trimming, frees up an amount of CONFIG_IOB_NBUFFERS or currently free iob buffers (most of the time equal to CONFIG_IOB_BUFFERS )

iob_update_pktlen(dev->d_iob, offset);

This leads to g_iob_sem.semcount being increased to much higher than CONFIG_IOB_NBUFFERS.

I changed that part to

//iob_update_pktlen(dev->d_iob, offset);

  ret = iob_trycopyin(dev->d_iob, buf, len, offset, false);

  if (ret < 0 || dev->d_iob->io_pktlen != len)
    {
      netdev_iob_release(dev);
      goto errout;
    }

and I was able to get rid of the overflowed semcount problem
This is really weird since before that with netdev_iob_prepare, the new iob handle should always have io_flink NULL. And it actually does when I do a check before the line iob_update_pktlen but somehow, in that function, the whole amount of iob in g_iob_freelist is always freed up.

And for the g_iob_sem.semcount drop to 1 issue, when it happens, usually after 10mins of operation at high rate, suddenly semcount drops to 1 from a long lasting stable level around CONFIG_IOB_NBUFFERS. This issue is much harder to debug and currently I don't have any fix/workaround

Both issue happen regardless of CONFIG_IOB_NBUFFERS value, with/without CONFIG_IOB_THROTTLE, with/without CONFIG_NET_TIMESTAMP and seemingly independent of each other.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions