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