lkml.org 
[lkml]   [2016]   [Nov]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip:efi/core] efi/libstub: Add random.c to ARM build
    Commit-ID:  a6a144698db93a2c456d1e3811140cadef1ba0e3
    Gitweb: http://git.kernel.org/tip/a6a144698db93a2c456d1e3811140cadef1ba0e3
    Author: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    AuthorDate: Sat, 12 Nov 2016 21:32:32 +0000
    Committer: Ingo Molnar <mingo@kernel.org>
    CommitDate: Sun, 13 Nov 2016 08:23:15 +0100

    efi/libstub: Add random.c to ARM build

    Make random.c build for ARM by moving the fallback definition of
    EFI_ALLOC_ALIGN to efistub.h, and replacing a division by a value
    we know to be a power of 2 with a right shift (this is required since
    ARM does not have any integer division helper routines in its decompressor)

    Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: Matt Fleming <matt@codeblueprint.co.uk>
    Reviewed-by: Kees Cook <keescook@chromium.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: linux-efi@vger.kernel.org
    Link: http://lkml.kernel.org/r/20161112213237.8804-5-matt@codeblueprint.co.uk
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    ---
    drivers/firmware/efi/libstub/Makefile | 4 ++--
    drivers/firmware/efi/libstub/efi-stub-helper.c | 9 ---------
    drivers/firmware/efi/libstub/efistub.h | 9 +++++++++
    drivers/firmware/efi/libstub/random.c | 8 +++++---
    4 files changed, 16 insertions(+), 14 deletions(-)

    diff --git a/drivers/firmware/efi/libstub/Makefile b/drivers/firmware/efi/libstub/Makefile
    index 5e23e2d..6621b13 100644
    --- a/drivers/firmware/efi/libstub/Makefile
    +++ b/drivers/firmware/efi/libstub/Makefile
    @@ -36,11 +36,11 @@ arm-deps := fdt_rw.c fdt_ro.c fdt_wip.c fdt.c fdt_empty_tree.c fdt_sw.c sort.c
    $(obj)/lib-%.o: $(srctree)/lib/%.c FORCE
    $(call if_changed_rule,cc_o_c)

    -lib-$(CONFIG_EFI_ARMSTUB) += arm-stub.o fdt.o string.o \
    +lib-$(CONFIG_EFI_ARMSTUB) += arm-stub.o fdt.o string.o random.o \
    $(patsubst %.c,lib-%.o,$(arm-deps))

    lib-$(CONFIG_ARM) += arm32-stub.o
    -lib-$(CONFIG_ARM64) += arm64-stub.o random.o
    +lib-$(CONFIG_ARM64) += arm64-stub.o
    CFLAGS_arm64-stub.o := -DTEXT_OFFSET=$(TEXT_OFFSET)

    #
    diff --git a/drivers/firmware/efi/libstub/efi-stub-helper.c b/drivers/firmware/efi/libstub/efi-stub-helper.c
    index 4b74bf8..757badc 100644
    --- a/drivers/firmware/efi/libstub/efi-stub-helper.c
    +++ b/drivers/firmware/efi/libstub/efi-stub-helper.c
    @@ -32,15 +32,6 @@

    static unsigned long __chunk_size = EFI_READ_CHUNK_SIZE;

    -/*
    - * Allow the platform to override the allocation granularity: this allows
    - * systems that have the capability to run with a larger page size to deal
    - * with the allocations for initrd and fdt more efficiently.
    - */
    -#ifndef EFI_ALLOC_ALIGN
    -#define EFI_ALLOC_ALIGN EFI_PAGE_SIZE
    -#endif
    -
    #define EFI_MMAP_NR_SLACK_SLOTS 8

    struct file_info {
    diff --git a/drivers/firmware/efi/libstub/efistub.h b/drivers/firmware/efi/libstub/efistub.h
    index ee49cd2..fe1f225 100644
    --- a/drivers/firmware/efi/libstub/efistub.h
    +++ b/drivers/firmware/efi/libstub/efistub.h
    @@ -15,6 +15,15 @@
    */
    #undef __init

    +/*
    + * Allow the platform to override the allocation granularity: this allows
    + * systems that have the capability to run with a larger page size to deal
    + * with the allocations for initrd and fdt more efficiently.
    + */
    +#ifndef EFI_ALLOC_ALIGN
    +#define EFI_ALLOC_ALIGN EFI_PAGE_SIZE
    +#endif
    +
    void efi_char16_printk(efi_system_table_t *, efi_char16_t *);

    efi_status_t efi_open_volume(efi_system_table_t *sys_table_arg, void *__image,
    diff --git a/drivers/firmware/efi/libstub/random.c b/drivers/firmware/efi/libstub/random.c
    index 0c9f58c..f8e2e5a 100644
    --- a/drivers/firmware/efi/libstub/random.c
    +++ b/drivers/firmware/efi/libstub/random.c
    @@ -8,6 +8,7 @@
    */

    #include <linux/efi.h>
    +#include <linux/log2.h>
    #include <asm/efi.h>

    #include "efistub.h"
    @@ -41,8 +42,9 @@ efi_status_t efi_get_random_bytes(efi_system_table_t *sys_table_arg,
    */
    static unsigned long get_entry_num_slots(efi_memory_desc_t *md,
    unsigned long size,
    - unsigned long align)
    + unsigned long align_shift)
    {
    + unsigned long align = 1UL << align_shift;
    u64 start, end;

    if (md->type != EFI_CONVENTIONAL_MEMORY)
    @@ -55,7 +57,7 @@ static unsigned long get_entry_num_slots(efi_memory_desc_t *md,
    if (start > end)
    return 0;

    - return (end - start + 1) / align;
    + return (end - start + 1) >> align_shift;
    }

    /*
    @@ -98,7 +100,7 @@ efi_status_t efi_random_alloc(efi_system_table_t *sys_table_arg,
    efi_memory_desc_t *md = (void *)memory_map + map_offset;
    unsigned long slots;

    - slots = get_entry_num_slots(md, size, align);
    + slots = get_entry_num_slots(md, size, ilog2(align));
    MD_NUM_SLOTS(md) = slots;
    total_slots += slots;
    }
    \
     
     \ /
      Last update: 2016-11-13 10:06    [W:3.329 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site