qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* Re: [Qemu-devel] [PATCH for-4.0 v3 1/4] unify len and addr type for memory/address APIs
  2018-12-03 14:48 ` [Qemu-devel] [PATCH for-4.0 v3 1/4] unify len and addr type for memory/address APIs Li Zhijian
@ 2018-12-03 14:42   ` Peter Maydell
  2018-12-03 16:42   ` Richard Henderson
  2018-12-04 17:40   ` Philippe Mathieu-Daudé
  2 siblings, 0 replies; 16+ messages in thread
From: Peter Maydell @ 2018-12-03 14:42 UTC (permalink / raw)
  To: Li Zhijian
  Cc: QEMU Developers, Michael S. Tsirkin, Philip Li, zhijianx.li,
	Paolo Bonzini, Peter Crosthwaite, Richard Henderson

On Mon, 3 Dec 2018 at 14:39, Li Zhijian <lizhijian@cn.fujitsu.com> wrote:
>
> Some address/memory APIs have different type between
> 'hwaddr/target_ulong addr' and 'int len'. It is very unsafety, espcially
> some APIs will be passed a non-int len by caller which might cause
> overflow quietly.
> Below is an potential overflow case:
>     dma_memory_read(uint32_t len)
>       -> dma_memory_rw(uint32_t len)
>         -> dma_memory_rw_relaxed(uint32_t len)
>           -> address_space_rw(int len) # len overflow
>
> CC: Paolo Bonzini <pbonzini@redhat.com>
> CC: Peter Crosthwaite <crosthwaite.peter@gmail.com>
> CC: Richard Henderson <rth@twiddle.net>
> CC: Peter Maydell <peter.maydell@linaro.org>
> Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com>
>

Reviewed-by: Peter Maydell <peter.maydell@linaro.org>

thanks
-- PMM

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Qemu-devel] [PATCH for-4.0 v3 0/4] allow to load initrd below 4G for recent kernel
@ 2018-12-03 14:48 Li Zhijian
  2018-12-03 14:48 ` [Qemu-devel] [PATCH for-4.0 v3 1/4] unify len and addr type for memory/address APIs Li Zhijian
                   ` (3 more replies)
  0 siblings, 4 replies; 16+ messages in thread
From: Li Zhijian @ 2018-12-03 14:48 UTC (permalink / raw)
  To: qemu-devel, mst, peter.maydell; +Cc: philip.li, zhijianx.li, Li Zhijian

Long long ago, linux kernel has supported up to 4G initrd, but it's header
still hard code to allow loading initrd below 2G only.
 cutting from arch/x86/head.S:
 # (Header version 0x0203 or later) the highest safe address for the contents
 # of an initrd. The current kernel allows up to 4 GB, but leave it at 2 GB to
 # avoid possible bootloader bugs.

In order to support more than 2G initrd, qemu must allow loading initrd
above 2G address. Luckly, recent kernel introduced a new field to linux header
named xloadflags:XLF_CAN_BE_LOADED_ABOVE_4G which tells bootload an optional
and safe address to load initrd.

Current QEMU/BIOS always loads initrd below below_4g_mem_size which always
less than 4G, so here limiting initrd_max to 4G - 1 simply is enough if
this bit is set.

Default roms(Seabios + optionrom(linuxboot_dma)) works as expected with this
patchset.

changes:
V3:
 - rebase code basing on http://patchwork.ozlabs.org/cover/1005990 and
   https://patchew.org/QEMU/20181122133507.30950-1-peter.maydell@linaro.org
 - add new patch 3/4 to import header bootparam.h (Michael S. Tsirkin)

V2: add 2 patches(3/5, 4/5) to fix potential loading issue.

Li Zhijian (4):
  unify len and addr type for memory/address APIs
  refactor load_image_size
  i386: import bootparam.h
  i386: allow to load initrd below 4G for recent linux

 exec.c                    | 47 +++++++++++++++++++++++------------------------
 hw/core/loader.c          | 11 +++++------
 hw/i386/pc.c              | 25 ++++++++++---------------
 include/exec/cpu-all.h    |  2 +-
 include/exec/cpu-common.h |  8 ++++----
 include/exec/memory.h     | 22 +++++++++++-----------
 6 files changed, 54 insertions(+), 61 deletions(-)

-- 
2.7.4

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Qemu-devel] [PATCH for-4.0 v3 1/4] unify len and addr type for memory/address APIs
  2018-12-03 14:48 [Qemu-devel] [PATCH for-4.0 v3 0/4] allow to load initrd below 4G for recent kernel Li Zhijian
@ 2018-12-03 14:48 ` Li Zhijian
  2018-12-03 14:42   ` Peter Maydell
                     ` (2 more replies)
  2018-12-03 14:48 ` [Qemu-devel] [PATCH for-4.0 v3 2/4] refactor load_image_size Li Zhijian
                   ` (2 subsequent siblings)
  3 siblings, 3 replies; 16+ messages in thread
From: Li Zhijian @ 2018-12-03 14:48 UTC (permalink / raw)
  To: qemu-devel, mst, peter.maydell
  Cc: philip.li, zhijianx.li, Li Zhijian, Paolo Bonzini,
	Peter Crosthwaite, Richard Henderson

Some address/memory APIs have different type between
'hwaddr/target_ulong addr' and 'int len'. It is very unsafety, espcially
some APIs will be passed a non-int len by caller which might cause
overflow quietly.
Below is an potential overflow case:
    dma_memory_read(uint32_t len)
      -> dma_memory_rw(uint32_t len)
        -> dma_memory_rw_relaxed(uint32_t len)
          -> address_space_rw(int len) # len overflow

CC: Paolo Bonzini <pbonzini@redhat.com>
CC: Peter Crosthwaite <crosthwaite.peter@gmail.com>
CC: Richard Henderson <rth@twiddle.net>
CC: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com>

---
V3: use the same type between len and addr(Peter Maydell)
    rebase code basing on https://patchew.org/QEMU/20181122133507.30950-1-peter.maydell@linaro.org/
---
 exec.c                    | 47 +++++++++++++++++++++++------------------------
 include/exec/cpu-all.h    |  2 +-
 include/exec/cpu-common.h |  8 ++++----
 include/exec/memory.h     | 22 +++++++++++-----------
 4 files changed, 39 insertions(+), 40 deletions(-)

diff --git a/exec.c b/exec.c
index 6e875f0..f475974 100644
--- a/exec.c
+++ b/exec.c
@@ -2848,10 +2848,10 @@ static const MemoryRegionOps watch_mem_ops = {
 };
 
 static MemTxResult flatview_read(FlatView *fv, hwaddr addr,
-                                      MemTxAttrs attrs, uint8_t *buf, int len);
+                                      MemTxAttrs attrs, uint8_t *buf, hwaddr len);
 static MemTxResult flatview_write(FlatView *fv, hwaddr addr, MemTxAttrs attrs,
-                                  const uint8_t *buf, int len);
-static bool flatview_access_valid(FlatView *fv, hwaddr addr, int len,
+                                  const uint8_t *buf, hwaddr len);
+static bool flatview_access_valid(FlatView *fv, hwaddr addr, hwaddr len,
                                   bool is_write, MemTxAttrs attrs);
 
 static MemTxResult subpage_read(void *opaque, hwaddr addr, uint64_t *data,
@@ -3099,10 +3099,10 @@ MemoryRegion *get_system_io(void)
 /* physical memory access (slow version, mainly for debug) */
 #if defined(CONFIG_USER_ONLY)
 int cpu_memory_rw_debug(CPUState *cpu, target_ulong addr,
-                        uint8_t *buf, int len, int is_write)
+                        uint8_t *buf, target_ulong len, int is_write)
 {
-    int l, flags;
-    target_ulong page;
+    int flags;
+    target_ulong l, page;
     void * p;
 
     while (len > 0) {
@@ -3215,7 +3215,7 @@ static bool prepare_mmio_access(MemoryRegion *mr)
 static MemTxResult flatview_write_continue(FlatView *fv, hwaddr addr,
                                            MemTxAttrs attrs,
                                            const uint8_t *buf,
-                                           int len, hwaddr addr1,
+                                           hwaddr len, hwaddr addr1,
                                            hwaddr l, MemoryRegion *mr)
 {
     uint8_t *ptr;
@@ -3260,7 +3260,7 @@ static MemTxResult flatview_write_continue(FlatView *fv, hwaddr addr,
 
 /* Called from RCU critical section.  */
 static MemTxResult flatview_write(FlatView *fv, hwaddr addr, MemTxAttrs attrs,
-                                  const uint8_t *buf, int len)
+                                  const uint8_t *buf, hwaddr len)
 {
     hwaddr l;
     hwaddr addr1;
@@ -3278,7 +3278,7 @@ static MemTxResult flatview_write(FlatView *fv, hwaddr addr, MemTxAttrs attrs,
 /* Called within RCU critical section.  */
 MemTxResult flatview_read_continue(FlatView *fv, hwaddr addr,
                                    MemTxAttrs attrs, uint8_t *buf,
-                                   int len, hwaddr addr1, hwaddr l,
+                                   hwaddr len, hwaddr addr1, hwaddr l,
                                    MemoryRegion *mr)
 {
     uint8_t *ptr;
@@ -3321,7 +3321,7 @@ MemTxResult flatview_read_continue(FlatView *fv, hwaddr addr,
 
 /* Called from RCU critical section.  */
 static MemTxResult flatview_read(FlatView *fv, hwaddr addr,
-                                 MemTxAttrs attrs, uint8_t *buf, int len)
+                                 MemTxAttrs attrs, uint8_t *buf, hwaddr len)
 {
     hwaddr l;
     hwaddr addr1;
@@ -3334,7 +3334,7 @@ static MemTxResult flatview_read(FlatView *fv, hwaddr addr,
 }
 
 MemTxResult address_space_read_full(AddressSpace *as, hwaddr addr,
-                                    MemTxAttrs attrs, uint8_t *buf, int len)
+                                    MemTxAttrs attrs, uint8_t *buf, hwaddr len)
 {
     MemTxResult result = MEMTX_OK;
     FlatView *fv;
@@ -3351,7 +3351,7 @@ MemTxResult address_space_read_full(AddressSpace *as, hwaddr addr,
 
 MemTxResult address_space_write(AddressSpace *as, hwaddr addr,
                                 MemTxAttrs attrs,
-                                const uint8_t *buf, int len)
+                                const uint8_t *buf, hwaddr len)
 {
     MemTxResult result = MEMTX_OK;
     FlatView *fv;
@@ -3367,7 +3367,7 @@ MemTxResult address_space_write(AddressSpace *as, hwaddr addr,
 }
 
 MemTxResult address_space_rw(AddressSpace *as, hwaddr addr, MemTxAttrs attrs,
-                             uint8_t *buf, int len, bool is_write)
+                             uint8_t *buf, hwaddr len, bool is_write)
 {
     if (is_write) {
         return address_space_write(as, addr, attrs, buf, len);
@@ -3377,7 +3377,7 @@ MemTxResult address_space_rw(AddressSpace *as, hwaddr addr, MemTxAttrs attrs,
 }
 
 void cpu_physical_memory_rw(hwaddr addr, uint8_t *buf,
-                            int len, int is_write)
+                            hwaddr len, int is_write)
 {
     address_space_rw(&address_space_memory, addr, MEMTXATTRS_UNSPECIFIED,
                      buf, len, is_write);
@@ -3392,7 +3392,7 @@ static inline MemTxResult address_space_write_rom_internal(AddressSpace *as,
                                                            hwaddr addr,
                                                            MemTxAttrs attrs,
                                                            const uint8_t *buf,
-                                                           int len,
+                                                           hwaddr len,
                                                            enum write_rom_type type)
 {
     hwaddr l;
@@ -3432,13 +3432,13 @@ static inline MemTxResult address_space_write_rom_internal(AddressSpace *as,
 /* used for ROM loading : can write in RAM and ROM */
 MemTxResult address_space_write_rom(AddressSpace *as, hwaddr addr,
                                     MemTxAttrs attrs,
-                                    const uint8_t *buf, int len)
+                                    const uint8_t *buf, hwaddr len)
 {
     return address_space_write_rom_internal(as, addr, attrs,
                                             buf, len, WRITE_DATA);
 }
 
-void cpu_flush_icache_range(hwaddr start, int len)
+void cpu_flush_icache_range(hwaddr start, hwaddr len)
 {
     /*
      * This function should do the same thing as an icache flush that was
@@ -3541,7 +3541,7 @@ static void cpu_notify_map_clients(void)
     qemu_mutex_unlock(&map_client_list_lock);
 }
 
-static bool flatview_access_valid(FlatView *fv, hwaddr addr, int len,
+static bool flatview_access_valid(FlatView *fv, hwaddr addr, hwaddr len,
                                   bool is_write, MemTxAttrs attrs)
 {
     MemoryRegion *mr;
@@ -3564,7 +3564,7 @@ static bool flatview_access_valid(FlatView *fv, hwaddr addr, int len,
 }
 
 bool address_space_access_valid(AddressSpace *as, hwaddr addr,
-                                int len, bool is_write,
+                                hwaddr len, bool is_write,
                                 MemTxAttrs attrs)
 {
     FlatView *fv;
@@ -3817,7 +3817,7 @@ static inline MemoryRegion *address_space_translate_cached(
  */
 void
 address_space_read_cached_slow(MemoryRegionCache *cache, hwaddr addr,
-                                   void *buf, int len)
+                                   void *buf, hwaddr len)
 {
     hwaddr addr1, l;
     MemoryRegion *mr;
@@ -3835,7 +3835,7 @@ address_space_read_cached_slow(MemoryRegionCache *cache, hwaddr addr,
  */
 void
 address_space_write_cached_slow(MemoryRegionCache *cache, hwaddr addr,
-                                    const void *buf, int len)
+                                    const void *buf, hwaddr len)
 {
     hwaddr addr1, l;
     MemoryRegion *mr;
@@ -3858,11 +3858,10 @@ address_space_write_cached_slow(MemoryRegionCache *cache, hwaddr addr,
 
 /* virtual memory access for debug (includes writing to ROM) */
 int cpu_memory_rw_debug(CPUState *cpu, target_ulong addr,
-                        uint8_t *buf, int len, int is_write)
+                        uint8_t *buf, target_ulong len, int is_write)
 {
-    int l;
     hwaddr phys_addr;
-    target_ulong page;
+    target_ulong l, page;
 
     cpu_synchronize_state(cpu);
     while (len > 0) {
diff --git a/include/exec/cpu-all.h b/include/exec/cpu-all.h
index 117d2fb..b16c9ec 100644
--- a/include/exec/cpu-all.h
+++ b/include/exec/cpu-all.h
@@ -367,7 +367,7 @@ void dump_opcount_info(FILE *f, fprintf_function cpu_fprintf);
 #endif /* !CONFIG_USER_ONLY */
 
 int cpu_memory_rw_debug(CPUState *cpu, target_ulong addr,
-                        uint8_t *buf, int len, int is_write);
+                        uint8_t *buf, target_ulong len, int is_write);
 
 int cpu_exec(CPUState *cpu);
 
diff --git a/include/exec/cpu-common.h b/include/exec/cpu-common.h
index 2ad2d6d..63ec1f9 100644
--- a/include/exec/cpu-common.h
+++ b/include/exec/cpu-common.h
@@ -83,14 +83,14 @@ size_t qemu_ram_pagesize(RAMBlock *block);
 size_t qemu_ram_pagesize_largest(void);
 
 void cpu_physical_memory_rw(hwaddr addr, uint8_t *buf,
-                            int len, int is_write);
+                            hwaddr len, int is_write);
 static inline void cpu_physical_memory_read(hwaddr addr,
-                                            void *buf, int len)
+                                            void *buf, hwaddr len)
 {
     cpu_physical_memory_rw(addr, buf, len, 0);
 }
 static inline void cpu_physical_memory_write(hwaddr addr,
-                                             const void *buf, int len)
+                                             const void *buf, hwaddr len)
 {
     cpu_physical_memory_rw(addr, (void *)buf, len, 1);
 }
@@ -111,7 +111,7 @@ bool cpu_physical_memory_is_io(hwaddr phys_addr);
  */
 void qemu_flush_coalesced_mmio_buffer(void);
 
-void cpu_flush_icache_range(hwaddr start, int len);
+void cpu_flush_icache_range(hwaddr start, hwaddr len);
 
 extern struct MemoryRegion io_mem_rom;
 extern struct MemoryRegion io_mem_notdirty;
diff --git a/include/exec/memory.h b/include/exec/memory.h
index ffd23ed..6235f77 100644
--- a/include/exec/memory.h
+++ b/include/exec/memory.h
@@ -1773,7 +1773,7 @@ void address_space_destroy(AddressSpace *as);
  */
 MemTxResult address_space_rw(AddressSpace *as, hwaddr addr,
                              MemTxAttrs attrs, uint8_t *buf,
-                             int len, bool is_write);
+                             hwaddr len, bool is_write);
 
 /**
  * address_space_write: write to address space.
@@ -1790,7 +1790,7 @@ MemTxResult address_space_rw(AddressSpace *as, hwaddr addr,
  */
 MemTxResult address_space_write(AddressSpace *as, hwaddr addr,
                                 MemTxAttrs attrs,
-                                const uint8_t *buf, int len);
+                                const uint8_t *buf, hwaddr len);
 
 /**
  * address_space_write_rom: write to address space, including ROM.
@@ -1816,7 +1816,7 @@ MemTxResult address_space_write(AddressSpace *as, hwaddr addr,
  */
 MemTxResult address_space_write_rom(AddressSpace *as, hwaddr addr,
                                     MemTxAttrs attrs,
-                                    const uint8_t *buf, int len);
+                                    const uint8_t *buf, hwaddr len);
 
 /* address_space_ld*: load from an address space
  * address_space_st*: store to an address space
@@ -2017,7 +2017,7 @@ static inline MemoryRegion *address_space_translate(AddressSpace *as,
  * @is_write: indicates the transfer direction
  * @attrs: memory attributes
  */
-bool address_space_access_valid(AddressSpace *as, hwaddr addr, int len,
+bool address_space_access_valid(AddressSpace *as, hwaddr addr, hwaddr len,
                                 bool is_write, MemTxAttrs attrs);
 
 /* address_space_map: map a physical memory region into a host virtual address
@@ -2054,19 +2054,19 @@ void address_space_unmap(AddressSpace *as, void *buffer, hwaddr len,
 
 /* Internal functions, part of the implementation of address_space_read.  */
 MemTxResult address_space_read_full(AddressSpace *as, hwaddr addr,
-                                    MemTxAttrs attrs, uint8_t *buf, int len);
+                                    MemTxAttrs attrs, uint8_t *buf, hwaddr len);
 MemTxResult flatview_read_continue(FlatView *fv, hwaddr addr,
                                    MemTxAttrs attrs, uint8_t *buf,
-                                   int len, hwaddr addr1, hwaddr l,
+                                   hwaddr len, hwaddr addr1, hwaddr l,
                                    MemoryRegion *mr);
 void *qemu_map_ram_ptr(RAMBlock *ram_block, ram_addr_t addr);
 
 /* Internal functions, part of the implementation of address_space_read_cached
  * and address_space_write_cached.  */
 void address_space_read_cached_slow(MemoryRegionCache *cache,
-                                    hwaddr addr, void *buf, int len);
+                                    hwaddr addr, void *buf, hwaddr len);
 void address_space_write_cached_slow(MemoryRegionCache *cache,
-                                     hwaddr addr, const void *buf, int len);
+                                     hwaddr addr, const void *buf, hwaddr len);
 
 static inline bool memory_access_is_direct(MemoryRegion *mr, bool is_write)
 {
@@ -2094,7 +2094,7 @@ static inline bool memory_access_is_direct(MemoryRegion *mr, bool is_write)
 static inline __attribute__((__always_inline__))
 MemTxResult address_space_read(AddressSpace *as, hwaddr addr,
                                MemTxAttrs attrs, uint8_t *buf,
-                               int len)
+                               hwaddr len)
 {
     MemTxResult result = MEMTX_OK;
     hwaddr l, addr1;
@@ -2133,7 +2133,7 @@ MemTxResult address_space_read(AddressSpace *as, hwaddr addr,
  */
 static inline void
 address_space_read_cached(MemoryRegionCache *cache, hwaddr addr,
-                          void *buf, int len)
+                          void *buf, hwaddr len)
 {
     assert(addr < cache->len && len <= cache->len - addr);
     if (likely(cache->ptr)) {
@@ -2153,7 +2153,7 @@ address_space_read_cached(MemoryRegionCache *cache, hwaddr addr,
  */
 static inline void
 address_space_write_cached(MemoryRegionCache *cache, hwaddr addr,
-                           void *buf, int len)
+                           void *buf, hwaddr len)
 {
     assert(addr < cache->len && len <= cache->len - addr);
     if (likely(cache->ptr)) {
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [Qemu-devel] [PATCH for-4.0 v3 2/4] refactor load_image_size
  2018-12-03 14:48 [Qemu-devel] [PATCH for-4.0 v3 0/4] allow to load initrd below 4G for recent kernel Li Zhijian
  2018-12-03 14:48 ` [Qemu-devel] [PATCH for-4.0 v3 1/4] unify len and addr type for memory/address APIs Li Zhijian
@ 2018-12-03 14:48 ` Li Zhijian
  2018-12-03 16:43   ` Richard Henderson
  2018-12-03 14:48 ` [Qemu-devel] [PATCH for-4.0 v3 3/4] i386: import bootparam.h Li Zhijian
  2018-12-03 14:48 ` [Qemu-devel] [PATCH for-4.0 v3 4/4] i386: allow to load initrd below 4G for recent linux Li Zhijian
  3 siblings, 1 reply; 16+ messages in thread
From: Li Zhijian @ 2018-12-03 14:48 UTC (permalink / raw)
  To: qemu-devel, mst, peter.maydell; +Cc: philip.li, zhijianx.li, Li Zhijian

Don't expect read(2) can always read as many as it's told.

Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com>
---
 hw/core/loader.c | 11 +++++------
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/hw/core/loader.c b/hw/core/loader.c
index fa41842..9cbceab 100644
--- a/hw/core/loader.c
+++ b/hw/core/loader.c
@@ -77,21 +77,20 @@ int64_t get_image_size(const char *filename)
 ssize_t load_image_size(const char *filename, void *addr, size_t size)
 {
     int fd;
-    ssize_t actsize;
+    ssize_t actsize, l = 0;
 
     fd = open(filename, O_RDONLY | O_BINARY);
     if (fd < 0) {
         return -1;
     }
 
-    actsize = read(fd, addr, size);
-    if (actsize < 0) {
-        close(fd);
-        return -1;
+    while ((actsize = read(fd, addr + l, size - l)) > 0) {
+        l += actsize;
     }
+
     close(fd);
 
-    return actsize;
+    return actsize < 0 ? -1 : l;
 }
 
 /* read()-like version */
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [Qemu-devel] [PATCH for-4.0 v3 3/4] i386: import bootparam.h
  2018-12-03 14:48 [Qemu-devel] [PATCH for-4.0 v3 0/4] allow to load initrd below 4G for recent kernel Li Zhijian
  2018-12-03 14:48 ` [Qemu-devel] [PATCH for-4.0 v3 1/4] unify len and addr type for memory/address APIs Li Zhijian
  2018-12-03 14:48 ` [Qemu-devel] [PATCH for-4.0 v3 2/4] refactor load_image_size Li Zhijian
@ 2018-12-03 14:48 ` Li Zhijian
  2018-12-03 16:44   ` Richard Henderson
  2018-12-04  1:06   ` Michael S. Tsirkin
  2018-12-03 14:48 ` [Qemu-devel] [PATCH for-4.0 v3 4/4] i386: allow to load initrd below 4G for recent linux Li Zhijian
  3 siblings, 2 replies; 16+ messages in thread
From: Li Zhijian @ 2018-12-03 14:48 UTC (permalink / raw)
  To: qemu-devel, mst, peter.maydell; +Cc: philip.li, zhijianx.li, Li Zhijian

It provides setup_data struct and header fields

CC: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com>

---
V3: new patch
---
 hw/i386/pc.c | 15 +--------------
 1 file changed, 1 insertion(+), 14 deletions(-)

diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 067d23a..8db7417 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -74,6 +74,7 @@
 #include "hw/nmi.h"
 #include "hw/i386/intel_iommu.h"
 #include "hw/net/ne2000-isa.h"
+#include <asm/bootparam.h>
 
 /* debug PC/ISA interrupts */
 //#define DEBUG_IRQ
@@ -820,20 +821,6 @@ static long get_file_size(FILE *f)
     return size;
 }
 
-/* setup_data types */
-#define SETUP_NONE     0
-#define SETUP_E820_EXT 1
-#define SETUP_DTB      2
-#define SETUP_PCI      3
-#define SETUP_EFI      4
-
-struct setup_data {
-    uint64_t next;
-    uint32_t type;
-    uint32_t len;
-    uint8_t data[0];
-} __attribute__((packed));
-
 static void load_linux(PCMachineState *pcms,
                        FWCfgState *fw_cfg)
 {
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [Qemu-devel] [PATCH for-4.0 v3 4/4] i386: allow to load initrd below 4G for recent linux
  2018-12-03 14:48 [Qemu-devel] [PATCH for-4.0 v3 0/4] allow to load initrd below 4G for recent kernel Li Zhijian
                   ` (2 preceding siblings ...)
  2018-12-03 14:48 ` [Qemu-devel] [PATCH for-4.0 v3 3/4] i386: import bootparam.h Li Zhijian
@ 2018-12-03 14:48 ` Li Zhijian
  3 siblings, 0 replies; 16+ messages in thread
From: Li Zhijian @ 2018-12-03 14:48 UTC (permalink / raw)
  To: qemu-devel, mst, peter.maydell
  Cc: philip.li, zhijianx.li, Li Zhijian, Paolo Bonzini,
	Richard Henderson, Eduardo Habkost, Marcel Apfelbaum

a new field xloadflags was added to recent x86 linux, and BIT 1:
XLF_CAN_BE_LOADED_ABOVE_4G is used to tell bootload that where initrd can be
loaded safely.

Current QEMU/BIOS always loads initrd below below_4g_mem_size which is always
less than 4G, so here limiting initrd_max to 4G - 1 simply is enough if
this bit is set.

CC: Paolo Bonzini <pbonzini@redhat.com>
CC: Richard Henderson <rth@twiddle.net>
CC: Eduardo Habkost <ehabkost@redhat.com>
CC: "Michael S. Tsirkin" <mst@redhat.com>
CC: Marcel Apfelbaum <marcel.apfelbaum@gmail.com>
Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com>

---
V3: correct grammar and check XLF_CAN_BE_LOADED_ABOVE_4G first (Michael S. Tsirkin)

Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com>
---
 hw/i386/pc.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index 8db7417..ebaa65f 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -897,7 +897,15 @@ static void load_linux(PCMachineState *pcms,
 #endif
 
     /* highest address for loading the initrd */
-    if (protocol >= 0x203) {
+    if (protocol >= 0x20c &&
+        lduw_p(header+0x236) & XLF_CAN_BE_LOADED_ABOVE_4G) {
+        /*
+         * Although kernel allows initrd loading to above 4G,
+         * it just makes it as large as possible while still staying below 4G
+         * since current BIOS always loads initrd below pcms->below_4g_mem_size
+         */
+        initrd_max = UINT32_MAX;
+    } else if (protocol >= 0x203) {
         initrd_max = ldl_p(header+0x22c);
     } else {
         initrd_max = 0x37ffffff;
-- 
2.7.4

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH for-4.0 v3 1/4] unify len and addr type for memory/address APIs
  2018-12-03 14:48 ` [Qemu-devel] [PATCH for-4.0 v3 1/4] unify len and addr type for memory/address APIs Li Zhijian
  2018-12-03 14:42   ` Peter Maydell
@ 2018-12-03 16:42   ` Richard Henderson
  2018-12-04 17:40   ` Philippe Mathieu-Daudé
  2 siblings, 0 replies; 16+ messages in thread
From: Richard Henderson @ 2018-12-03 16:42 UTC (permalink / raw)
  To: Li Zhijian, qemu-devel, mst, peter.maydell
  Cc: Peter Crosthwaite, philip.li, zhijianx.li, Paolo Bonzini,
	Richard Henderson

On 12/3/18 8:48 AM, Li Zhijian wrote:
> Some address/memory APIs have different type between
> 'hwaddr/target_ulong addr' and 'int len'. It is very unsafety, espcially
> some APIs will be passed a non-int len by caller which might cause
> overflow quietly.
> Below is an potential overflow case:
>     dma_memory_read(uint32_t len)
>       -> dma_memory_rw(uint32_t len)
>         -> dma_memory_rw_relaxed(uint32_t len)
>           -> address_space_rw(int len) # len overflow
> 
> CC: Paolo Bonzini <pbonzini@redhat.com>
> CC: Peter Crosthwaite <crosthwaite.peter@gmail.com>
> CC: Richard Henderson <rth@twiddle.net>
> CC: Peter Maydell <peter.maydell@linaro.org>
> Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com>
> 
> ---
> V3: use the same type between len and addr(Peter Maydell)
>     rebase code basing on https://patchew.org/QEMU/20181122133507.30950-1-peter.maydell@linaro.org/
> ---
>  exec.c                    | 47 +++++++++++++++++++++++------------------------
>  include/exec/cpu-all.h    |  2 +-
>  include/exec/cpu-common.h |  8 ++++----
>  include/exec/memory.h     | 22 +++++++++++-----------
>  4 files changed, 39 insertions(+), 40 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH for-4.0 v3 2/4] refactor load_image_size
  2018-12-03 14:48 ` [Qemu-devel] [PATCH for-4.0 v3 2/4] refactor load_image_size Li Zhijian
@ 2018-12-03 16:43   ` Richard Henderson
  0 siblings, 0 replies; 16+ messages in thread
From: Richard Henderson @ 2018-12-03 16:43 UTC (permalink / raw)
  To: Li Zhijian, qemu-devel, mst, peter.maydell; +Cc: philip.li, zhijianx.li

On 12/3/18 8:48 AM, Li Zhijian wrote:
> Don't expect read(2) can always read as many as it's told.
> 
> Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com>
> ---
>  hw/core/loader.c | 11 +++++------
>  1 file changed, 5 insertions(+), 6 deletions(-)

Reviewed-by: Richard Henderson <richard.henderson@linaro.org>


r~

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH for-4.0 v3 3/4] i386: import bootparam.h
  2018-12-03 14:48 ` [Qemu-devel] [PATCH for-4.0 v3 3/4] i386: import bootparam.h Li Zhijian
@ 2018-12-03 16:44   ` Richard Henderson
  2018-12-04  1:06   ` Michael S. Tsirkin
  1 sibling, 0 replies; 16+ messages in thread
From: Richard Henderson @ 2018-12-03 16:44 UTC (permalink / raw)
  To: Li Zhijian, qemu-devel, mst, peter.maydell; +Cc: philip.li, zhijianx.li

On 12/3/18 8:48 AM, Li Zhijian wrote:
>  #include "hw/net/ne2000-isa.h"
> +#include <asm/bootparam.h>
>  
>  /* debug PC/ISA interrupts */
>  //#define DEBUG_IRQ
> @@ -820,20 +821,6 @@ static long get_file_size(FILE *f)
>      return size;
>  }
>  
> -/* setup_data types */
> -#define SETUP_NONE     0
> -#define SETUP_E820_EXT 1
> -#define SETUP_DTB      2
> -#define SETUP_PCI      3
> -#define SETUP_EFI      4
> -
> -struct setup_data {
> -    uint64_t next;
> -    uint32_t type;
> -    uint32_t len;
> -    uint8_t data[0];
> -} __attribute__((packed));
> -

No, this will fail to build for a non-x86 host, which will not have
<asm/bootparam.h>.  Or, perhaps, have a *different* asm/bootparam.h that will
be specific to a different host cpu.


r~

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH for-4.0 v3 3/4] i386: import bootparam.h
  2018-12-03 14:48 ` [Qemu-devel] [PATCH for-4.0 v3 3/4] i386: import bootparam.h Li Zhijian
  2018-12-03 16:44   ` Richard Henderson
@ 2018-12-04  1:06   ` Michael S. Tsirkin
  2018-12-04  8:09     ` Li Zhijian
  1 sibling, 1 reply; 16+ messages in thread
From: Michael S. Tsirkin @ 2018-12-04  1:06 UTC (permalink / raw)
  To: Li Zhijian; +Cc: qemu-devel, peter.maydell, philip.li, zhijianx.li

On Mon, Dec 03, 2018 at 10:48:51PM +0800, Li Zhijian wrote:
> It provides setup_data struct and header fields
> 
> CC: Michael S. Tsirkin <mst@redhat.com>
> Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com>


Sorry I was unclear when I said "import it from Linux".

The way to import it is to copy the header
from the linux kernel by adding it to ./scripts/update-linux-headers.sh
and placing a copy into include/standard-headers/

Hope that helps.

> ---
> V3: new patch
> ---
>  hw/i386/pc.c | 15 +--------------
>  1 file changed, 1 insertion(+), 14 deletions(-)
> 
> diff --git a/hw/i386/pc.c b/hw/i386/pc.c
> index 067d23a..8db7417 100644
> --- a/hw/i386/pc.c
> +++ b/hw/i386/pc.c
> @@ -74,6 +74,7 @@
>  #include "hw/nmi.h"
>  #include "hw/i386/intel_iommu.h"
>  #include "hw/net/ne2000-isa.h"
> +#include <asm/bootparam.h>
>  
>  /* debug PC/ISA interrupts */
>  //#define DEBUG_IRQ
> @@ -820,20 +821,6 @@ static long get_file_size(FILE *f)
>      return size;
>  }
>  
> -/* setup_data types */
> -#define SETUP_NONE     0
> -#define SETUP_E820_EXT 1
> -#define SETUP_DTB      2
> -#define SETUP_PCI      3
> -#define SETUP_EFI      4
> -
> -struct setup_data {
> -    uint64_t next;
> -    uint32_t type;
> -    uint32_t len;
> -    uint8_t data[0];
> -} __attribute__((packed));
> -
>  static void load_linux(PCMachineState *pcms,
>                         FWCfgState *fw_cfg)
>  {
> -- 
> 2.7.4

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH for-4.0 v3 3/4] i386: import bootparam.h
  2018-12-04  1:06   ` Michael S. Tsirkin
@ 2018-12-04  8:09     ` Li Zhijian
  2018-12-05 10:28       ` Li Zhijian
  0 siblings, 1 reply; 16+ messages in thread
From: Li Zhijian @ 2018-12-04  8:09 UTC (permalink / raw)
  To: Michael S. Tsirkin; +Cc: qemu-devel, peter.maydell, philip.li, zhijianx.li



On 12/04/2018 09:06 AM, Michael S. Tsirkin wrote:
> On Mon, Dec 03, 2018 at 10:48:51PM +0800, Li Zhijian wrote:
>> It provides setup_data struct and header fields
>>
>> CC: Michael S. Tsirkin<mst@redhat.com>
>> Signed-off-by: Li Zhijian<lizhijian@cn.fujitsu.com>
> Sorry I was unclear when I said "import it from Linux".

Sorry, it's my fault.

>
> The way to import it is to copy the header
> from the linux kernel by adding it to ./scripts/update-linux-headers.sh
> and placing a copy into include/standard-headers/
>
> Hope that helps.

that's really helpful.

i wonder which type copy should i use 'cp' or 'cp_portable'
this header includes several sub-headers

$ grep include  /tmp/tmp.MBF10Z9MeS/include/asm/bootparam.h
#include <linux/types.h>
#include <linux/screen_info.h>
#include <linux/apm_bios.h>
#include <linux/edd.h>
#include <asm/ist.h>
#include <video/edid.h>

Thanks
Zhijian

>
>
>

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH for-4.0 v3 1/4] unify len and addr type for memory/address APIs
  2018-12-03 14:48 ` [Qemu-devel] [PATCH for-4.0 v3 1/4] unify len and addr type for memory/address APIs Li Zhijian
  2018-12-03 14:42   ` Peter Maydell
  2018-12-03 16:42   ` Richard Henderson
@ 2018-12-04 17:40   ` Philippe Mathieu-Daudé
  2018-12-06  2:09     ` Li Zhijian
  2 siblings, 1 reply; 16+ messages in thread
From: Philippe Mathieu-Daudé @ 2018-12-04 17:40 UTC (permalink / raw)
  To: Li Zhijian, qemu-devel, mst, peter.maydell
  Cc: Peter Crosthwaite, philip.li, zhijianx.li, Paolo Bonzini,
	Richard Henderson

Hi Li,

On 3/12/18 15:48, Li Zhijian wrote:
> Some address/memory APIs have different type between
> 'hwaddr/target_ulong addr' and 'int len'. It is very unsafety, espcially

I'm not native English speaker, but I think this should be spell:

... "very unsafe, especially" ...

> some APIs will be passed a non-int len by caller which might cause
> overflow quietly.
> Below is an potential overflow case:
>     dma_memory_read(uint32_t len)
>       -> dma_memory_rw(uint32_t len)
>         -> dma_memory_rw_relaxed(uint32_t len)
>           -> address_space_rw(int len) # len overflow
> 
> CC: Paolo Bonzini <pbonzini@redhat.com>
> CC: Peter Crosthwaite <crosthwaite.peter@gmail.com>
> CC: Richard Henderson <rth@twiddle.net>
> CC: Peter Maydell <peter.maydell@linaro.org>
> Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com>
> 
> ---
> V3: use the same type between len and addr(Peter Maydell)
>     rebase code basing on https://patchew.org/QEMU/20181122133507.30950-1-peter.maydell@linaro.org/
> ---
>  exec.c                    | 47 +++++++++++++++++++++++------------------------
>  include/exec/cpu-all.h    |  2 +-
>  include/exec/cpu-common.h |  8 ++++----
>  include/exec/memory.h     | 22 +++++++++++-----------
>  4 files changed, 39 insertions(+), 40 deletions(-)
> 
> diff --git a/exec.c b/exec.c
> index 6e875f0..f475974 100644
> --- a/exec.c
> +++ b/exec.c
> @@ -2848,10 +2848,10 @@ static const MemoryRegionOps watch_mem_ops = {
>  };
>  
>  static MemTxResult flatview_read(FlatView *fv, hwaddr addr,
> -                                      MemTxAttrs attrs, uint8_t *buf, int len);
> +                                      MemTxAttrs attrs, uint8_t *buf, hwaddr len);
>  static MemTxResult flatview_write(FlatView *fv, hwaddr addr, MemTxAttrs attrs,
> -                                  const uint8_t *buf, int len);
> -static bool flatview_access_valid(FlatView *fv, hwaddr addr, int len,
> +                                  const uint8_t *buf, hwaddr len);
> +static bool flatview_access_valid(FlatView *fv, hwaddr addr, hwaddr len,
>                                    bool is_write, MemTxAttrs attrs);
>  
>  static MemTxResult subpage_read(void *opaque, hwaddr addr, uint64_t *data,
> @@ -3099,10 +3099,10 @@ MemoryRegion *get_system_io(void)
>  /* physical memory access (slow version, mainly for debug) */
>  #if defined(CONFIG_USER_ONLY)
>  int cpu_memory_rw_debug(CPUState *cpu, target_ulong addr,
> -                        uint8_t *buf, int len, int is_write)
> +                        uint8_t *buf, target_ulong len, int is_write)
>  {
> -    int l, flags;
> -    target_ulong page;
> +    int flags;
> +    target_ulong l, page;
>      void * p;
>  
>      while (len > 0) {
> @@ -3215,7 +3215,7 @@ static bool prepare_mmio_access(MemoryRegion *mr)
>  static MemTxResult flatview_write_continue(FlatView *fv, hwaddr addr,
>                                             MemTxAttrs attrs,
>                                             const uint8_t *buf,
> -                                           int len, hwaddr addr1,
> +                                           hwaddr len, hwaddr addr1,
>                                             hwaddr l, MemoryRegion *mr)
>  {
>      uint8_t *ptr;
> @@ -3260,7 +3260,7 @@ static MemTxResult flatview_write_continue(FlatView *fv, hwaddr addr,
>  
>  /* Called from RCU critical section.  */
>  static MemTxResult flatview_write(FlatView *fv, hwaddr addr, MemTxAttrs attrs,
> -                                  const uint8_t *buf, int len)
> +                                  const uint8_t *buf, hwaddr len)
>  {
>      hwaddr l;
>      hwaddr addr1;
> @@ -3278,7 +3278,7 @@ static MemTxResult flatview_write(FlatView *fv, hwaddr addr, MemTxAttrs attrs,
>  /* Called within RCU critical section.  */
>  MemTxResult flatview_read_continue(FlatView *fv, hwaddr addr,
>                                     MemTxAttrs attrs, uint8_t *buf,
> -                                   int len, hwaddr addr1, hwaddr l,
> +                                   hwaddr len, hwaddr addr1, hwaddr l,
>                                     MemoryRegion *mr)
>  {
>      uint8_t *ptr;
> @@ -3321,7 +3321,7 @@ MemTxResult flatview_read_continue(FlatView *fv, hwaddr addr,
>  
>  /* Called from RCU critical section.  */
>  static MemTxResult flatview_read(FlatView *fv, hwaddr addr,
> -                                 MemTxAttrs attrs, uint8_t *buf, int len)
> +                                 MemTxAttrs attrs, uint8_t *buf, hwaddr len)
>  {
>      hwaddr l;
>      hwaddr addr1;
> @@ -3334,7 +3334,7 @@ static MemTxResult flatview_read(FlatView *fv, hwaddr addr,
>  }
>  
>  MemTxResult address_space_read_full(AddressSpace *as, hwaddr addr,
> -                                    MemTxAttrs attrs, uint8_t *buf, int len)
> +                                    MemTxAttrs attrs, uint8_t *buf, hwaddr len)
>  {
>      MemTxResult result = MEMTX_OK;
>      FlatView *fv;
> @@ -3351,7 +3351,7 @@ MemTxResult address_space_read_full(AddressSpace *as, hwaddr addr,
>  
>  MemTxResult address_space_write(AddressSpace *as, hwaddr addr,
>                                  MemTxAttrs attrs,
> -                                const uint8_t *buf, int len)
> +                                const uint8_t *buf, hwaddr len)
>  {
>      MemTxResult result = MEMTX_OK;
>      FlatView *fv;
> @@ -3367,7 +3367,7 @@ MemTxResult address_space_write(AddressSpace *as, hwaddr addr,
>  }
>  
>  MemTxResult address_space_rw(AddressSpace *as, hwaddr addr, MemTxAttrs attrs,
> -                             uint8_t *buf, int len, bool is_write)
> +                             uint8_t *buf, hwaddr len, bool is_write)
>  {
>      if (is_write) {
>          return address_space_write(as, addr, attrs, buf, len);
> @@ -3377,7 +3377,7 @@ MemTxResult address_space_rw(AddressSpace *as, hwaddr addr, MemTxAttrs attrs,
>  }
>  
>  void cpu_physical_memory_rw(hwaddr addr, uint8_t *buf,
> -                            int len, int is_write)
> +                            hwaddr len, int is_write)
>  {
>      address_space_rw(&address_space_memory, addr, MEMTXATTRS_UNSPECIFIED,
>                       buf, len, is_write);
> @@ -3392,7 +3392,7 @@ static inline MemTxResult address_space_write_rom_internal(AddressSpace *as,
>                                                             hwaddr addr,
>                                                             MemTxAttrs attrs,
>                                                             const uint8_t *buf,
> -                                                           int len,
> +                                                           hwaddr len,
>                                                             enum write_rom_type type)
>  {
>      hwaddr l;
> @@ -3432,13 +3432,13 @@ static inline MemTxResult address_space_write_rom_internal(AddressSpace *as,
>  /* used for ROM loading : can write in RAM and ROM */
>  MemTxResult address_space_write_rom(AddressSpace *as, hwaddr addr,
>                                      MemTxAttrs attrs,
> -                                    const uint8_t *buf, int len)
> +                                    const uint8_t *buf, hwaddr len)
>  {
>      return address_space_write_rom_internal(as, addr, attrs,
>                                              buf, len, WRITE_DATA);
>  }
>  
> -void cpu_flush_icache_range(hwaddr start, int len)
> +void cpu_flush_icache_range(hwaddr start, hwaddr len)
>  {
>      /*
>       * This function should do the same thing as an icache flush that was
> @@ -3541,7 +3541,7 @@ static void cpu_notify_map_clients(void)
>      qemu_mutex_unlock(&map_client_list_lock);
>  }
>  
> -static bool flatview_access_valid(FlatView *fv, hwaddr addr, int len,
> +static bool flatview_access_valid(FlatView *fv, hwaddr addr, hwaddr len,
>                                    bool is_write, MemTxAttrs attrs)
>  {
>      MemoryRegion *mr;
> @@ -3564,7 +3564,7 @@ static bool flatview_access_valid(FlatView *fv, hwaddr addr, int len,
>  }
>  
>  bool address_space_access_valid(AddressSpace *as, hwaddr addr,
> -                                int len, bool is_write,
> +                                hwaddr len, bool is_write,
>                                  MemTxAttrs attrs)
>  {
>      FlatView *fv;
> @@ -3817,7 +3817,7 @@ static inline MemoryRegion *address_space_translate_cached(
>   */
>  void
>  address_space_read_cached_slow(MemoryRegionCache *cache, hwaddr addr,
> -                                   void *buf, int len)
> +                                   void *buf, hwaddr len)
>  {
>      hwaddr addr1, l;
>      MemoryRegion *mr;
> @@ -3835,7 +3835,7 @@ address_space_read_cached_slow(MemoryRegionCache *cache, hwaddr addr,
>   */
>  void
>  address_space_write_cached_slow(MemoryRegionCache *cache, hwaddr addr,
> -                                    const void *buf, int len)
> +                                    const void *buf, hwaddr len)
>  {
>      hwaddr addr1, l;
>      MemoryRegion *mr;
> @@ -3858,11 +3858,10 @@ address_space_write_cached_slow(MemoryRegionCache *cache, hwaddr addr,
>  
>  /* virtual memory access for debug (includes writing to ROM) */
>  int cpu_memory_rw_debug(CPUState *cpu, target_ulong addr,
> -                        uint8_t *buf, int len, int is_write)
> +                        uint8_t *buf, target_ulong len, int is_write)
>  {
> -    int l;
>      hwaddr phys_addr;
> -    target_ulong page;
> +    target_ulong l, page;
>  
>      cpu_synchronize_state(cpu);
>      while (len > 0) {
> diff --git a/include/exec/cpu-all.h b/include/exec/cpu-all.h
> index 117d2fb..b16c9ec 100644
> --- a/include/exec/cpu-all.h
> +++ b/include/exec/cpu-all.h
> @@ -367,7 +367,7 @@ void dump_opcount_info(FILE *f, fprintf_function cpu_fprintf);
>  #endif /* !CONFIG_USER_ONLY */
>  
>  int cpu_memory_rw_debug(CPUState *cpu, target_ulong addr,
> -                        uint8_t *buf, int len, int is_write);
> +                        uint8_t *buf, target_ulong len, int is_write);
>  
>  int cpu_exec(CPUState *cpu);
>  
> diff --git a/include/exec/cpu-common.h b/include/exec/cpu-common.h
> index 2ad2d6d..63ec1f9 100644
> --- a/include/exec/cpu-common.h
> +++ b/include/exec/cpu-common.h
> @@ -83,14 +83,14 @@ size_t qemu_ram_pagesize(RAMBlock *block);
>  size_t qemu_ram_pagesize_largest(void);
>  
>  void cpu_physical_memory_rw(hwaddr addr, uint8_t *buf,
> -                            int len, int is_write);
> +                            hwaddr len, int is_write);
>  static inline void cpu_physical_memory_read(hwaddr addr,
> -                                            void *buf, int len)
> +                                            void *buf, hwaddr len)
>  {
>      cpu_physical_memory_rw(addr, buf, len, 0);
>  }
>  static inline void cpu_physical_memory_write(hwaddr addr,
> -                                             const void *buf, int len)
> +                                             const void *buf, hwaddr len)
>  {
>      cpu_physical_memory_rw(addr, (void *)buf, len, 1);
>  }
> @@ -111,7 +111,7 @@ bool cpu_physical_memory_is_io(hwaddr phys_addr);
>   */
>  void qemu_flush_coalesced_mmio_buffer(void);
>  
> -void cpu_flush_icache_range(hwaddr start, int len);
> +void cpu_flush_icache_range(hwaddr start, hwaddr len);
>  
>  extern struct MemoryRegion io_mem_rom;
>  extern struct MemoryRegion io_mem_notdirty;
> diff --git a/include/exec/memory.h b/include/exec/memory.h
> index ffd23ed..6235f77 100644
> --- a/include/exec/memory.h
> +++ b/include/exec/memory.h
> @@ -1773,7 +1773,7 @@ void address_space_destroy(AddressSpace *as);
>   */
>  MemTxResult address_space_rw(AddressSpace *as, hwaddr addr,
>                               MemTxAttrs attrs, uint8_t *buf,
> -                             int len, bool is_write);
> +                             hwaddr len, bool is_write);
>  
>  /**
>   * address_space_write: write to address space.
> @@ -1790,7 +1790,7 @@ MemTxResult address_space_rw(AddressSpace *as, hwaddr addr,
>   */
>  MemTxResult address_space_write(AddressSpace *as, hwaddr addr,
>                                  MemTxAttrs attrs,
> -                                const uint8_t *buf, int len);
> +                                const uint8_t *buf, hwaddr len);
>  
>  /**
>   * address_space_write_rom: write to address space, including ROM.
> @@ -1816,7 +1816,7 @@ MemTxResult address_space_write(AddressSpace *as, hwaddr addr,
>   */
>  MemTxResult address_space_write_rom(AddressSpace *as, hwaddr addr,
>                                      MemTxAttrs attrs,
> -                                    const uint8_t *buf, int len);
> +                                    const uint8_t *buf, hwaddr len);
>  
>  /* address_space_ld*: load from an address space
>   * address_space_st*: store to an address space
> @@ -2017,7 +2017,7 @@ static inline MemoryRegion *address_space_translate(AddressSpace *as,
>   * @is_write: indicates the transfer direction
>   * @attrs: memory attributes
>   */
> -bool address_space_access_valid(AddressSpace *as, hwaddr addr, int len,
> +bool address_space_access_valid(AddressSpace *as, hwaddr addr, hwaddr len,
>                                  bool is_write, MemTxAttrs attrs);
>  
>  /* address_space_map: map a physical memory region into a host virtual address
> @@ -2054,19 +2054,19 @@ void address_space_unmap(AddressSpace *as, void *buffer, hwaddr len,
>  
>  /* Internal functions, part of the implementation of address_space_read.  */
>  MemTxResult address_space_read_full(AddressSpace *as, hwaddr addr,
> -                                    MemTxAttrs attrs, uint8_t *buf, int len);
> +                                    MemTxAttrs attrs, uint8_t *buf, hwaddr len);
>  MemTxResult flatview_read_continue(FlatView *fv, hwaddr addr,
>                                     MemTxAttrs attrs, uint8_t *buf,
> -                                   int len, hwaddr addr1, hwaddr l,
> +                                   hwaddr len, hwaddr addr1, hwaddr l,
>                                     MemoryRegion *mr);
>  void *qemu_map_ram_ptr(RAMBlock *ram_block, ram_addr_t addr);
>  
>  /* Internal functions, part of the implementation of address_space_read_cached
>   * and address_space_write_cached.  */
>  void address_space_read_cached_slow(MemoryRegionCache *cache,
> -                                    hwaddr addr, void *buf, int len);
> +                                    hwaddr addr, void *buf, hwaddr len);
>  void address_space_write_cached_slow(MemoryRegionCache *cache,
> -                                     hwaddr addr, const void *buf, int len);
> +                                     hwaddr addr, const void *buf, hwaddr len);
>  
>  static inline bool memory_access_is_direct(MemoryRegion *mr, bool is_write)
>  {
> @@ -2094,7 +2094,7 @@ static inline bool memory_access_is_direct(MemoryRegion *mr, bool is_write)
>  static inline __attribute__((__always_inline__))
>  MemTxResult address_space_read(AddressSpace *as, hwaddr addr,
>                                 MemTxAttrs attrs, uint8_t *buf,
> -                               int len)
> +                               hwaddr len)
>  {
>      MemTxResult result = MEMTX_OK;
>      hwaddr l, addr1;
> @@ -2133,7 +2133,7 @@ MemTxResult address_space_read(AddressSpace *as, hwaddr addr,
>   */
>  static inline void
>  address_space_read_cached(MemoryRegionCache *cache, hwaddr addr,
> -                          void *buf, int len)
> +                          void *buf, hwaddr len)
>  {
>      assert(addr < cache->len && len <= cache->len - addr);
>      if (likely(cache->ptr)) {
> @@ -2153,7 +2153,7 @@ address_space_read_cached(MemoryRegionCache *cache, hwaddr addr,
>   */
>  static inline void
>  address_space_write_cached(MemoryRegionCache *cache, hwaddr addr,
> -                           void *buf, int len)
> +                           void *buf, hwaddr len)
>  {
>      assert(addr < cache->len && len <= cache->len - addr);
>      if (likely(cache->ptr)) {
> 

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH for-4.0 v3 3/4] i386: import bootparam.h
  2018-12-04  8:09     ` Li Zhijian
@ 2018-12-05 10:28       ` Li Zhijian
  2018-12-05 15:33         ` Michael S. Tsirkin
  0 siblings, 1 reply; 16+ messages in thread
From: Li Zhijian @ 2018-12-05 10:28 UTC (permalink / raw)
  To: Michael S. Tsirkin; +Cc: qemu-devel, peter.maydell, philip.li, zhijianx.li

Hi Michael

I cooked a draft with cp_portable to import bootparam.h, could you have a look.

diff --git a/scripts/update-linux-headers.sh b/scripts/update-linux-headers.sh
index 0a964fe..1beeceb 100755
--- a/scripts/update-linux-headers.sh
+++ b/scripts/update-linux-headers.sh
@@ -44,6 +44,12 @@ cp_portable() {
                                       -e 'linux/kernel' \
                                       -e 'linux/sysinfo' \
                                       -e 'asm-generic/kvm_para' \
+                                     -e 'linux/screen_info.h' \
+                                     -e 'linux/apm_bios.h' \
+                                     -e 'linux/edd.h' \
+                                     -e 'video/edid.h' \
+                                     -e 'asm/ist.h' \
+                                     -e 'linux/ioctl.h' \
                                       > /dev/null
      then
          echo "Unexpected #include in input file $f".
@@ -59,6 +65,8 @@ cp_portable() {
          -e 's/__be\([0-9][0-9]*\)/uint\1_t/g' \
          -e 's/"\(input-event-codes\.h\)"/"standard-headers\/linux\/\1"/' \
          -e 's/<linux\/\([^>]*\)>/"standard-headers\/linux\/\1"/' \
+        -e "s/<asm\/\([^>]*\)>/\"standard-headers\/asm-$arch\/\1\"/" \
+        -e 's/<video\/\([^>]*\)>/"standard-headers\/video\/\1"/' \
          -e 's/__bitwise//' \
          -e 's/__attribute__((packed))/QEMU_PACKED/' \
          -e 's/__inline__/inline/' \
@@ -74,6 +82,23 @@ cp_portable() {
          "$f" > "$to/$header";
  }
  
+rm -rf "$output/include/standard-headers/linux"
+mkdir -p "$output/include/standard-headers/linux"
+
+cp_bootparam()
+{
+    mkdir -p $output/include/standard-headers/video
+    cp "$tmpdir"/include/linux/ioctl.h "$output/include/standard-headers/linux"
+    cp_portable "$tmpdir"/include/linux/screen_info.h "$output/include/standard-headers/linux"
+    cp_portable "$tmpdir/include/linux/apm_bios.h" "$output/include/standard-headers/linux"
+    cp_portable "$tmpdir/include/linux/edd.h" "$output/include/standard-headers/linux"
+    cp_portable "$tmpdir/include/asm/ist.h" $output/include/standard-headers/asm-$arch
+    cp_portable "$tmpdir/include/video/edid.h" $output/include/standard-headers/video
+
+    # bootparam.h includes above headers
+    cp_portable "$tmpdir/include/asm/bootparam.h" "$output/include/standard-headers/asm-$arch"
+}
+
  # This will pick up non-directories too (eg "Kconfig") but we will
  # ignore them in the next loop.
  ARCHLIST=$(cd "$linux/arch" && echo *)
@@ -120,6 +145,7 @@ for arch in $ARCHLIST; do
          cp "$tmpdir/include/asm/unistd_x32.h" "$output/linux-headers/asm-x86/"
          cp "$tmpdir/include/asm/unistd_64.h" "$output/linux-headers/asm-x86/"
          cp_portable "$tmpdir/include/asm/kvm_para.h" "$output/include/standard-headers/asm-$arch"
+        cp_bootparam
      fi
  done
  
@@ -163,8 +189,6 @@ cat <<EOF >$output/linux-headers/linux/virtio_ring.h
  #include "standard-headers/linux/virtio_ring.h"
  EOF
  
-rm -rf "$output/include/standard-headers/linux"
-mkdir -p "$output/include/standard-headers/linux"
  for i in "$tmpdir"/include/linux/*virtio*.h \
           "$tmpdir/include/linux/qemu_fw_cfg.h" \
           "$tmpdir/include/linux/input.h" \

Thanks
Zhijian


On 12/04/2018 04:09 PM, Li Zhijian wrote:
>
>
>
> On 12/04/2018 09:06 AM, Michael S. Tsirkin wrote:
>> On Mon, Dec 03, 2018 at 10:48:51PM +0800, Li Zhijian wrote:
>>> It provides setup_data struct and header fields
>>>
>>> CC: Michael S. Tsirkin<mst@redhat.com>
>>> Signed-off-by: Li Zhijian<lizhijian@cn.fujitsu.com>
>> Sorry I was unclear when I said "import it from Linux".
> Sorry, it's my fault.
>
>> The way to import it is to copy the header
>> from the linux kernel by adding it to ./scripts/update-linux-headers.sh
>> and placing a copy into include/standard-headers/
>>
>> Hope that helps.
> that's really helpful.
>
> i wonder which type copy should i use 'cp' or 'cp_portable'
> this header includes several sub-headers
>
> $ grep include  /tmp/tmp.MBF10Z9MeS/include/asm/bootparam.h
> #include <linux/types.h>
> #include <linux/screen_info.h>
> #include <linux/apm_bios.h>
> #include <linux/edd.h>
> #include <asm/ist.h>
> #include <video/edid.h>
>
> Thanks
> Zhijian
>
>>
>      
>    
>
>
>
>

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH for-4.0 v3 3/4] i386: import bootparam.h
  2018-12-05 10:28       ` Li Zhijian
@ 2018-12-05 15:33         ` Michael S. Tsirkin
  2018-12-06  2:13           ` Li Zhijian
  0 siblings, 1 reply; 16+ messages in thread
From: Michael S. Tsirkin @ 2018-12-05 15:33 UTC (permalink / raw)
  To: Li Zhijian; +Cc: qemu-devel, peter.maydell, philip.li, zhijianx.li

On Wed, Dec 05, 2018 at 06:28:11PM +0800, Li Zhijian wrote:
> Hi Michael
> 
> I cooked a draft with cp_portable to import bootparam.h, could you have a look.
> 
> diff --git a/scripts/update-linux-headers.sh b/scripts/update-linux-headers.sh
> index 0a964fe..1beeceb 100755
> --- a/scripts/update-linux-headers.sh
> +++ b/scripts/update-linux-headers.sh
> @@ -44,6 +44,12 @@ cp_portable() {
>                                       -e 'linux/kernel' \
>                                       -e 'linux/sysinfo' \
>                                       -e 'asm-generic/kvm_para' \
> +                                     -e 'linux/screen_info.h' \
> +                                     -e 'linux/apm_bios.h' \
> +                                     -e 'linux/edd.h' \
> +                                     -e 'video/edid.h' \
> +                                     -e 'asm/ist.h' \
> +                                     -e 'linux/ioctl.h' \
>                                       > /dev/null
>      then
>          echo "Unexpected #include in input file $f".
> @@ -59,6 +65,8 @@ cp_portable() {
>          -e 's/__be\([0-9][0-9]*\)/uint\1_t/g' \
>          -e 's/"\(input-event-codes\.h\)"/"standard-headers\/linux\/\1"/' \
>          -e 's/<linux\/\([^>]*\)>/"standard-headers\/linux\/\1"/' \
> +        -e "s/<asm\/\([^>]*\)>/\"standard-headers\/asm-$arch\/\1\"/" \
> +        -e 's/<video\/\([^>]*\)>/"standard-headers\/video\/\1"/' \
>          -e 's/__bitwise//' \
>          -e 's/__attribute__((packed))/QEMU_PACKED/' \
>          -e 's/__inline__/inline/' \
> @@ -74,6 +82,23 @@ cp_portable() {
>          "$f" > "$to/$header";
>  }
> 
> +rm -rf "$output/include/standard-headers/linux"
> +mkdir -p "$output/include/standard-headers/linux"
> +
> +cp_bootparam()
> +{
> +    mkdir -p $output/include/standard-headers/video
> +    cp "$tmpdir"/include/linux/ioctl.h "$output/include/standard-headers/linux"
> +    cp_portable "$tmpdir"/include/linux/screen_info.h "$output/include/standard-headers/linux"
> +    cp_portable "$tmpdir/include/linux/apm_bios.h" "$output/include/standard-headers/linux"
> +    cp_portable "$tmpdir/include/linux/edd.h" "$output/include/standard-headers/linux"
> +    cp_portable "$tmpdir/include/asm/ist.h" $output/include/standard-headers/asm-$arch
> +    cp_portable "$tmpdir/include/video/edid.h" $output/include/standard-headers/video
> +
> +    # bootparam.h includes above headers
> +    cp_portable "$tmpdir/include/asm/bootparam.h" "$output/include/standard-headers/asm-$arch"
> +}
> +
>  # This will pick up non-directories too (eg "Kconfig") but we will
>  # ignore them in the next loop.
>  ARCHLIST=$(cd "$linux/arch" && echo *)
> @@ -120,6 +145,7 @@ for arch in $ARCHLIST; do
>          cp "$tmpdir/include/asm/unistd_x32.h" "$output/linux-headers/asm-x86/"
>          cp "$tmpdir/include/asm/unistd_64.h" "$output/linux-headers/asm-x86/"
>          cp_portable "$tmpdir/include/asm/kvm_para.h" "$output/include/standard-headers/asm-$arch"
> +        cp_bootparam
>      fi
>  done
> 
> @@ -163,8 +189,6 @@ cat <<EOF >$output/linux-headers/linux/virtio_ring.h
>  #include "standard-headers/linux/virtio_ring.h"
>  EOF
> 
> -rm -rf "$output/include/standard-headers/linux"
> -mkdir -p "$output/include/standard-headers/linux"
>  for i in "$tmpdir"/include/linux/*virtio*.h \
>           "$tmpdir/include/linux/qemu_fw_cfg.h" \
>           "$tmpdir/include/linux/input.h" \
> 
> Thanks
> Zhijian
> 

So arch specific asm including asm doesn't work well right now :(
You can either fix the path to ist to pull it from asm-x86,
or if you don't actually need anything in that header the
macros, you can just cut out everything around __ASSEMBLY__
with a bit of e.g. sed magic. E.g. pvrdma does this.

Something like:

# Remove everything except the macros from bootparam.h avoiding the unnecessary
# import of several video/ist/etc headers
sed  -e '/__ASSEMBLY__/,/__ASSEMBLY__/d' arch/x86/include/uapi/asm/bootparam.h

should do the job.


> 
> On 12/04/2018 04:09 PM, Li Zhijian wrote:
> 
> 
> 
> 
>     On 12/04/2018 09:06 AM, Michael S. Tsirkin wrote:
> 
>         On Mon, Dec 03, 2018 at 10:48:51PM +0800, Li Zhijian wrote:
> 
>             It provides setup_data struct and header fields
> 
>             CC: Michael S. Tsirkin <mst@redhat.com>
>             Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com>
> 
>         Sorry I was unclear when I said "import it from Linux".
> 
>     Sorry, it's my fault.
> 
> 
>         The way to import it is to copy the header
>         from the linux kernel by adding it to ./scripts/update-linux-headers.sh
>         and placing a copy into include/standard-headers/
> 
>         Hope that helps.
> 
>     that's really helpful.
> 
>     i wonder which type copy should i use 'cp' or 'cp_portable'
>     this header includes several sub-headers
> 
>     $ grep include  /tmp/tmp.MBF10Z9MeS/include/asm/bootparam.h
>     #include <linux/types.h>
>     #include <linux/screen_info.h>
>     #include <linux/apm_bios.h>
>     #include <linux/edd.h>
>     #include <asm/ist.h>
>     #include <video/edid.h>
> 
>     Thanks
>     Zhijian
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH for-4.0 v3 1/4] unify len and addr type for memory/address APIs
  2018-12-04 17:40   ` Philippe Mathieu-Daudé
@ 2018-12-06  2:09     ` Li Zhijian
  0 siblings, 0 replies; 16+ messages in thread
From: Li Zhijian @ 2018-12-06  2:09 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé, qemu-devel, mst, peter.maydell
  Cc: Peter Crosthwaite, philip.li, zhijianx.li, Paolo Bonzini,
	Richard Henderson


On 12/05/2018 01:40 AM, Philippe Mathieu-Daudé wrote:
> Hi Li,
>
> On 3/12/18 15:48, Li Zhijian wrote:
>> Some address/memory APIs have different type between
>> 'hwaddr/target_ulong addr' and 'int len'. It is very unsafety, espcially
> I'm not native English speaker, but I think this should be spell:
>
> ... "very unsafe, especially" ...

thanks, Google said so.

Thanks
Zhijian

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH for-4.0 v3 3/4] i386: import bootparam.h
  2018-12-05 15:33         ` Michael S. Tsirkin
@ 2018-12-06  2:13           ` Li Zhijian
  0 siblings, 0 replies; 16+ messages in thread
From: Li Zhijian @ 2018-12-06  2:13 UTC (permalink / raw)
  To: Michael S. Tsirkin; +Cc: qemu-devel, peter.maydell, philip.li, zhijianx.li


On 12/05/2018 11:33 PM, Michael S. Tsirkin wrote:
> On Wed, Dec 05, 2018 at 06:28:11PM +0800, Li Zhijian wrote:
>> Hi Michael
>>
>> I cooked a draft with cp_portable to import bootparam.h, could you have a look.
>>
>> diff --git a/scripts/update-linux-headers.sh b/scripts/update-linux-headers.sh
>> index 0a964fe..1beeceb 100755
>> --- a/scripts/update-linux-headers.sh
>> +++ b/scripts/update-linux-headers.sh
>> @@ -44,6 +44,12 @@ cp_portable() {
>>                                        -e 'linux/kernel' \
>>                                        -e 'linux/sysinfo' \
>>                                        -e 'asm-generic/kvm_para' \
>> +                                     -e 'linux/screen_info.h' \
>> +                                     -e 'linux/apm_bios.h' \
>> +                                     -e 'linux/edd.h' \
>> +                                     -e 'video/edid.h' \
>> +                                     -e 'asm/ist.h' \
>> +                                     -e 'linux/ioctl.h' \
>>                                        > /dev/null
>>       then
>>           echo "Unexpected #include in input file $f".
>> @@ -59,6 +65,8 @@ cp_portable() {
>>           -e 's/__be\([0-9][0-9]*\)/uint\1_t/g' \
>>           -e 's/"\(input-event-codes\.h\)"/"standard-headers\/linux\/\1"/' \
>>           -e 's/<linux\/\([^>]*\)>/"standard-headers\/linux\/\1"/' \
>> +        -e "s/<asm\/\([^>]*\)>/\"standard-headers\/asm-$arch\/\1\"/" \
>> +        -e 's/<video\/\([^>]*\)>/"standard-headers\/video\/\1"/' \
>>           -e 's/__bitwise//' \
>>           -e 's/__attribute__((packed))/QEMU_PACKED/' \
>>           -e 's/__inline__/inline/' \
>> @@ -74,6 +82,23 @@ cp_portable() {
>>           "$f" > "$to/$header";
>>   }
>>
>> +rm -rf "$output/include/standard-headers/linux"
>> +mkdir -p "$output/include/standard-headers/linux"
>> +
>> +cp_bootparam()
>> +{
>> +    mkdir -p $output/include/standard-headers/video
>> +    cp "$tmpdir"/include/linux/ioctl.h "$output/include/standard-headers/linux"
>> +    cp_portable "$tmpdir"/include/linux/screen_info.h "$output/include/standard-headers/linux"
>> +    cp_portable "$tmpdir/include/linux/apm_bios.h" "$output/include/standard-headers/linux"
>> +    cp_portable "$tmpdir/include/linux/edd.h" "$output/include/standard-headers/linux"
>> +    cp_portable "$tmpdir/include/asm/ist.h" $output/include/standard-headers/asm-$arch
>> +    cp_portable "$tmpdir/include/video/edid.h" $output/include/standard-headers/video
>> +
>> +    # bootparam.h includes above headers
>> +    cp_portable "$tmpdir/include/asm/bootparam.h" "$output/include/standard-headers/asm-$arch"
>> +}
>> +
>>   # This will pick up non-directories too (eg "Kconfig") but we will
>>   # ignore them in the next loop.
>>   ARCHLIST=$(cd "$linux/arch" && echo *)
>> @@ -120,6 +145,7 @@ for arch in $ARCHLIST; do
>>           cp "$tmpdir/include/asm/unistd_x32.h" "$output/linux-headers/asm-x86/"
>>           cp "$tmpdir/include/asm/unistd_64.h" "$output/linux-headers/asm-x86/"
>>           cp_portable "$tmpdir/include/asm/kvm_para.h" "$output/include/standard-headers/asm-$arch"
>> +        cp_bootparam
>>       fi
>>   done
>>
>> @@ -163,8 +189,6 @@ cat <<EOF >$output/linux-headers/linux/virtio_ring.h
>>   #include "standard-headers/linux/virtio_ring.h"
>>   EOF
>>
>> -rm -rf "$output/include/standard-headers/linux"
>> -mkdir -p "$output/include/standard-headers/linux"
>>   for i in "$tmpdir"/include/linux/*virtio*.h \
>>            "$tmpdir/include/linux/qemu_fw_cfg.h" \
>>            "$tmpdir/include/linux/input.h" \
>>
>> Thanks
>> Zhijian
>>
> So arch specific asm including asm doesn't work well right now :(
> You can either fix the path to ist to pull it from asm-x86,

> +        -e "s/<asm\/\([^>]*\)>/\"standard-headers\/asm-$arch\/\1\"/" \
> +        -e 's/<video\/\([^>]*\)>/"standard-headers\/video\/\1"/' \


Actually above changes fix the path with asm as well.
But I'd like below solution which is simpler and clearer


> or if you don't actually need anything in that header the
> macros, you can just cut out everything around __ASSEMBLY__
> with a bit of e.g. sed magic. E.g. pvrdma does this.
>
> Something like:
>
> # Remove everything except the macros from bootparam.h avoiding the unnecessary
> # import of several video/ist/etc headers
> sed  -e '/__ASSEMBLY__/,/__ASSEMBLY__/d' arch/x86/include/uapi/asm/bootparam.h
>
> should do the job.

Thanks
Zhijian

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2018-12-06  2:13 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-12-03 14:48 [Qemu-devel] [PATCH for-4.0 v3 0/4] allow to load initrd below 4G for recent kernel Li Zhijian
2018-12-03 14:48 ` [Qemu-devel] [PATCH for-4.0 v3 1/4] unify len and addr type for memory/address APIs Li Zhijian
2018-12-03 14:42   ` Peter Maydell
2018-12-03 16:42   ` Richard Henderson
2018-12-04 17:40   ` Philippe Mathieu-Daudé
2018-12-06  2:09     ` Li Zhijian
2018-12-03 14:48 ` [Qemu-devel] [PATCH for-4.0 v3 2/4] refactor load_image_size Li Zhijian
2018-12-03 16:43   ` Richard Henderson
2018-12-03 14:48 ` [Qemu-devel] [PATCH for-4.0 v3 3/4] i386: import bootparam.h Li Zhijian
2018-12-03 16:44   ` Richard Henderson
2018-12-04  1:06   ` Michael S. Tsirkin
2018-12-04  8:09     ` Li Zhijian
2018-12-05 10:28       ` Li Zhijian
2018-12-05 15:33         ` Michael S. Tsirkin
2018-12-06  2:13           ` Li Zhijian
2018-12-03 14:48 ` [Qemu-devel] [PATCH for-4.0 v3 4/4] i386: allow to load initrd below 4G for recent linux Li Zhijian

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).