Re: [PATCH v2] jump_label: reduce the size of struct static_key

From: Jason Baron
Date: Mon Jan 23 2017 - 15:48:33 EST




On 01/21/2017 02:07 AM, Ingo Molnar wrote:

* Jason Baron <jbaron@xxxxxxxxxx> wrote:

For example the last line could sure be written as:

key->entries = jlm->entries;
key->type |= static_key_type(key);

right?

Hi,

So that is going to over-write the static_key_type(key) in the first
assignment. If the order is reversed we can't just |= in the pointer type.

Indeed, I missed that.

How about:

static void jump_key_set_entries(struct static_key *key, struct jump_entry *entries)
{
unsigned long type;

type = static_key_type(key);
key->entries = entries;
key->type |= type;
}

and then we can also add:

void jump_key_set_mod(struct static_key *key, struct static_key_mod *mod)

doing basically the same thing. That will avoid the casts that you called
out.

better?

Yeah - and it should generate the exact same code, right?

yes, looks identical.


I'd also add a short comment to the helper function that points out the
union/aliasing, in case anyone is wondering.


Ok, I'll add that to v3.

Thanks,

-Jason