get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/52497/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 52497,
    "url": "http://patches.dpdk.org/api/patches/52497/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20190409190630.31975-3-vivkong@ca.ibm.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20190409190630.31975-3-vivkong@ca.ibm.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20190409190630.31975-3-vivkong@ca.ibm.com",
    "date": "2019-04-09T19:06:20",
    "name": "[RFC,02/12] eal: add support for s390x architecture",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "2b100fc6b1f61719e296ba80f4d99c6d05a8164a",
    "submitter": {
        "id": 1273,
        "url": "http://patches.dpdk.org/api/people/1273/?format=api",
        "name": "Vivian Kong",
        "email": "vivkong@gmail.com"
    },
    "delegate": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20190409190630.31975-3-vivkong@ca.ibm.com/mbox/",
    "series": [
        {
            "id": 4211,
            "url": "http://patches.dpdk.org/api/series/4211/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=4211",
            "date": "2019-04-09T19:06:18",
            "name": "introduce s390x architecture",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/4211/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/52497/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/52497/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 4B9B55688;\n\tTue,  9 Apr 2019 21:06:42 +0200 (CEST)",
            "from mail-qt1-f196.google.com (mail-qt1-f196.google.com\n\t[209.85.160.196]) by dpdk.org (Postfix) with ESMTP id C85EC5398\n\tfor <dev@dpdk.org>; Tue,  9 Apr 2019 21:06:36 +0200 (CEST)",
            "by mail-qt1-f196.google.com with SMTP id w5so21128599qtb.11\n\tfor <dev@dpdk.org>; Tue, 09 Apr 2019 12:06:36 -0700 (PDT)",
            "from csz25116.canlab.ibm.com ([199.246.40.57])\n\tby smtp.gmail.com with ESMTPSA id\n\tq23sm17934789qkc.16.2019.04.09.12.06.33 for <dev@dpdk.org>\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tTue, 09 Apr 2019 12:06:33 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;\n\th=from:to:subject:date:message-id:in-reply-to:references:reply-to;\n\tbh=6RRGwwVTBPCCenQtul9wGFvFLAD4/o+g6qH6+4VrFlM=;\n\tb=YZzPGeqe/nhz1TorawDzUx9hzmBXAuZEy22Z8N7FEZmyrDD/sxi3R7j1inb6Ukdhow\n\tBjMywiZCUuHZdB2wvF8AoXbKEDqm1W0sTjKbKEQqUN3rAypkJjWh6A3PfPQM9lNGIEcA\n\tUljNhHG7UnHrp6i/jCogFyKS/uH4+Xsun3+XJ39yb38t6ddWEPQ5Jofzzz+pePOWeXlw\n\tYwjz0XDNVhQSHm0PnQFjc5smRy+UsmEoHL4l9d1pOUYCV746svz3TEpo+2ArTAOXNXh5\n\tUyJziL7P1ES2xMj+EGUU9BqhcxyfpjEoCQvHfHX+h4UC4CfGMaGLdd1+DPTczZh0nit9\n\tENQg==",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:from:to:subject:date:message-id:in-reply-to\n\t:references:reply-to;\n\tbh=6RRGwwVTBPCCenQtul9wGFvFLAD4/o+g6qH6+4VrFlM=;\n\tb=ZtP7A/iQSIJ+/kB7USHxH9QCNtKIMUnooIBC+TATgZuqwyD8em9JLgJE8T5mBmqN0w\n\tBdsK05llSayQYkZQK5N2wQVu0YIlyqfnH2B4fgXz59UG7bun3oAFNj6Ite0Dzi8ycrWp\n\tfq0Oq33VV2MFaOyfx4gvHTRHwPe0r5zmdAysI7DuykcRYfhmKdWY/lcAP9Q9aFMvAOZW\n\tuKkkrr5IjUUkyJcaXCtAQeILwc2XoShLsXtZmcTpdTURFBvCaarpWd4ABh2BDaVx/oTl\n\tU5lQoqmjOS2hBniUO+cNvJDIh45nTFWMOsvBetNPDvDmjipu+BB1aztCH+EBrdZeczTO\n\tu1dg==",
        "X-Gm-Message-State": "APjAAAUDtgqLyouda5YZd9XhD916TVYRntIwMcvcxs+SeH7WNzQsKEB/\n\tR1q7noMZIXEaHixBfZTHZiIv4x/+JjU=",
        "X-Google-Smtp-Source": "APXvYqwpPFcjEV4iHB3ghFDCWBP/42fx5z3gnaVIMg92bOX3E57Ue5n+ppioz8rK9Rf3PPzYHIzvyw==",
        "X-Received": "by 2002:ac8:3328:: with SMTP id\n\tt37mr31605281qta.246.1554836795196; \n\tTue, 09 Apr 2019 12:06:35 -0700 (PDT)",
        "From": "Vivian Kong <vivkong@gmail.com>",
        "X-Google-Original-From": "Vivian Kong <vivkong@ca.ibm.com>",
        "To": "dev@dpdk.org",
        "Date": "Tue,  9 Apr 2019 15:06:20 -0400",
        "Message-Id": "<20190409190630.31975-3-vivkong@ca.ibm.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": "<20190409190630.31975-1-vivkong@ca.ibm.com>",
        "References": "<20190409190630.31975-1-vivkong@ca.ibm.com>",
        "Subject": "[dpdk-dev] [RFC 02/12] eal: add support for s390x architecture",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "Reply-To": "vivkong@ca.ibm.com",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Implement DPDK EAL for s390x architecture.\n\nSigned-off-by: Vivian Kong <vivkong@ca.ibm.com>\n---\n .../common/arch/s390x/rte_cpuflags.c          | 90 +++++++++++++++++++\n lib/librte_eal/common/arch/s390x/rte_cycles.c | 11 +++\n .../common/arch/s390x/rte_hypervisor.c        | 11 +++\n .../common/include/arch/s390x/rte_atomic.h    | 47 ++++++++++\n .../common/include/arch/s390x/rte_byteorder.h | 43 +++++++++\n .../common/include/arch/s390x/rte_cpuflags.h  | 42 +++++++++\n .../common/include/arch/s390x/rte_cycles.h    | 44 +++++++++\n .../common/include/arch/s390x/rte_io.h        | 18 ++++\n .../common/include/arch/s390x/rte_memcpy.h    | 55 ++++++++++++\n .../common/include/arch/s390x/rte_pause.h     | 22 +++++\n .../common/include/arch/s390x/rte_prefetch.h  | 40 +++++++++\n .../common/include/arch/s390x/rte_rwlock.h    | 42 +++++++++\n .../common/include/arch/s390x/rte_spinlock.h  | 85 ++++++++++++++++++\n .../include/arch/s390x/rte_ticketlock.h       | 18 ++++\n .../common/include/arch/s390x/rte_vect.h      | 33 +++++++\n 15 files changed, 601 insertions(+)\n create mode 100644 lib/librte_eal/common/arch/s390x/rte_cpuflags.c\n create mode 100644 lib/librte_eal/common/arch/s390x/rte_cycles.c\n create mode 100644 lib/librte_eal/common/arch/s390x/rte_hypervisor.c\n create mode 100644 lib/librte_eal/common/include/arch/s390x/rte_atomic.h\n create mode 100644 lib/librte_eal/common/include/arch/s390x/rte_byteorder.h\n create mode 100644 lib/librte_eal/common/include/arch/s390x/rte_cpuflags.h\n create mode 100644 lib/librte_eal/common/include/arch/s390x/rte_cycles.h\n create mode 100644 lib/librte_eal/common/include/arch/s390x/rte_io.h\n create mode 100644 lib/librte_eal/common/include/arch/s390x/rte_memcpy.h\n create mode 100644 lib/librte_eal/common/include/arch/s390x/rte_pause.h\n create mode 100644 lib/librte_eal/common/include/arch/s390x/rte_prefetch.h\n create mode 100644 lib/librte_eal/common/include/arch/s390x/rte_rwlock.h\n create mode 100644 lib/librte_eal/common/include/arch/s390x/rte_spinlock.h\n create mode 100644 lib/librte_eal/common/include/arch/s390x/rte_ticketlock.h\n create mode 100644 lib/librte_eal/common/include/arch/s390x/rte_vect.h",
    "diff": "diff --git a/lib/librte_eal/common/arch/s390x/rte_cpuflags.c b/lib/librte_eal/common/arch/s390x/rte_cpuflags.c\nnew file mode 100644\nindex 000000000..1f8c6ef41\n--- /dev/null\n+++ b/lib/librte_eal/common/arch/s390x/rte_cpuflags.c\n@@ -0,0 +1,90 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * (c) Copyright IBM Corp. 2018, 2019\n+ */\n+\n+#include \"rte_cpuflags.h\"\n+\n+#include <elf.h>\n+#include <fcntl.h>\n+#include <assert.h>\n+#include <unistd.h>\n+\n+/* Symbolic values for the entries in the auxiliary table */\n+#define AT_HWCAP  16\n+#define AT_HWCAP2 26\n+\n+/* software based registers */\n+enum cpu_register_t {\n+\tREG_NONE = 0,\n+\tREG_HWCAP,\n+\tREG_HWCAP2,\n+\tREG_MAX\n+};\n+\n+typedef uint32_t hwcap_registers_t[REG_MAX];\n+\n+struct feature_entry {\n+\tuint32_t reg;\n+\tuint32_t bit;\n+#define CPU_FLAG_NAME_MAX_LEN 64\n+\tchar name[CPU_FLAG_NAME_MAX_LEN];\n+};\n+\n+#define FEAT_DEF(name, reg, bit) \\\n+\t[RTE_CPUFLAG_##name] = {reg, bit, #name},\n+\n+const struct feature_entry rte_cpu_feature_table[] = {\n+\tFEAT_DEF(ESAN3,                  REG_HWCAP,   0)\n+\tFEAT_DEF(ZARCH,                  REG_HWCAP,   1)\n+\tFEAT_DEF(STFLE,                  REG_HWCAP,   2)\n+\tFEAT_DEF(MSA,                    REG_HWCAP,   3)\n+\tFEAT_DEF(LDISP,                  REG_HWCAP,   4)\n+\tFEAT_DEF(EIMM,                   REG_HWCAP,   5)\n+\tFEAT_DEF(DFP,                    REG_HWCAP,   6)\n+\tFEAT_DEF(HPAGE,                  REG_HWCAP,   7)\n+\tFEAT_DEF(ETF3EH,                 REG_HWCAP,   8)\n+\tFEAT_DEF(HIGH_GPRS,              REG_HWCAP,   9)\n+\tFEAT_DEF(TE,                     REG_HWCAP,  10)\n+\tFEAT_DEF(VXRS,                   REG_HWCAP,  11)\n+\tFEAT_DEF(VXRS_BCD,               REG_HWCAP,  12)\n+\tFEAT_DEF(VXRS_EXT,               REG_HWCAP,  13)\n+\tFEAT_DEF(GS,                     REG_HWCAP,  14)\n+};\n+\n+/*\n+ * Read AUXV software register and get cpu features for Power\n+ */\n+static void\n+rte_cpu_get_features(hwcap_registers_t out)\n+{\n+\tout[REG_HWCAP] = rte_cpu_getauxval(AT_HWCAP);\n+\tout[REG_HWCAP2] = rte_cpu_getauxval(AT_HWCAP2);\n+}\n+\n+/*\n+ * Checks if a particular flag is available on current machine.\n+ */\n+int\n+rte_cpu_get_flag_enabled(enum rte_cpu_flag_t feature)\n+{\n+\tconst struct feature_entry *feat;\n+\thwcap_registers_t regs = {0};\n+\n+\tif (feature >= RTE_CPUFLAG_NUMFLAGS)\n+\t\treturn -ENOENT;\n+\n+\tfeat = &rte_cpu_feature_table[feature];\n+\tif (feat->reg == REG_NONE)\n+\t\treturn -EFAULT;\n+\n+\trte_cpu_get_features(regs);\n+\treturn (regs[feat->reg] >> feat->bit) & 1;\n+}\n+\n+const char *\n+rte_cpu_get_flag_name(enum rte_cpu_flag_t feature)\n+{\n+\tif (feature >= RTE_CPUFLAG_NUMFLAGS)\n+\t\treturn NULL;\n+\treturn rte_cpu_feature_table[feature].name;\n+}\ndiff --git a/lib/librte_eal/common/arch/s390x/rte_cycles.c b/lib/librte_eal/common/arch/s390x/rte_cycles.c\nnew file mode 100644\nindex 000000000..b29c4454a\n--- /dev/null\n+++ b/lib/librte_eal/common/arch/s390x/rte_cycles.c\n@@ -0,0 +1,11 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * (c) Copyright IBM Corp. 2018, 2019\n+ */\n+\n+#include \"eal_private.h\"\n+\n+uint64_t\n+get_tsc_freq_arch(void)\n+{\n+\treturn 0;\n+}\ndiff --git a/lib/librte_eal/common/arch/s390x/rte_hypervisor.c b/lib/librte_eal/common/arch/s390x/rte_hypervisor.c\nnew file mode 100644\nindex 000000000..22b0c5cc4\n--- /dev/null\n+++ b/lib/librte_eal/common/arch/s390x/rte_hypervisor.c\n@@ -0,0 +1,11 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * (c) Copyright IBM Corp. 2018, 2019\n+ */\n+\n+#include \"rte_hypervisor.h\"\n+\n+enum rte_hypervisor\n+rte_hypervisor_get(void)\n+{\n+\treturn RTE_HYPERVISOR_UNKNOWN;\n+}\ndiff --git a/lib/librte_eal/common/include/arch/s390x/rte_atomic.h b/lib/librte_eal/common/include/arch/s390x/rte_atomic.h\nnew file mode 100644\nindex 000000000..5fce6d5f0\n--- /dev/null\n+++ b/lib/librte_eal/common/include/arch/s390x/rte_atomic.h\n@@ -0,0 +1,47 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * (c) Copyright IBM Corp. 2018, 2019\n+ */\n+\n+#ifndef _RTE_ATOMIC_S390X_H_\n+#define _RTE_ATOMIC_S390X_H_\n+\n+#ifndef RTE_FORCE_INTRINSICS\n+#  error Platform must be built with CONFIG_RTE_FORCE_INTRINSICS\n+#endif\n+\n+#ifdef __cplusplus\n+extern \"C\" {\n+#endif\n+\n+#include \"generic/rte_atomic.h\"\n+\n+//#define dsb(opt) asm volatile(\"\" : : : \"memory\")\n+//#define dmb(opt) asm volatile(\"\" : : : \"memory\")\n+\n+#define rte_mb() rte_compiler_barrier() //asm volatile(\"\" : : : \"memory\")\n+\n+#define rte_wmb() rte_mb()\n+\n+#define rte_rmb() rte_mb()\n+\n+#define rte_smp_mb() rte_mb()\n+\n+#define rte_smp_wmb() rte_wmb()\n+\n+#define rte_smp_rmb() rte_rmb()\n+\n+#define rte_io_mb() rte_mb()\n+\n+#define rte_io_wmb() rte_wmb()\n+\n+#define rte_io_rmb() rte_rmb()\n+\n+#define rte_cio_wmb() rte_wmb()\n+\n+#define rte_cio_rmb() rte_rmb()\n+\n+#ifdef __cplusplus\n+}\n+#endif\n+\n+#endif /* _RTE_ATOMIC_S390X_H_ */\ndiff --git a/lib/librte_eal/common/include/arch/s390x/rte_byteorder.h b/lib/librte_eal/common/include/arch/s390x/rte_byteorder.h\nnew file mode 100644\nindex 000000000..de6e410b4\n--- /dev/null\n+++ b/lib/librte_eal/common/include/arch/s390x/rte_byteorder.h\n@@ -0,0 +1,43 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * (c) Copyright IBM Corp. 2018, 2019\n+ */\n+\n+/* Inspired from FreeBSD src/sys/powerpc/include/endian.h\n+ * Copyright (c) 1987, 1991, 1993\n+ * The Regents of the University of California.  All rights reserved.\n+ */\n+\n+#ifndef _RTE_BYTEORDER_S390X_H_\n+#define _RTE_BYTEORDER_S390X_H_\n+\n+#ifdef __cplusplus\n+extern \"C\" {\n+#endif\n+\n+#include <stdint.h>\n+#include \"generic/rte_byteorder.h\"\n+\n+/* s390x is big endian\n+ */\n+\n+#define rte_cpu_to_le_16(x) rte_bswap16(x)\n+#define rte_cpu_to_le_32(x) rte_bswap32(x)\n+#define rte_cpu_to_le_64(x) rte_bswap64(x)\n+\n+#define rte_cpu_to_be_16(x) (x)\n+#define rte_cpu_to_be_32(x) (x)\n+#define rte_cpu_to_be_64(x) (x)\n+\n+#define rte_le_to_cpu_16(x) rte_bswap16(x)\n+#define rte_le_to_cpu_32(x) rte_bswap32(x)\n+#define rte_le_to_cpu_64(x) rte_bswap64(x)\n+\n+#define rte_be_to_cpu_16(x) (x)\n+#define rte_be_to_cpu_32(x) (x)\n+#define rte_be_to_cpu_64(x) (x)\n+\n+#ifdef __cplusplus\n+}\n+#endif\n+\n+#endif /* _RTE_BYTEORDER_S390X_H_ */\ndiff --git a/lib/librte_eal/common/include/arch/s390x/rte_cpuflags.h b/lib/librte_eal/common/include/arch/s390x/rte_cpuflags.h\nnew file mode 100644\nindex 000000000..bfeff3f98\n--- /dev/null\n+++ b/lib/librte_eal/common/include/arch/s390x/rte_cpuflags.h\n@@ -0,0 +1,42 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * (c) Copyright IBM Corp. 2018, 2019\n+ */\n+\n+#ifndef _RTE_CPUFLAGS_S390X_H_\n+#define _RTE_CPUFLAGS_S390X_H_\n+\n+#ifdef __cplusplus\n+extern \"C\" {\n+#endif\n+\n+/**\n+ * Enumeration of all CPU features supported\n+ */\n+enum rte_cpu_flag_t {\n+\tRTE_CPUFLAG_ESAN3 = 0,\n+\tRTE_CPUFLAG_ZARCH,\n+\tRTE_CPUFLAG_STFLE,\n+\tRTE_CPUFLAG_MSA,\n+\tRTE_CPUFLAG_LDISP,\n+\tRTE_CPUFLAG_EIMM,\n+\tRTE_CPUFLAG_DFP,\n+\tRTE_CPUFLAG_HPAGE, //from elf.h\n+\t//RTE_CPUFLAG_EDAT, //from hwcap.h\n+\tRTE_CPUFLAG_ETF3EH,\n+\tRTE_CPUFLAG_HIGH_GPRS,\n+\tRTE_CPUFLAG_TE,\n+\tRTE_CPUFLAG_VXRS,\n+\tRTE_CPUFLAG_VXRS_BCD,\n+\tRTE_CPUFLAG_VXRS_EXT,\n+\tRTE_CPUFLAG_GS,\n+\t/* The last item */\n+\tRTE_CPUFLAG_NUMFLAGS,/**< This should always be the last! */\n+};\n+\n+#include \"generic/rte_cpuflags.h\"\n+\n+#ifdef __cplusplus\n+}\n+#endif\n+\n+#endif /* _RTE_CPUFLAGS_S390X_H_ */\ndiff --git a/lib/librte_eal/common/include/arch/s390x/rte_cycles.h b/lib/librte_eal/common/include/arch/s390x/rte_cycles.h\nnew file mode 100644\nindex 000000000..211bbe448\n--- /dev/null\n+++ b/lib/librte_eal/common/include/arch/s390x/rte_cycles.h\n@@ -0,0 +1,44 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * (c) Copyright IBM Corp. 2018, 2019\n+ */\n+\n+#ifndef _RTE_CYCLES_S390X_H_\n+#define _RTE_CYCLES_S390X_H_\n+\n+#ifdef __cplusplus\n+extern \"C\" {\n+#endif\n+\n+#include \"generic/rte_cycles.h\"\n+\n+#include <rte_common.h>\n+\n+/**\n+ * Read the time base register.\n+ *\n+ * @return\n+ *   The time base for this lcore.\n+ */\n+static inline uint64_t\n+rte_rdtsc(void)\n+{\n+\tuint64_t tsc;\n+\tasm volatile(\"stck %0\" : \"=Q\"(tsc) : : \"cc\");\n+\treturn tsc;\n+}\n+\n+static inline uint64_t\n+rte_rdtsc_precise(void)\n+{\n+\trte_mb();\n+\treturn rte_rdtsc();\n+}\n+\n+static inline uint64_t\n+rte_get_tsc_cycles(void) { return rte_rdtsc(); }\n+\n+#ifdef __cplusplus\n+}\n+#endif\n+\n+#endif /* _RTE_CYCLES_S390X_H_ */\ndiff --git a/lib/librte_eal/common/include/arch/s390x/rte_io.h b/lib/librte_eal/common/include/arch/s390x/rte_io.h\nnew file mode 100644\nindex 000000000..e6b718ef3\n--- /dev/null\n+++ b/lib/librte_eal/common/include/arch/s390x/rte_io.h\n@@ -0,0 +1,18 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * (c) Copyright IBM Corp. 2018, 2019\n+ */\n+\n+#ifndef _RTE_IO_S390X_H_\n+#define _RTE_IO_S390X_H_\n+\n+#ifdef __cplusplus\n+extern \"C\" {\n+#endif\n+\n+#include \"generic/rte_io.h\"\n+\n+#ifdef __cplusplus\n+}\n+#endif\n+\n+#endif /* _RTE_IO_S390X_H_ */\ndiff --git a/lib/librte_eal/common/include/arch/s390x/rte_memcpy.h b/lib/librte_eal/common/include/arch/s390x/rte_memcpy.h\nnew file mode 100644\nindex 000000000..1135b1af6\n--- /dev/null\n+++ b/lib/librte_eal/common/include/arch/s390x/rte_memcpy.h\n@@ -0,0 +1,55 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * (c) Copyright IBM Corp. 2018, 2019\n+ */\n+\n+#ifndef _RTE_MEMCPY_S390X_H_\n+#define _RTE_MEMCPY_S390X_H_\n+\n+#include <stdint.h>\n+#include <string.h>\n+\n+#ifdef __cplusplus\n+extern \"C\" {\n+#endif\n+\n+#include \"generic/rte_memcpy.h\"\n+\n+\n+static inline void\n+rte_mov16(uint8_t *dst, const uint8_t *src)\n+{\n+\tmemcpy(dst, src, 16);\n+}\n+static inline void\n+rte_mov32(uint8_t *dst, const uint8_t *src)\n+{\n+\tmemcpy(dst, src, 32);\n+}\n+static inline void\n+rte_mov48(uint8_t *dst, const uint8_t *src)\n+{\n+\tmemcpy(dst, src, 48);\n+}\n+static inline void\n+rte_mov64(uint8_t *dst, const uint8_t *src)\n+{\n+\tmemcpy(dst, src, 64);\n+}\n+static inline void\n+rte_mov128(uint8_t *dst, const uint8_t *src)\n+{\n+\tmemcpy(dst, src, 128);\n+}\n+static inline void\n+rte_mov256(uint8_t *dst, const uint8_t *src)\n+{\n+\tmemcpy(dst, src, 256);\n+}\n+#define rte_memcpy(d, s, n)\tmemcpy((d), (s), (n))\n+\n+\n+#ifdef __cplusplus\n+}\n+#endif\n+\n+#endif /* _RTE_MEMCPY_S390X_H_ */\ndiff --git a/lib/librte_eal/common/include/arch/s390x/rte_pause.h b/lib/librte_eal/common/include/arch/s390x/rte_pause.h\nnew file mode 100644\nindex 000000000..be90ce6a1\n--- /dev/null\n+++ b/lib/librte_eal/common/include/arch/s390x/rte_pause.h\n@@ -0,0 +1,22 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * (c) Copyright IBM Corp. 2018, 2019\n+ */\n+\n+#ifndef _RTE_PAUSE_S390X_H_\n+#define _RTE_PAUSE_S390X_H_\n+\n+#ifdef __cplusplus\n+extern \"C\" {\n+#endif\n+\n+#include \"generic/rte_pause.h\"\n+\n+static inline void rte_pause(void)\n+{\n+}\n+\n+#ifdef __cplusplus\n+}\n+#endif\n+\n+#endif /* _RTE_PAUSE_S390X_H_ */\ndiff --git a/lib/librte_eal/common/include/arch/s390x/rte_prefetch.h b/lib/librte_eal/common/include/arch/s390x/rte_prefetch.h\nnew file mode 100644\nindex 000000000..c76c6d898\n--- /dev/null\n+++ b/lib/librte_eal/common/include/arch/s390x/rte_prefetch.h\n@@ -0,0 +1,40 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * (c) Copyright IBM Corp. 2018, 2019\n+ */\n+\n+#ifndef _RTE_PREFETCH_S390X_H_\n+#define _RTE_PREFETCH_S390X_H_\n+\n+#ifdef __cplusplus\n+extern \"C\" {\n+#endif\n+\n+#include <rte_common.h>\n+#include \"generic/rte_prefetch.h\"\n+\n+static inline void rte_prefetch0(const volatile void *p)\n+{\n+\tasm volatile (\"pfd 1, 0(%[p])\" : : [p] \"r\" (p));\n+}\n+\n+static inline void rte_prefetch1(const volatile void *p)\n+{\n+\tasm volatile (\"pfd 1, 0(%[p])\" : : [p] \"r\" (p));\n+}\n+\n+static inline void rte_prefetch2(const volatile void *p)\n+{\n+\tasm volatile (\"pfd 1, 0(%[p])\" : : [p] \"r\" (p));\n+}\n+\n+static inline void rte_prefetch_non_temporal(const volatile void *p)\n+{\n+\t/* non-temporal version not available, fallback to rte_prefetch0 */\n+\trte_prefetch0(p);\n+}\n+\n+#ifdef __cplusplus\n+}\n+#endif\n+\n+#endif /* _RTE_PREFETCH_S390X_H_ */\ndiff --git a/lib/librte_eal/common/include/arch/s390x/rte_rwlock.h b/lib/librte_eal/common/include/arch/s390x/rte_rwlock.h\nnew file mode 100644\nindex 000000000..f649484f3\n--- /dev/null\n+++ b/lib/librte_eal/common/include/arch/s390x/rte_rwlock.h\n@@ -0,0 +1,42 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * (c) Copyright IBM Corp. 2018, 2019\n+ */\n+\n+#ifndef _RTE_RWLOCK_S390X_H_\n+#define _RTE_RWLOCK_S390X_H_\n+\n+#ifdef __cplusplus\n+extern \"C\" {\n+#endif\n+\n+#include \"generic/rte_rwlock.h\"\n+\n+static inline void\n+rte_rwlock_read_lock_tm(rte_rwlock_t *rwl)\n+{\n+\trte_rwlock_read_lock(rwl);\n+}\n+\n+static inline void\n+rte_rwlock_read_unlock_tm(rte_rwlock_t *rwl)\n+{\n+\trte_rwlock_read_unlock(rwl);\n+}\n+\n+static inline void\n+rte_rwlock_write_lock_tm(rte_rwlock_t *rwl)\n+{\n+\trte_rwlock_write_lock(rwl);\n+}\n+\n+static inline void\n+rte_rwlock_write_unlock_tm(rte_rwlock_t *rwl)\n+{\n+\trte_rwlock_write_unlock(rwl);\n+}\n+\n+#ifdef __cplusplus\n+}\n+#endif\n+\n+#endif /* _RTE_RWLOCK_S390X_H_ */\ndiff --git a/lib/librte_eal/common/include/arch/s390x/rte_spinlock.h b/lib/librte_eal/common/include/arch/s390x/rte_spinlock.h\nnew file mode 100644\nindex 000000000..0434864fb\n--- /dev/null\n+++ b/lib/librte_eal/common/include/arch/s390x/rte_spinlock.h\n@@ -0,0 +1,85 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * (c) Copyright IBM Corp. 2018, 2019\n+ */\n+\n+#ifndef _RTE_SPINLOCK_S390X_H_\n+#define _RTE_SPINLOCK_S390X_H_\n+\n+#ifdef __cplusplus\n+extern \"C\" {\n+#endif\n+\n+#include <rte_common.h>\n+#include \"generic/rte_spinlock.h\"\n+\n+#ifndef RTE_FORCE_INTRINSICS\n+\n+static inline void\n+rte_spinlock_lock(rte_spinlock_t *sl)\n+{\n+\twhile (__sync_lock_test_and_set(&sl->locked, 1))\n+\t\twhile (sl->locked)\n+\t\t\trte_pause();\n+}\n+\n+static inline void\n+rte_spinlock_unlock(rte_spinlock_t *sl)\n+{\n+\t__sync_lock_release(&sl->locked);\n+}\n+\n+static inline int\n+rte_spinlock_trylock(rte_spinlock_t *sl)\n+{\n+\treturn __sync_lock_test_and_set(&sl->locked, 1) == 0;\n+}\n+\n+#endif\n+\n+\n+static inline int rte_tm_supported(void)\n+{\n+\treturn 0;\n+}\n+\n+static inline void\n+rte_spinlock_lock_tm(rte_spinlock_t *sl)\n+{\n+\trte_spinlock_lock(sl); /* fall-back */\n+}\n+\n+static inline int\n+rte_spinlock_trylock_tm(rte_spinlock_t *sl)\n+{\n+\treturn rte_spinlock_trylock(sl);\n+}\n+\n+static inline void\n+rte_spinlock_unlock_tm(rte_spinlock_t *sl)\n+{\n+\trte_spinlock_unlock(sl);\n+}\n+\n+static inline void\n+rte_spinlock_recursive_lock_tm(rte_spinlock_recursive_t *slr)\n+{\n+\trte_spinlock_recursive_lock(slr); /* fall-back */\n+}\n+\n+static inline void\n+rte_spinlock_recursive_unlock_tm(rte_spinlock_recursive_t *slr)\n+{\n+\trte_spinlock_recursive_unlock(slr);\n+}\n+\n+static inline int\n+rte_spinlock_recursive_trylock_tm(rte_spinlock_recursive_t *slr)\n+{\n+\treturn rte_spinlock_recursive_trylock(slr);\n+}\n+\n+#ifdef __cplusplus\n+}\n+#endif\n+\n+#endif /* _RTE_SPINLOCK_S390X_H_ */\ndiff --git a/lib/librte_eal/common/include/arch/s390x/rte_ticketlock.h b/lib/librte_eal/common/include/arch/s390x/rte_ticketlock.h\nnew file mode 100644\nindex 000000000..0785363c9\n--- /dev/null\n+++ b/lib/librte_eal/common/include/arch/s390x/rte_ticketlock.h\n@@ -0,0 +1,18 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * (c) Copyright IBM Corp. 2019\n+ */\n+\n+#ifndef _RTE_TICKETLOCK_S390X_H_\n+#define _RTE_TICKETLOCK_S390X_H_\n+\n+#ifdef __cplusplus\n+extern \"C\" {\n+#endif\n+\n+#include \"generic/rte_ticketlock.h\"\n+\n+#ifdef __cplusplus\n+}\n+#endif\n+\n+#endif /* _RTE_TICKETLOCK_S390X_H_ */\ndiff --git a/lib/librte_eal/common/include/arch/s390x/rte_vect.h b/lib/librte_eal/common/include/arch/s390x/rte_vect.h\nnew file mode 100644\nindex 000000000..459744aa4\n--- /dev/null\n+++ b/lib/librte_eal/common/include/arch/s390x/rte_vect.h\n@@ -0,0 +1,33 @@\n+/* SPDX-License-Identifier: BSD-3-Clause\n+ * (c) Copyright IBM Corp. 2018, 2019\n+ */\n+\n+#ifndef _RTE_VECT_S390X_H_\n+#define _RTE_VECT_S390X_H_\n+\n+#include <vecintrin.h>\n+#include \"generic/rte_vect.h\"\n+\n+#ifdef __cplusplus\n+extern \"C\" {\n+#endif\n+\n+typedef int xmm_t __attribute__((vector_size(4*sizeof(int))));\n+\n+#define\tXMM_SIZE\t(sizeof(xmm_t))\n+#define\tXMM_MASK\t(XMM_SIZE - 1)\n+\n+typedef union rte_xmm {\n+\txmm_t    x;\n+\tuint8_t  u8[XMM_SIZE / sizeof(uint8_t)];\n+\tuint16_t u16[XMM_SIZE / sizeof(uint16_t)];\n+\tuint32_t u32[XMM_SIZE / sizeof(uint32_t)];\n+\tuint64_t u64[XMM_SIZE / sizeof(uint64_t)];\n+\tdouble   pd[XMM_SIZE / sizeof(double)];\n+} __attribute__((aligned(16))) rte_xmm_t;\n+\n+#ifdef __cplusplus\n+}\n+#endif\n+\n+#endif /* _RTE_VECT_S390X_H_ */\n",
    "prefixes": [
        "RFC",
        "02/12"
    ]
}