[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v3 2/3] xen: remove tmem from hypervisor



On Wed, Apr 10, 2019 at 06:12:35AM -0600, Jan Beulich wrote:
> >>> On 10.04.19 at 13:57, <wei.liu2@xxxxxxxxxx> wrote:
> > On Wed, Apr 10, 2019 at 04:55:50AM -0600, Jan Beulich wrote:
> >> >>> On 09.04.19 at 18:52, <wei.liu2@xxxxxxxxxx> wrote:
> >> > --- a/xen/common/Makefile
> >> > +++ b/xen/common/Makefile
> >> 
> >> There's are hunks missing here to remove
> >> 
> >> obj-$(CONFIG_TMEM) += lzo.o
> >> 
> >> and to replace
> >> 
> >> lzo-y := lzo
> >> lzo-$(CONFIG_TMEM) :=
> >> 
> >> (and its use).
> > 
> > I guess we can drop lzo in its entirety now?
> 
> You can drop lzo-y, but not the building of lzo.init.o, as it may be
> needed for decompressing the Dom0 kernel.

Please check this fixup patch

From f500cee04e69c8fc2ebdac5a3d1c3c9652578139 Mon Sep 17 00:00:00 2001
From: Wei Liu <wei.liu2@xxxxxxxxxx>
Date: Wed, 10 Apr 2019 12:52:43 +0100
Subject: [PATCH] fixup

---
 xen/arch/x86/guest/hypercall_page.S |   1 -
 xen/common/Makefile                 |   5 +-
 xen/common/lzo.c                    | 264 +---------------------------
 xen/include/public/tmem.h           |   2 +-
 4 files changed, 3 insertions(+), 269 deletions(-)

diff --git a/xen/arch/x86/guest/hypercall_page.S 
b/xen/arch/x86/guest/hypercall_page.S
index 347fee4ff9..6485e9150e 100644
--- a/xen/arch/x86/guest/hypercall_page.S
+++ b/xen/arch/x86/guest/hypercall_page.S
@@ -59,7 +59,6 @@ DECLARE_HYPERCALL(sysctl)
 DECLARE_HYPERCALL(domctl)
 DECLARE_HYPERCALL(kexec_op)
 DECLARE_HYPERCALL(argo_op)
-DECLARE_HYPERCALL(xc_reserved_op)
 DECLARE_HYPERCALL(xenpmu_op)
 
 DECLARE_HYPERCALL(arch_0)
diff --git a/xen/common/Makefile b/xen/common/Makefile
index 51df0ba844..33d03b862f 100644
--- a/xen/common/Makefile
+++ b/xen/common/Makefile
@@ -22,7 +22,6 @@ obj-$(CONFIG_KEXEC) += kimage.o
 obj-y += lib.o
 obj-$(CONFIG_NEEDS_LIST_SORT) += list_sort.o
 obj-$(CONFIG_LIVEPATCH) += livepatch.o livepatch_elf.o
-obj-$(CONFIG_TMEM) += lzo.o
 obj-$(CONFIG_MEM_ACCESS) += mem_access.o
 obj-y += memory.o
 obj-y += monitor.o
@@ -67,9 +66,7 @@ obj-bin-y += warning.init.o
 obj-$(CONFIG_XENOPROF) += xenoprof.o
 obj-y += xmalloc_tlsf.o
 
-lzo-y := lzo
-lzo-$(CONFIG_TMEM) :=
-obj-bin-$(CONFIG_X86) += $(foreach n,decompress bunzip2 unxz unlzma $(lzo-y) 
unlzo unlz4 earlycpio,$(n).init.o)
+obj-bin-$(CONFIG_X86) += $(foreach n,decompress bunzip2 unxz unlzma lzo unlzo 
unlz4 earlycpio,$(n).init.o)
 
 obj-$(CONFIG_COMPAT) += $(addprefix compat/,domain.o kernel.o memory.o 
multicall.o xlat.o)
 
diff --git a/xen/common/lzo.c b/xen/common/lzo.c
index 0a11671075..f4c0ad8530 100644
--- a/xen/common/lzo.c
+++ b/xen/common/lzo.c
@@ -105,269 +105,7 @@
 #define get_unaligned_le16(_p) (*(u16 *)(_p))
 #define get_unaligned_le32(_p) (*(u32 *)(_p))
 
-#ifdef CONFIG_TMEM
-
-static noinline size_t
-lzo1x_1_do_compress(const unsigned char *in, size_t in_len,
-                    unsigned char *out, size_t *out_len,
-                    size_t ti, void *wrkmem)
-{
-    const unsigned char *ip;
-    unsigned char *op;
-    const unsigned char * const in_end = in + in_len;
-    const unsigned char * const ip_end = in + in_len - 20;
-    const unsigned char *ii;
-    lzo_dict_t * const dict = (lzo_dict_t *) wrkmem;
-
-    op = out;
-    ip = in;
-    ii = ip;
-    ip += ti < 4 ? 4 - ti : 0;
-
-    for (;;) {
-        const unsigned char *m_pos;
-        size_t t, m_len, m_off;
-        u32 dv;
-    literal:
-        ip += 1 + ((ip - ii) >> 5);
-    next:
-        if (unlikely(ip >= ip_end))
-            break;
-        dv = get_unaligned_le32(ip);
-        t = ((dv * 0x1824429d) >> (32 - D_BITS)) & D_MASK;
-        m_pos = in + dict[t];
-        dict[t] = (lzo_dict_t) (ip - in);
-        if (unlikely(dv != get_unaligned_le32(m_pos)))
-            goto literal;
-
-        ii -= ti;
-        ti = 0;
-        t = ip - ii;
-        if (t != 0) {
-            if (t <= 3) {
-                op[-2] |= t;
-                COPY4(op, ii);
-                op += t;
-            } else if (t <= 16) {
-                *op++ = (t - 3);
-                COPY8(op, ii);
-                COPY8(op + 8, ii + 8);
-                op += t;
-            } else {
-                if (t <= 18) {
-                    *op++ = (t - 3);
-                } else {
-                    size_t tt = t - 18;
-                    *op++ = 0;
-                    while (unlikely(tt > 255)) {
-                        tt -= 255;
-                        *op++ = 0;
-                    }
-                    *op++ = tt;
-                }
-                do {
-                    COPY8(op, ii);
-                    COPY8(op + 8, ii + 8);
-                    op += 16;
-                    ii += 16;
-                    t -= 16;
-                } while (t >= 16);
-                if (t > 0) do {
-                    *op++ = *ii++;
-                } while (--t > 0);
-            }
-        }
-
-        m_len = 4;
-        {
-#if defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) && defined(LZO_USE_CTZ64)
-        u64 v;
-        v = get_unaligned((const u64 *) (ip + m_len)) ^
-            get_unaligned((const u64 *) (m_pos + m_len));
-        if (unlikely(v == 0)) {
-            do {
-                m_len += 8;
-                v = get_unaligned((const u64 *) (ip + m_len)) ^
-                    get_unaligned((const u64 *) (m_pos + m_len));
-                if (unlikely(ip + m_len >= ip_end))
-                    goto m_len_done;
-            } while (v == 0);
-        }
-#  if defined(__LITTLE_ENDIAN)
-        m_len += (unsigned) __builtin_ctzll(v) / 8;
-#  elif defined(__BIG_ENDIAN)
-        m_len += (unsigned) __builtin_clzll(v) / 8;
-#  else
-#    error "missing endian definition"
-#  endif
-#elif defined(CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS) && defined(LZO_USE_CTZ32)
-        u32 v;
-        v = get_unaligned((const u32 *) (ip + m_len)) ^
-            get_unaligned((const u32 *) (m_pos + m_len));
-        if (unlikely(v == 0)) {
-            do {
-                m_len += 4;
-                v = get_unaligned((const u32 *) (ip + m_len)) ^
-                    get_unaligned((const u32 *) (m_pos + m_len));
-                if (v != 0)
-                    break;
-                m_len += 4;
-                v = get_unaligned((const u32 *) (ip + m_len)) ^
-                    get_unaligned((const u32 *) (m_pos + m_len));
-                if (unlikely(ip + m_len >= ip_end))
-                    goto m_len_done;
-            } while (v == 0);
-        }
-#  if defined(__LITTLE_ENDIAN)
-        m_len += (unsigned) __builtin_ctz(v) / 8;
-#  elif defined(__BIG_ENDIAN)
-        m_len += (unsigned) __builtin_clz(v) / 8;
-#  else
-#    error "missing endian definition"
-#  endif
-#else
-        if (unlikely(ip[m_len] == m_pos[m_len])) {
-            do {
-                m_len += 1;
-                if (ip[m_len] != m_pos[m_len])
-                    break;
-                m_len += 1;
-                if (ip[m_len] != m_pos[m_len])
-                    break;
-                m_len += 1;
-                if (ip[m_len] != m_pos[m_len])
-                    break;
-                m_len += 1;
-                if (ip[m_len] != m_pos[m_len])
-                    break;
-                m_len += 1;
-                if (ip[m_len] != m_pos[m_len])
-                    break;
-                m_len += 1;
-                if (ip[m_len] != m_pos[m_len])
-                    break;
-                m_len += 1;
-                if (ip[m_len] != m_pos[m_len])
-                    break;
-                m_len += 1;
-                if (unlikely(ip + m_len >= ip_end))
-                    goto m_len_done;
-            } while (ip[m_len] == m_pos[m_len]);
-        }
-#endif
-        }
- m_len_done:
-
-        m_off = ip - m_pos;
-        ip += m_len;
-        ii = ip;
-        if (m_len <= M2_MAX_LEN && m_off <= M2_MAX_OFFSET) {
-            m_off -= 1;
-            *op++ = (((m_len - 1) << 5) | ((m_off & 7) << 2));
-            *op++ = (m_off >> 3);
-        } else if (m_off <= M3_MAX_OFFSET) {
-            m_off -= 1;
-            if (m_len <= M3_MAX_LEN)
-                *op++ = (M3_MARKER | (m_len - 2));
-            else {
-                m_len -= M3_MAX_LEN;
-                *op++ = M3_MARKER | 0;
-                while (unlikely(m_len > 255)) {
-                    m_len -= 255;
-                    *op++ = 0;
-                }
-                *op++ = (m_len);
-            }
-            *op++ = (m_off << 2);
-            *op++ = (m_off >> 6);
-        } else {
-            m_off -= 0x4000;
-            if (m_len <= M4_MAX_LEN)
-                *op++ = (M4_MARKER | ((m_off >> 11) & 8)
-                             | (m_len - 2));
-            else {
-                m_len -= M4_MAX_LEN;
-                *op++ = (M4_MARKER | ((m_off >> 11) & 8));
-                while (unlikely(m_len > 255)) {
-                    m_len -= 255;
-                    *op++ = 0;
-                }
-                *op++ = (m_len);
-            }
-            *op++ = (m_off << 2);
-            *op++ = (m_off >> 6);
-        }
-        goto next;
-    }
-    *out_len = op - out;
-    return in_end - (ii - ti);
-}
-
-int lzo1x_1_compress(const unsigned char *in, size_t in_len,
-                     unsigned char *out, size_t *out_len,
-                     void *wrkmem)
-{
-    const unsigned char *ip = in;
-    unsigned char *op = out;
-    size_t l = in_len;
-    size_t t = 0;
-
-    while (l > 20) {
-        size_t ll = l <= (M4_MAX_OFFSET + 1) ? l : (M4_MAX_OFFSET + 1);
-        uintptr_t ll_end = (uintptr_t) ip + ll;
-        if ((ll_end + ((t + ll) >> 5)) <= ll_end)
-            break;
-        BUILD_BUG_ON(D_SIZE * sizeof(lzo_dict_t) > LZO1X_1_MEM_COMPRESS);
-        memset(wrkmem, 0, D_SIZE * sizeof(lzo_dict_t));
-        t = lzo1x_1_do_compress(ip, ll, op, out_len, t, wrkmem);
-        ip += ll;
-        op += *out_len;
-        l  -= ll;
-    }
-    t += l;
-
-    if (t > 0) {
-        const unsigned char *ii = in + in_len - t;
-
-        if (op == out && t <= 238) {
-            *op++ = (17 + t);
-        } else if (t <= 3) {
-            op[-2] |= t;
-        } else if (t <= 18) {
-            *op++ = (t - 3);
-        } else {
-            size_t tt = t - 18;
-            *op++ = 0;
-            while (tt > 255) {
-                tt -= 255;
-                *op++ = 0;
-            }
-            *op++ = tt;
-        }
-        if (t >= 16) do {
-            COPY8(op, ii);
-            COPY8(op + 8, ii + 8);
-            op += 16;
-            ii += 16;
-            t -= 16;
-        } while (t >= 16);
-        if (t > 0) do {
-            *op++ = *ii++;
-        } while (--t > 0);
-    }
-
-    *op++ = M4_MARKER | 1;
-    *op++ = 0;
-    *op++ = 0;
-
-    *out_len = op - out;
-    return LZO_E_OK;
-}
-
-# define INIT
-#else /* CONFIG_TMEM */
-# include "decompress.h"
-#endif /* CONFIG_TMEM */
+#include "decompress.h"
 
 /*
  *  LZO1X Decompressor from LZO
diff --git a/xen/include/public/tmem.h b/xen/include/public/tmem.h
index c02be9f704..d9b1c266f6 100644
--- a/xen/include/public/tmem.h
+++ b/xen/include/public/tmem.h
@@ -29,7 +29,7 @@
 
 #include "xen.h"
 
-#if __XEN_INTERFACE_VERSION__ < 0x00041200
+#if __XEN_INTERFACE_VERSION__ < 0x00041300
 
 /* version of ABI */
 #define TMEM_SPEC_VERSION          1
-- 
2.20.1


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.