[SLOF] [PATCH v2 1/2] virtio-serial: Make read and write methods report failure

Alexey Kardashevskiy aik at ozlabs.ru
Thu Sep 7 13:37:48 AEST 2023


On 04/09/2023 15:19, Jordan Niethe wrote:
> On Mon, Sep 4, 2023 at 3:08 PM Alexey Kardashevskiy <aik at ozlabs.ru> wrote:
>>
>>
>> On 29/08/2023 10:12, Jordan Niethe wrote:
>>> From: Kautuk Consul <kconsul at linux.vnet.ibm.com>
>>>
>>> The read and write methods return successfully even if the virtio device
>>> is closed (virtiodev is 0) and it is not able to send or receive any
>>> characters.
>>>
>>> Make the read and write methods return 0 to indicate they did not
>>> succeed in this case.
>>>
>>> This also fixes an invalid stack access in the read method.
>>>
>>> Fixes: 8174acd ("virtio-serial: Close device completely")
>>> Signed-off-by: Kautuk Consul <kconsul at linux.vnet.ibm.com>
>>> Signed-off-by: Jordan Niethe <jniethe5 at gmail.com>
>>> ---
>>> v2:
>>>      - Rework commit message slightly
>>> ---
>>>    board-qemu/slof/virtio-serial.fs | 4 ++--
>>>    1 file changed, 2 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/board-qemu/slof/virtio-serial.fs b/board-qemu/slof/virtio-serial.fs
>>> index 82868e2..41e2e04 100644
>>> --- a/board-qemu/slof/virtio-serial.fs
>>> +++ b/board-qemu/slof/virtio-serial.fs
>>> @@ -67,7 +67,7 @@ virtiodev virtio-serial-init drop
>>>    ;
>>>
>>>    : write ( addr len -- actual )
>>> -    virtiodev 0= IF nip EXIT THEN
>>> +    virtiodev 0= IF 2drop 0 EXIT THEN
>>>        tuck
>>>        0 ?DO
>>>            dup c@ virtiodev SWAP virtio-serial-putchar
>>> @@ -78,7 +78,7 @@ virtiodev virtio-serial-init drop
>>>
>>>    : read ( addr len -- actual )
>>>        0= IF drop 0 EXIT THEN
>>> -    virtiodev 0= IF nip EXIT THEN
>>> +    virtiodev 0= IF drop 0 EXIT THEN
>>
>>
>> This is going to leave @addr on stack, no? The write gets it right though.
> 
> The read method begins with 0= which consumes top of stack.
> The write method does not have that which is why they are different.

ah, you're right. I dislike forth :)

btw since now these do report failures (or, to be precise, 0 chars 
written/read which is not exactly an error), what effect does it have? 
For example, something is writing a buffer in a loop to a device and 
incrementing some counter by the value returned by "write" and now it 
returns 0 instead of passed "len", or there is nothing like this?

> 
>>
>>
>>>        virtiodev virtio-serial-haschar 0= IF 0 swap c! -2 EXIT THEN
>>>        virtiodev virtio-serial-getchar swap c! 1
>>>    ;
>>
>> --
>> Alexey
>>
>>

-- 
Alexey




More information about the SLOF mailing list