Messages in this thread | | | Date | Wed, 26 Jan 2022 23:57:28 -0800 | From | Lucas De Marchi <> | Subject | Re: [PATCH 02/19] dma-buf-map: Add helper to initialize second map |
| |
On Thu, Jan 27, 2022 at 08:27:11AM +0100, Christian König wrote: >Am 26.01.22 um 21:36 schrieb Lucas De Marchi: >>When dma_buf_map struct is passed around, it's useful to be able to >>initialize a second map that takes care of reading/writing to an offset >>of the original map. >> >>Add a helper that copies the struct and add the offset to the proper >>address. > >Well what you propose here can lead to all kind of problems and is >rather bad design as far as I can see. > >The struct dma_buf_map is only to be filled in by the exporter and >should not be modified in this way by the importer.
humn... not sure if I was clear. There is no importer and exporter here. There is a role delegation on filling out and reading a buffer when that buffer represents a struct layout.
struct bla { int a; int b; int c; struct foo foo; struct bar bar; int d; }
This implementation allows you to have:
fill_foo(struct dma_buf_map *bla_map) { ... } fill_bar(struct dma_buf_map *bla_map) { ... }
and the first thing these do is to make sure the map it's pointing to is relative to the struct it's supposed to write/read. Otherwise you're suggesting everything to be relative to struct bla, or to do the same I'm doing it, but IMO more prone to error:
struct dma_buf_map map = *bla_map; dma_buf_map_incr(map, offsetof(...));
IMO this construct is worse because at a point in time in the function the map was pointing to the wrong thing the function was supposed to read/write.
It's also useful when the function has double duty, updating a global part of the struct and a table inside it (see example in patch 6)
thanks Lucas De Marchi
| |