On 10-06-21, 19:40, Jean-Philippe Brucker wrote:
On Thu, Jun 10, 2021 at 12:16:46PM +0000, Viresh Kumar via Stratos-dev wrote:
Fixed everything else you suggested.
+struct virtio_gpio_config {
- char name[32];
- __u16 ngpio;
- __u16 padding;
- __u32 gpio_names_size;
- char gpio_names[0];
A variable-size array here will make it very difficult to append new fields to virtio_gpio_config, when adding new features to the device. (New fields cannot be inserted in between, since older drivers will expect existing fields at a specific offset.)
Yes, I thought about that earlier and though maybe we will be able to play with that using the virtio-features, I mean a different layout of config structure if we really need to add a field in config, based on the feature flag.
You could replace it with a reference to the string array, for example "__u16 gpio_names_offset" declaring the offset between the beginning of device-specific config and the string array.
But, I like this idea more and it does make it very flexible. Will adapt to it.
The 'name' field could also be indirect to avoid setting a fixed 32-char size, but that's not as important.
Yeah, 32 bytes is really enough. One won't be able to make any sense out of a bigger name anyway :)
+} __packed;
No need for __packed, because the fields are naturally aligned (as required by the virtio spec)
Yeah, I know, but I tend to add that for structures which aren't very simple (like the request/response ones), just to avoid human errors and hours of debugging someone need to go through. __packed won't harm at least :)