From: Ingo Molnar <mingo@kernel.org>
To: Alexander Kuleshov <kuleshovmail@gmail.com>
Cc: Ingo Molnar <mingo@redhat.com>,
Thomas Gleixner <tglx@linutronix.de>,
"H . Peter Anvin" <hpa@zytor.com>, Borislav Petkov <bp@suse.de>,
Joerg Roedel <jroedel@suse.de>, Dave Young <dyoung@redhat.com>,
Andrew Morton <akpm@linux-foundation.org>,
Jiri Kosina <jkosina@suse.cz>, Baoquan He <bhe@redhat.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Mark Salter <msalter@redhat.com>,
linux-kernel@vger.kernel.org, x86@kernel.org
Subject: Re: [PATCH v2] x86/setup: Merge {early_,}reserve_initrd() to one function
Date: Tue, 9 Feb 2016 10:16:26 +0100 [thread overview]
Message-ID: <20160209091626.GA12570@gmail.com> (raw)
In-Reply-To: <1454954546-23074-1-git-send-email-kuleshovmail@gmail.com>
* Alexander Kuleshov <kuleshovmail@gmail.com> wrote:
> The check and definitions related to ramdisk are similar in the
> early_reserve_initrd() and reserve_initrd(). So we can get rid of
> early_reserve_initrd() and and use late or early algorithm for
> initrd reservation depends on reserve_initrd() parameter value.
>
> Save 396 bytes of code:
>
> text data bss dec hex filename
> 9281618 5010736 15474688 29767042 1c63582 vmlinux.orig
>
> text data bss dec hex filename
> 9281222 5010672 15474688 29766582 1c633b6 vmlinux.new
>
> Signed-off-by: Alexander Kuleshov <kuleshovmail@gmail.com>
> ---
> Changelog:
>
> v2: parameter of reserve_initrd() - int -> bool.
> commit message updated.
>
> arch/x86/kernel/setup.c | 29 +++++++++--------------------
> 1 file changed, 9 insertions(+), 20 deletions(-)
>
> diff --git a/arch/x86/kernel/setup.c b/arch/x86/kernel/setup.c
> index d3d80e6..0a2fa55 100644
> --- a/arch/x86/kernel/setup.c
> +++ b/arch/x86/kernel/setup.c
> @@ -349,20 +349,7 @@ static void __init relocate_initrd(void)
> relocated_ramdisk, relocated_ramdisk + ramdisk_size - 1);
> }
>
> -static void __init early_reserve_initrd(void)
> -{
> - /* Assume only end is not page aligned */
> - u64 ramdisk_image = get_ramdisk_image();
> - u64 ramdisk_size = get_ramdisk_size();
> - u64 ramdisk_end = PAGE_ALIGN(ramdisk_image + ramdisk_size);
> -
> - if (!boot_params.hdr.type_of_loader ||
> - !ramdisk_image || !ramdisk_size)
> - return; /* No initrd provided by bootloader */
> -
> - memblock_reserve(ramdisk_image, ramdisk_end - ramdisk_image);
> -}
> -static void __init reserve_initrd(void)
> +static void __init reserve_initrd(bool early)
> {
> /* Assume only end is not page aligned */
> u64 ramdisk_image = get_ramdisk_image();
> @@ -374,6 +361,11 @@ static void __init reserve_initrd(void)
> !ramdisk_image || !ramdisk_size)
> return; /* No initrd provided by bootloader */
>
> + if (early) {
> + memblock_reserve(ramdisk_image, ramdisk_end - ramdisk_image);
> + return;
> + }
> +
> initrd_start = 0;
>
> mapped_size = memblock_mem_size(max_pfn_mapped);
> @@ -398,10 +390,7 @@ static void __init reserve_initrd(void)
> memblock_free(ramdisk_image, ramdisk_end - ramdisk_image);
> }
> #else
> -static void __init early_reserve_initrd(void)
> -{
> -}
> -static void __init reserve_initrd(void)
> +static void __init reserve_initrd(bool early)
> {
> }
> #endif /* CONFIG_BLK_DEV_INITRD */
> @@ -850,7 +839,7 @@ void __init setup_arch(char **cmdline_p)
> memblock_reserve(__pa_symbol(_text),
> (unsigned long)__bss_stop - (unsigned long)_text);
>
> - early_reserve_initrd();
> + reserve_initrd(true);
>
> /*
> * At this point everything still needed from the boot loader
> @@ -1135,7 +1124,7 @@ void __init setup_arch(char **cmdline_p)
> /* Allocate bigger log buffer */
> setup_log_buf(1);
>
> - reserve_initrd();
> + reserve_initrd(false);
>
> #if defined(CONFIG_ACPI) && defined(CONFIG_BLK_DEV_INITRD)
> acpi_initrd_override((void *)initrd_start, initrd_end - initrd_start);
So I don't think the code got easier to understand - in particular the
memblock_reserve()/free() pattern, depending on a flag value, is confusing.
The duplication is there - but please factor it out into a helper structure
('struct ramdisk') and a helper function that sets up the structure.
Thanks,
Ingo
next prev parent reply other threads:[~2016-02-09 9:16 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-08 18:02 [PATCH v2] x86/setup: Merge {early_,}reserve_initrd() to one function Alexander Kuleshov
2016-02-09 9:16 ` Ingo Molnar [this message]
2016-02-09 11:35 ` Alexander Kuleshov
2016-02-09 12:10 ` Ingo Molnar
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=20160209091626.GA12570@gmail.com \
--to=mingo@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=bhe@redhat.com \
--cc=bp@suse.de \
--cc=dyoung@redhat.com \
--cc=hpa@zytor.com \
--cc=jkosina@suse.cz \
--cc=jroedel@suse.de \
--cc=kuleshovmail@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=msalter@redhat.com \
--cc=pbonzini@redhat.com \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
/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.