|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3 4/8] xen/hypfs: support dynamic hypfs nodes
On 09.12.2020 17:09, Juergen Gross wrote:
> @@ -158,6 +159,30 @@ static void node_exit_all(void)
> node_exit(*last);
> }
>
> +void *hypfs_alloc_dyndata_size(unsigned long size)
> +{
> + unsigned int cpu = smp_processor_id();
> +
> + ASSERT(per_cpu(hypfs_locked, cpu) != hypfs_unlocked);
> + ASSERT(per_cpu(hypfs_dyndata, cpu) == NULL);
> +
> + per_cpu(hypfs_dyndata, cpu) = xzalloc_bytes(size);
> +
> + return per_cpu(hypfs_dyndata, cpu);
> +}
> +
> +void *hypfs_get_dyndata(void)
> +{
> + ASSERT(this_cpu(hypfs_dyndata));
> +
> + return this_cpu(hypfs_dyndata);
> +}
> +
> +void hypfs_free_dyndata(void)
> +{
> + XFREE(this_cpu(hypfs_dyndata));
> +}
In all three cases, would an intermediate local variable perhaps
yield better generated code? (In hypfs_get_dyndata() this may be
less important because the 2nd use is only an ASSERT().)
> @@ -219,6 +244,12 @@ int hypfs_add_dir(struct hypfs_entry_dir *parent,
> return ret;
> }
>
> +void hypfs_add_dyndir(struct hypfs_entry_dir *parent,
> + struct hypfs_entry_dir *template)
> +{
> + template->e.parent = &parent->e;
> +}
I'm struggling with the direction here: This makes the template
point at the parent, but the parent will still have no
"knowledge" of its new templated children. I suppose that's how
it is meant to be, but maybe this could do with a comment, since
it's the opposite way of hypfs_add_dir()?
Also - does this mean parent may not also have further children,
templated or "normal"?
> @@ -177,6 +182,10 @@ struct hypfs_entry *hypfs_leaf_findentry(const struct
> hypfs_entry_dir *dir,
> struct hypfs_entry *hypfs_dir_findentry(const struct hypfs_entry_dir *dir,
> const char *name,
> unsigned int name_len);
> +void *hypfs_alloc_dyndata_size(unsigned long size);
> +#define hypfs_alloc_dyndata(type) (type
> *)hypfs_alloc_dyndata_size(sizeof(type))
This wants an extra pair of parentheses.
As a minor point, I also wonder whether you really want the type
unsafe version to be easily usable. It would be possible to
largely "hide" it by having
void *hypfs_alloc_dyndata(unsigned long size);
#define hypfs_alloc_dyndata(type) ((type *)hypfs_alloc_dyndata(sizeof(type)))
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |