On 2/27/24 15:30, Eduard Zingerman wrote:
On Tue, 2024-02-27 at 15:16 -0800, Kui-Feng Lee wrote:
[...]
So, it appears that with shadow types users would have more or less
convenient way to disable / enable related BPF programs
(the references to programs are available, but reference counting
would have to be implemented by user using some additional data
structure, if needed).
I don't see a way to reconcile shadow types with this autoload/autocreate toggling
=> my last two patches would have to be dropped.
How about to update autoload according to the value of autocreate of
maps before loading the programs? For example, update autoload in
bpf_map__init_kern_struct_ops()?
This can be done, but it would have to be a separate pass:
first scanning all maps and setting up reference counters for programs,
then scanning all programs and disabling those unused.
I can do that in v2, thank you for the suggestion.
It only has to scan once with an additional flag.
The value of the autoload of a prog should be
true if its autoload_user_set is false and autocreate of any one of
struct_ops maps pointing to the prog is true.
Let's say the flag is autoload_autocreate.
In bpf_map__init_kern_struct_ops(), it has to check
prog->autoload_user_set, and do prog->autoload |= map->autocreate if
prog->autoload_user_set is false and autoload_autocreate is true. Do
prog->autoload = map->autocreate if autoload_autocreate is false I think
it is enough, right?
if (!prog->autoload_user_set) {
if (!prog->autoload_autocreate)
prog->autoload = map->autocreate;
else
prog->autoload |= map->autocreate;
prog->autoload_autocreate = true;
}