From: Masami Hiramatsu <mhiramat@kernel.org>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
Chen Yu <yu.c.chen@intel.com>, Chen Yu <yu.chen.surf@gmail.com>,
LKML <linux-kernel@vger.kernel.org>,
Ingo Molnar <mingo@kernel.org>, Jonathan Corbet <corbet@lwn.net>
Subject: Re: [PATCH v4 3/4] tools/bootconfig: Align the bootconfig applied initrd image size to 4
Date: Thu, 19 Nov 2020 11:32:42 +0900 [thread overview]
Message-ID: <20201119113242.defca2f563b42601aa76d136@kernel.org> (raw)
In-Reply-To: <20201118112249.30d20147@gandalf.local.home>
On Wed, 18 Nov 2020 11:22:49 -0500
Steven Rostedt <rostedt@goodmis.org> wrote:
> On Thu, 19 Nov 2020 00:35:44 +0900
> Masami Hiramatsu <mhiramat@kernel.org> wrote:
>
> > +
> > + /* To align up the total size to BOOTCONFIG_ALIGN, get padding size */
> > + total_size = stat.st_size + size + sizeof(u32) * 2 + BOOTCONFIG_MAGIC_LEN;
> > + pad = BOOTCONFIG_ALIGN - total_size % BOOTCONFIG_ALIGN;
> > + if (pad == BOOTCONFIG_ALIGN)
> > + pad = 0;
>
> If alignment is always a power of two, you could simply do:
>
> pad = (total_size + BOOTCONFIG_ALIGN - 1) & ~(BOOTCONFIG_ALIGN - 1)) - total_size;
>
> Which will give you the proper padding, without the if.
Thanks, and in that case, I would like to introduce BOOTCONFIG_ALINE_BITS and
BOOTCONFIG_ALINE_MASK so that we make sure the alignment is power of two.
> > + size += pad;
> > +
> > + /* Add a footer */
> > + *(u32 *)(data + size) = size;
> > + *(u32 *)(data + size + sizeof(u32)) = csum;
> > + memcpy(data + size + sizeof(u32) * 2, BOOTCONFIG_MAGIC, BOOTCONFIG_MAGIC_LEN);
> > + total_size = size + sizeof(u32) * 2 + BOOTCONFIG_MAGIC_LEN;
>
> I wonder if it would be cleaner to just have a void pointer index for the above:
>
> void *p;
>
> p = data + size;
> *(u32 *)p = size;
> p += sizeof(u32);
>
> *(u32 *)p = csum;
> p += sizeof(u32);
>
> memcpy(p, BOOTCONFIG_MAGIC, BOOTCONFIG_MAGIC_LEN);
> p += BOOTCONFIG_MAGIC_LEN;
>
> total_size = p - (void *)data;
OK.
> Also, how does this work if we run this on a little endian box for a big
> endian crossbuild?
Hmm, good point. I expected that the bootconfig command will be used
natively. Hmm, there are 2 options.
- Add endian option to the bootconfig (-le/-be) for cross build.
- Update the footer format to use "ascii" size and checksum.
To generalize the format, latter one is better. But it also involves
the kernel side update too.
Thank you,
>
> -- Steve
>
>
> > +
> > + ret = write(fd, data, total_size);
> > + if (ret < total_size) {
> > if (ret < 0)
> > ret = -errno;
> > pr_err("Failed to apply a boot config: %d\n", ret);
> > - if (ret < 0)
> > - goto out;
> > - goto out_rollback;
> > - }
> > - /* Write a magic word of the bootconfig */
> > - ret = write(fd, BOOTCONFIG_MAGIC, BOOTCONFIG_MAGIC_LEN);
> > - if (ret < BOOTCONFIG_MAGIC_LEN) {
> > - if (ret < 0)
> > - ret = -errno;
> > - pr_err("Failed to apply a boot config magic: %d\n", ret);
> > - goto out_rollback;
> > - }
> > - ret = 0;
> > + if (ret > 0)
> > + goto out_rollback;
> > + } else
> > + ret = 0;
> > +
> > out:
> > close(fd);
> > free(data);
--
Masami Hiramatsu <mhiramat@kernel.org>
next prev parent reply other threads:[~2020-11-19 2:33 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-18 15:35 [PATCH v4 0/4] tools/bootconfig: Align the bootconfig applied initrd Masami Hiramatsu
2020-11-18 15:35 ` [PATCH v4 1/4] tools/bootconfig: Fix errno reference after printf() Masami Hiramatsu
2020-11-18 15:35 ` [PATCH v4 2/4] tools/bootconfig: Fix to check the write failure correctly Masami Hiramatsu
2020-11-18 16:04 ` Steven Rostedt
2020-11-19 1:41 ` Masami Hiramatsu
2020-11-19 13:59 ` Steven Rostedt
2020-11-19 5:42 ` Masami Hiramatsu
2020-11-18 15:35 ` [PATCH v4 3/4] tools/bootconfig: Align the bootconfig applied initrd image size to 4 Masami Hiramatsu
2020-11-18 16:22 ` Steven Rostedt
2020-11-19 2:32 ` Masami Hiramatsu [this message]
2020-11-18 15:35 ` [PATCH v4 4/4] docs: bootconfig: Update file format on initrd image Masami Hiramatsu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20201119113242.defca2f563b42601aa76d136@kernel.org \
--to=mhiramat@kernel.org \
--cc=corbet@lwn.net \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=rostedt@goodmis.org \
--cc=torvalds@linux-foundation.org \
--cc=yu.c.chen@intel.com \
--cc=yu.chen.surf@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.