Skip to content
  • Oliver Neukum's avatar
    Revert "cdc-acm: implement put_char() and flush_chars()" · df3aa13c
    Oliver Neukum authored
    This reverts commit a81cf979
    
    .
    
    The patch causes a regression, which I cannot find the reason for.
    So let's revert for now, as a revert hurts only performance.
    
    Original report:
    I was trying to resolve the problem with Oliver but we don't get any conclusion
    for 5 months, so I am now sending this to mail list and cdc_acm authors.
    
    I am using simple request-response protocol to obtain the boiller parameters
    in constant intervals.
    
    A simple one transaction is:
    1. opening the /dev/ttyACM0
    2. sending the following 10-bytes request to the device:
       unsigned char req[] = {0x02, 0xfe, 0x01, 0x05, 0x08, 0x02, 0x01, 0x69, 0xab, 0x03};
    3. reading response (frame of 74 bytes length).
    4. closing the descriptor
    I am doing this transaction with 5 seconds intervals.
    
    Before the bad commit everything was working correctly: I've got a requests and
    a responses in a timely manner.
    
    After the bad commit more time I am using the kernel module, more problems I have.
    The graph [2] is showing the problem.
    
    As you can see after module load all seems fine but after about 30 minutes I've got
    a plenty of EAGAINs when doing read()'s and trying to read back the data.
    
    When I rmmod and insmod the cdc_acm module again, then the situation is starting
    over again: running ok shortly after load, and more time it is running, more EAGAINs
    I have when calling read().
    
    As a bonus I can see the problem on the device itself:
    The device is configured as you can see here on this screen [3].
    It has two transmision LEDs: TX and RX. Blink duration is set for 100ms.
    This is a recording before the bad commit when all is working fine: [4]
    And this is with the bad commit: [5]
    As you can see the TX led is blinking wrongly long (indicating transmission?)
    and I have problems doing read() calls (EAGAIN).
    
    Reported-by: default avatarMariusz Bialonczyk <manio@skyboo.net>
    Signed-off-by: default avatarOliver Neukum <oneukum@suse.com>
    Fixes: a81cf979
    
     ("cdc-acm: implement put_char() and flush_chars()")
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    df3aa13c