On Fri, May 19, 2017 at 03:50:32PM -0500, Tom Lendacky wrote:
> The "worker" function would be doing the loop through the setup data,
> but since the setup data is mapped inside the loop I can't do the __init
> calling the non-init function and still hope to consolidate the code.
> Maybe I'm missing something here...

Hmm, I see what you mean. But the below change ontop doesn't fire any
warnings here. Maybe your .config has something set which I don't...

---
diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c
index 55317ba3b6dc..199c983192ae 100644
--- a/arch/x86/mm/ioremap.c
+++ b/arch/x86/mm/ioremap.c
@@ -515,71 +515,50 @@ static bool memremap_is_efi_data(resource_size_t 
phys_addr,
  * Examine the physical address to determine if it is boot data by checking
  * it against the boot params setup_data chain.
  */
-static bool memremap_is_setup_data(resource_size_t phys_addr,
-                                  unsigned long size)
+static bool
+__memremap_is_setup_data(resource_size_t phys_addr, unsigned long size, bool 
early)
 {
        struct setup_data *data;
        u64 paddr, paddr_next;
+       u32 len;
 
        paddr = boot_params.hdr.setup_data;
        while (paddr) {
-               bool is_setup_data = false;
 
                if (phys_addr == paddr)
                        return true;
 
-               data = memremap(paddr, sizeof(*data),
-                               MEMREMAP_WB | MEMREMAP_DEC);
+               if (early)
+                       data = early_memremap_decrypted(paddr, sizeof(*data));
+               else
+                       data = memremap(paddr, sizeof(*data), MEMREMAP_WB | 
MEMREMAP_DEC);
 
                paddr_next = data->next;
+               len = data->len;
 
-               if ((phys_addr > paddr) && (phys_addr < (paddr + data->len)))
-                       is_setup_data = true;
+               if (early)
+                       early_memunmap(data, sizeof(*data));
+               else
+                       memunmap(data);
 
-               memunmap(data);
 
-               if (is_setup_data)
+               if ((phys_addr > paddr) && (phys_addr < (paddr + data->len)))
                        return true;
 
                paddr = paddr_next;
        }
-
        return false;
 }
 
-/*
- * Examine the physical address to determine if it is boot data by checking
- * it against the boot params setup_data chain (early boot version).
- */
 static bool __init early_memremap_is_setup_data(resource_size_t phys_addr,
                                                unsigned long size)
 {
-       struct setup_data *data;
-       u64 paddr, paddr_next;
-
-       paddr = boot_params.hdr.setup_data;
-       while (paddr) {
-               bool is_setup_data = false;
-
-               if (phys_addr == paddr)
-                       return true;
-
-               data = early_memremap_decrypted(paddr, sizeof(*data));
-
-               paddr_next = data->next;
-
-               if ((phys_addr > paddr) && (phys_addr < (paddr + data->len)))
-                       is_setup_data = true;
-
-               early_memunmap(data, sizeof(*data));
-
-               if (is_setup_data)
-                       return true;
-
-               paddr = paddr_next;
-       }
+       return __memremap_is_setup_data(phys_addr, size, true);
+}
 
-       return false;
+static bool memremap_is_setup_data(resource_size_t phys_addr, unsigned long 
size)
+{
+       return __memremap_is_setup_data(phys_addr, size, false);
 }
 
 /*

-- 
Regards/Gruss,
    Boris.

Good mailing practices for 400: avoid top-posting and trim the reply.

Reply via email to