Thread (79 messages) 79 messages, 7 authors, 2019-01-08

Re: [PATCH v8 24/25] powerpc: Adopt nvram module for PPC64

flat view

From: Arnd Bergmann <arnd@arndb.de>
Date: 2018-12-31 12:33:15
Also in: lkml

On Sun, Dec 30, 2018 at 4:29 AM Finn Thain [off-list ref] wrote:
On Sat, 29 Dec 2018, Arnd Bergmann wrote:
quoted
On Wed, Dec 26, 2018 at 1:43 AM Finn Thain [off-list ref] wrote:
quoted
+static ssize_t ppc_nvram_get_size(void)
+{
+       if (ppc_md.nvram_size)
+               return ppc_md.nvram_size();
+       return -ENODEV;
+}
quoted
+const struct nvram_ops arch_nvram_ops = {
+       .read           = ppc_nvram_read,
+       .write          = ppc_nvram_write,
+       .get_size       = ppc_nvram_get_size,
+       .sync           = ppc_nvram_sync,
+};
Coming back to this after my comment on the m68k side, I notice that
there is now a double indirection through function pointers. Have you
considered completely removing the operations from ppc_md instead by
having multiple copies of nvram_ops?
I considered a few alternatives. I figured that it was refactoring that
could be deferred, as it would be confined to arch/powerpc. I was more
interested in the cross-platform API.
Fair enough.
quoted
With the current method, it does seem odd to have a single
per-architecture instance of the exported structure containing function
pointers. This doesn't give us the flexibility of having multiple copies
in the kernel the way that ppc_md does, but it adds overhead compared to
simply exporting the functions directly.
You're right, there is overhead here.

With a bit of auditing, wrappers like the one you quoted (which merely
checks whether or not a ppc_md method is implemented) could surely be
avoided.

The arch_nvram_ops methods are supposed to optional (that is, they are
allowed to be NULL).

We could call exactly the same function pointers though either ppc_md or
arch_nvram_ops. That would avoid the double indirection.
I think you can have a 'const' structure in the __ro_after_init section,
so without changing anything else, powerpc could just copy the
function pointers from ppc_md into the arch_nvram_ops at early
init time, which should ideally simplify your implementation as well.

        Arnd
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help