On 07.02.2022 17:07, Oleksandr Andrushchenko wrote:
> On 07.02.22 17:26, Jan Beulich wrote:
>> 1b. Make vpci_write use write lock for writes to command register and BARs
>> only; keep using the read lock for all other writes.
> I am not quite sure how to do that. Do you mean something like:
> void vpci_write(pci_sbdf_t sbdf, unsigned int reg, unsigned int size,
>                  uint32_t data)
> [snip]
>      list_for_each_entry ( r, &pdev->vpci->handlers, node )
> {
> [snip]
>      if ( r->needs_write_lock)
>          write_lock(d->vpci_lock)
>      else
>          read_lock(d->vpci_lock)
> ....
> 
> And provide rw as an argument to:
> 
> int vpci_add_register(struct vpci *vpci, vpci_read_t *read_handler,
>                        vpci_write_t *write_handler, unsigned int offset,
>                        unsigned int size, void *data, --->>> bool write_path 
> <<<-----)
> 
> Is this what you mean?

This sounds overly complicated. You can derive locally in vpci_write(),
from just its "reg" and "size" parameters, whether the lock needs taking
in write mode.

Jan


Reply via email to