ef002e
From ee2efd8e1b4cae38cb8264ce1b8e110d937e8061 Mon Sep 17 00:00:00 2001
ef002e
From: Chad Dupuis <chad.dupuis@qlogic.com>
ef002e
Date: Thu, 13 Mar 2014 14:16:40 -0400
ef002e
Subject: [PATCH] [SCSI] qla2xxx: Fix build errors related to invalid print
ef002e
 fields on some architectures.
ef002e
ef002e
Fixes some build warnings such as:
ef002e
drivers/scsi/qla2xxx/qla_attr.c:162:6: warning: format '%lx' expects argument of
ef002e
type 'long unsigned int', but argument 6 has type 'size_t'"
ef002e
and
ef002e
drivers/scsi/qla2xxx/qla_init.c:5198:7: warning: format '%lx' expects argument
ef002e
of type 'long unsigned int', but argument 5 has type 'uint32_t' [-Wformat]
ef002e
ef002e
Signed-off-by: Chad Dupuis <chad.dupuis@qlogic.com>
ef002e
Signed-off-by: Saurav Kashyap <saurav.kashyap@qlogic.com>
ef002e
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
ef002e
---
ef002e
 drivers/scsi/qla2xxx/qla_attr.c |  6 +++---
ef002e
 drivers/scsi/qla2xxx/qla_init.c | 12 ++++++------
ef002e
 2 files changed, 9 insertions(+), 9 deletions(-)
ef002e
ef002e
diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c
ef002e
index deca736..ecadd80 100644
ef002e
--- a/drivers/scsi/qla2xxx/qla_attr.c
ef002e
+++ b/drivers/scsi/qla2xxx/qla_attr.c
ef002e
@@ -159,7 +159,7 @@ qla2x00_sysfs_read_fw_dump_template(struct file *filp, struct kobject *kobj,
ef002e
 		return 0;
ef002e
 
ef002e
 	ql_dbg(ql_dbg_user, vha, 0x70e2,
ef002e
-	    "chunk <- off=%llx count=%lx\n", off, count);
ef002e
+	    "chunk <- off=%llx count=%zx\n", off, count);
ef002e
 	return memory_read_from_buffer(buf, count, &off,
ef002e
 	    ha->fw_dump_template, ha->fw_dump_template_len);
ef002e
 }
ef002e
@@ -200,11 +200,11 @@ qla2x00_sysfs_write_fw_dump_template(struct file *filp, struct kobject *kobj,
ef002e
 	if (off + count > ha->fw_dump_template_len) {
ef002e
 		count = ha->fw_dump_template_len - off;
ef002e
 		ql_dbg(ql_dbg_user, vha, 0x70d3,
ef002e
-		    "chunk -> truncating to %lx bytes.\n", count);
ef002e
+		    "chunk -> truncating to %zx bytes.\n", count);
ef002e
 	}
ef002e
 
ef002e
 	ql_dbg(ql_dbg_user, vha, 0x70d4,
ef002e
-	    "chunk -> off=%llx count=%lx\n", off, count);
ef002e
+	    "chunk -> off=%llx count=%zx\n", off, count);
ef002e
 	memcpy(ha->fw_dump_template + off, buf, count);
ef002e
 
ef002e
 	if (off + count == ha->fw_dump_template_len) {
ef002e
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c
ef002e
index 8e36bb5..e6cc187 100644
ef002e
--- a/drivers/scsi/qla2xxx/qla_init.c
ef002e
+++ b/drivers/scsi/qla2xxx/qla_init.c
ef002e
@@ -5343,8 +5343,8 @@ qla24xx_load_risc_flash(scsi_qla_host_t *vha, uint32_t *srisc_addr,
ef002e
 	    "-> template size %x bytes\n", dlen);
ef002e
 	if (dlen > risc_size * sizeof(*dcode)) {
ef002e
 		ql_log(ql_log_warn, vha, 0x0167,
ef002e
-		    "Failed fwdump template exceeds array by %lx bytes\n",
ef002e
-		    dlen - risc_size * sizeof(*dcode));
ef002e
+		    "Failed fwdump template exceeds array by %x bytes\n",
ef002e
+		    (uint32_t)(dlen - risc_size * sizeof(*dcode)));
ef002e
 		goto default_template;
ef002e
 	}
ef002e
 	ha->fw_dump_template_len = dlen;
ef002e
@@ -5610,8 +5610,8 @@ qla24xx_load_risc_blob(scsi_qla_host_t *vha, uint32_t *srisc_addr)
ef002e
 	ha->fw_dump_template_len = 0;
ef002e
 
ef002e
 	ql_dbg(ql_dbg_init, vha, 0x171,
ef002e
-	    "Loading fwdump template from %lx\n",
ef002e
-	    (void *)fwcode - (void *)blob->fw->data);
ef002e
+	    "Loading fwdump template from %x\n",
ef002e
+	    (uint32_t)((void *)fwcode - (void *)blob->fw->data));
ef002e
 	risc_size = be32_to_cpu(fwcode[2]);
ef002e
 	ql_dbg(ql_dbg_init, vha, 0x172,
ef002e
 	    "-> array size %x dwords\n", risc_size);
ef002e
@@ -5645,8 +5645,8 @@ qla24xx_load_risc_blob(scsi_qla_host_t *vha, uint32_t *srisc_addr)
ef002e
 	    "-> template size %x bytes\n", dlen);
ef002e
 	if (dlen > risc_size * sizeof(*fwcode)) {
ef002e
 		ql_log(ql_log_warn, vha, 0x0177,
ef002e
-		    "Failed fwdump template exceeds array by %lx bytes\n",
ef002e
-		    dlen - risc_size * sizeof(*fwcode));
ef002e
+		    "Failed fwdump template exceeds array by %x bytes\n",
ef002e
+		    (uint32_t)(dlen - risc_size * sizeof(*fwcode)));
ef002e
 		goto default_template;
ef002e
 	}
ef002e
 	ha->fw_dump_template_len = dlen;
ef002e
-- 
ef002e
1.8.3.1
ef002e
ef002e
From 7a21a71e1c702b523676267fa09048f21918636f Mon Sep 17 00:00:00 2001
ef002e
From: Paul Bolle <pebolle@tiscali.nl>
ef002e
Date: Mon, 30 Jun 2014 16:32:29 +0200
ef002e
Subject: [PATCH] x86: Remove unused variable "polling"
ef002e
ef002e
Compile tested. "polling" is unused since commit f80c5b39b80a
ef002e
("sched/idle, x86: Switch from TS_POLLING to TIF_POLLING_NRFLAG").
ef002e
ef002e
Signed-off-by: Paul Bolle <pebolle@tiscali.nl>
ef002e
Signed-off-by: Peter Zijlstra <peterz@infradead.org>
ef002e
Cc: Jiri Kosina <jkosina@suse.cz>
ef002e
Link: http://lkml.kernel.org/r/1404138749.2978.6.camel@x41
ef002e
Signed-off-by: Ingo Molnar <mingo@kernel.org>
ef002e
---
ef002e
 arch/x86/kernel/apm_32.c | 1 -
ef002e
 1 file changed, 1 deletion(-)
ef002e
ef002e
diff --git a/arch/x86/kernel/apm_32.c b/arch/x86/kernel/apm_32.c
ef002e
index 8fdcec6..66d3b1f 100644
ef002e
--- a/arch/x86/kernel/apm_32.c
ef002e
+++ b/arch/x86/kernel/apm_32.c
ef002e
@@ -841,7 +841,6 @@ static int apm_do_idle(void)
ef002e
 	u32 eax;
ef002e
 	u8 ret = 0;
ef002e
 	int idled = 0;
ef002e
-	int polling;
ef002e
 	int err = 0;
ef002e
 
ef002e
 	if (!need_resched()) {
ef002e
-- 
ef002e
1.8.3.1
ef002e
ef002e
From f9cfccee5ef4d923e21394c852b7f75d9c5c4a61 Mon Sep 17 00:00:00 2001
ef002e
From: John Stultz <john.stultz@linaro.org>
ef002e
Date: Wed, 16 Jul 2014 21:03:56 +0000
ef002e
Subject: [PATCH] ktime: Change ktime_set() to take 64bit seconds value
ef002e
ef002e
In order to support dates past 2038 on 32bit systems, ktime_set()
ef002e
needs to handle 64bit second values.
ef002e
ef002e
[ tglx: Removed the BITS_PER_LONG check ]
ef002e
ef002e
Signed-off-by: John Stultz <john.stultz@linaro.org>
ef002e
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
ef002e
Signed-off-by: John Stultz <john.stultz@linaro.org>
ef002e
---
ef002e
 include/linux/ktime.h | 7 +++----
ef002e
 1 file changed, 3 insertions(+), 4 deletions(-)
ef002e
ef002e
diff --git a/include/linux/ktime.h b/include/linux/ktime.h
ef002e
index 320f5da..5fa1494 100644
ef002e
--- a/include/linux/ktime.h
ef002e
+++ b/include/linux/ktime.h
ef002e
@@ -71,13 +71,12 @@ typedef union ktime ktime_t;		/* Kill this */
ef002e
  *
ef002e
  * Return the ktime_t representation of the value
ef002e
  */
ef002e
-static inline ktime_t ktime_set(const long secs, const unsigned long nsecs)
ef002e
+static inline ktime_t ktime_set(const s64 secs, const unsigned long nsecs)
ef002e
 {
ef002e
-#if (BITS_PER_LONG == 64)
ef002e
 	if (unlikely(secs >= KTIME_SEC_MAX))
ef002e
 		return (ktime_t){ .tv64 = KTIME_MAX };
ef002e
-#endif
ef002e
-	return (ktime_t) { .tv64 = (s64)secs * NSEC_PER_SEC + (s64)nsecs };
ef002e
+
ef002e
+	return (ktime_t) { .tv64 = secs * NSEC_PER_SEC + (s64)nsecs };
ef002e
 }
ef002e
 
ef002e
 /* Subtract two ktime_t variables. rem = lhs -rhs: */
ef002e
-- 
ef002e
1.8.3.1
ef002e
ef002e
From af80f3a91846c33852e97c18fd986d0db774d7f1 Mon Sep 17 00:00:00 2001
ef002e
From: Richard Cochran <richardcochran@gmail.com>
ef002e
Date: Sun, 29 Mar 2015 23:11:56 +0200
ef002e
Subject: [PATCH] ptp: bnx2x: convert to the 64 bit get/set time methods.
ef002e
ef002e
This driver's clock is implemented using a timecounter, and so with
ef002e
this patch the driver is ready for the year 2038.
ef002e
ef002e
Compile tested only.
ef002e
ef002e
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
ef002e
Acked-by: Sony Chacko <sony.chacko@qlogic.com>
ef002e
Signed-off-by: David S. Miller <davem@davemloft.net>
ef002e
---
ef002e
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c | 4 ++--
ef002e
 1 file changed, 2 insertions(+), 2 deletions(-)
ef002e
ef002e
diff --git a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
ef002e
index dc20474..fb0ebc9 100644
ef002e
--- a/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
ef002e
+++ b/drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c
ef002e
@@ -13366,8 +13366,8 @@ static void bnx2x_register_phc(struct bnx2x *bp)
ef002e
 	bp->ptp_clock_info.pps = 0;
ef002e
 	bp->ptp_clock_info.adjfreq = bnx2x_ptp_adjfreq;
ef002e
 	bp->ptp_clock_info.adjtime = bnx2x_ptp_adjtime;
ef002e
-	bp->ptp_clock_info.gettime = bnx2x_ptp_gettime;
ef002e
-	bp->ptp_clock_info.settime = bnx2x_ptp_settime;
ef002e
+	bp->ptp_clock_info.gettime64 = bnx2x_ptp_gettime;
ef002e
+	bp->ptp_clock_info.settime64 = bnx2x_ptp_settime;
ef002e
 	bp->ptp_clock_info.enable = bnx2x_ptp_enable;
ef002e
 
ef002e
 	bp->ptp_clock = ptp_clock_register(&bp->ptp_clock_info, &bp->pdev->dev);
ef002e
-- 
ef002e
1.8.3.1
ef002e
ef002e
From 23e58ec4890fa12e6965fb79e4924a151c6072fd Mon Sep 17 00:00:00 2001
ef002e
From: Richard Cochran <richardcochran@gmail.com>
ef002e
Date: Sun, 29 Mar 2015 23:12:04 +0200
ef002e
Subject: [PATCH] ptp: ixgbe: convert to the 64 bit get/set time methods.
ef002e
ef002e
This driver's clock is implemented using a timecounter, and so with
ef002e
this patch the driver is ready for the year 2038.
ef002e
ef002e
Compile tested only.
ef002e
ef002e
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
ef002e
Acked-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
ef002e
Signed-off-by: David S. Miller <davem@davemloft.net>
ef002e
---
ef002e
 drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c | 8 ++++----
ef002e
 1 file changed, 4 insertions(+), 4 deletions(-)
ef002e
ef002e
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c
ef002e
index e70158c..e5ba040 100644
ef002e
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c
ef002e
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ptp.c
ef002e
@@ -871,8 +871,8 @@ static int ixgbe_ptp_create_clock(struct ixgbe_adapter *adapter)
ef002e
 		adapter->ptp_caps.pps = 1;
ef002e
 		adapter->ptp_caps.adjfreq = ixgbe_ptp_adjfreq;
ef002e
 		adapter->ptp_caps.adjtime = ixgbe_ptp_adjtime;
ef002e
-		adapter->ptp_caps.gettime = ixgbe_ptp_gettime;
ef002e
-		adapter->ptp_caps.settime = ixgbe_ptp_settime;
ef002e
+		adapter->ptp_caps.gettime64 = ixgbe_ptp_gettime;
ef002e
+		adapter->ptp_caps.settime64 = ixgbe_ptp_settime;
ef002e
 		adapter->ptp_caps.enable = ixgbe_ptp_feature_enable;
ef002e
 		break;
ef002e
 	case ixgbe_mac_82599EB:
ef002e
@@ -887,8 +887,8 @@ static int ixgbe_ptp_create_clock(struct ixgbe_adapter *adapter)
ef002e
 		adapter->ptp_caps.pps = 0;
ef002e
 		adapter->ptp_caps.adjfreq = ixgbe_ptp_adjfreq;
ef002e
 		adapter->ptp_caps.adjtime = ixgbe_ptp_adjtime;
ef002e
-		adapter->ptp_caps.gettime = ixgbe_ptp_gettime;
ef002e
-		adapter->ptp_caps.settime = ixgbe_ptp_settime;
ef002e
+		adapter->ptp_caps.gettime64 = ixgbe_ptp_gettime;
ef002e
+		adapter->ptp_caps.settime64 = ixgbe_ptp_settime;
ef002e
 		adapter->ptp_caps.enable = ixgbe_ptp_feature_enable;
ef002e
 		break;
ef002e
 	default:
ef002e
-- 
ef002e
1.8.3.1
ef002e
ef002e
From 51c2e67006049959ad5f983caf0e00ccef973b55 Mon Sep 17 00:00:00 2001
ef002e
From: Florian Westphal <fw@strlen.de>
ef002e
Date: Wed, 17 Jun 2015 23:58:28 +0200
ef002e
Subject: [PATCH] netfilter: xtables: fix warnings on 32bit platforms
ef002e
ef002e
On 32bit archs gcc complains due to cast from void* to u64.
ef002e
Add intermediate casts to long to silence these warnings.
ef002e
ef002e
include/linux/netfilter/x_tables.h:376:10: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
ef002e
include/linux/netfilter/x_tables.h:384:15: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
ef002e
include/linux/netfilter/x_tables.h:391:23: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
ef002e
include/linux/netfilter/x_tables.h:400:22: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
ef002e
ef002e
Fixes: 71ae0dff02d756e ("netfilter: xtables: use percpu rule counters")
ef002e
Reported-by: kbuild test robot <fengguang.wu@intel.com>
ef002e
Signed-off-by: Florian Westphal <fw@strlen.de>
ef002e
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
ef002e
---
ef002e
 include/linux/netfilter/x_tables.h | 8 ++++----
ef002e
 1 file changed, 4 insertions(+), 4 deletions(-)
ef002e
ef002e
diff --git a/include/linux/netfilter/x_tables.h b/include/linux/netfilter/x_tables.h
ef002e
index 88a9b35..1b6a065 100644
ef002e
--- a/include/linux/netfilter/x_tables.h
ef002e
+++ b/include/linux/netfilter/x_tables.h
ef002e
@@ -377,7 +377,7 @@ static inline u64 xt_percpu_counter_alloc(void)
ef002e
 		if (res == NULL)
ef002e
 			return (u64) -ENOMEM;
ef002e
 
ef002e
-		return (__force u64) res;
ef002e
+		return (u64) (__force unsigned long) res;
ef002e
 	}
ef002e
 
ef002e
 	return 0;
ef002e
@@ -385,14 +385,14 @@ static inline u64 xt_percpu_counter_alloc(void)
ef002e
 static inline void xt_percpu_counter_free(u64 pcnt)
ef002e
 {
ef002e
 	if (nr_cpu_ids > 1)
ef002e
-		free_percpu((void __percpu *) pcnt);
ef002e
+		free_percpu((void __percpu *) (unsigned long) pcnt);
ef002e
 }
ef002e
 
ef002e
 static inline struct xt_counters *
ef002e
 xt_get_this_cpu_counter(struct xt_counters *cnt)
ef002e
 {
ef002e
 	if (nr_cpu_ids > 1)
ef002e
-		return this_cpu_ptr((void __percpu *) cnt->pcnt);
ef002e
+		return this_cpu_ptr((void __percpu *) (unsigned long) cnt->pcnt);
ef002e
 
ef002e
 	return cnt;
ef002e
 }
ef002e
@@ -401,7 +401,7 @@ static inline struct xt_counters *
ef002e
 xt_get_per_cpu_counter(struct xt_counters *cnt, unsigned int cpu)
ef002e
 {
ef002e
 	if (nr_cpu_ids > 1)
ef002e
-		return per_cpu_ptr((void __percpu *) cnt->pcnt, cpu);
ef002e
+		return per_cpu_ptr((void __percpu *) (unsigned long) cnt->pcnt, cpu);
ef002e
 
ef002e
 	return cnt;
ef002e
 }
ef002e
-- 
ef002e
1.8.3.1
ef002e
ef002e
From 1c0e600bbb7566eba7f3e29d3797de32d211330e Mon Sep 17 00:00:00 2001
ef002e
From: Arnd Bergmann <arnd@arndb.de>
ef002e
Date: Wed, 7 Oct 2015 14:10:04 +0200
ef002e
Subject: [PATCH] RDMA/cxgb4: re-fix 32-bit build warning
ef002e
ef002e
Casting a pointer to __be64 produces a warning on 32-bit architectures:
ef002e
ef002e
drivers/infiniband/hw/cxgb4/mem.c:147:20: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
ef002e
    req->wr.wr_lo = (__force __be64)&wr_wait;
ef002e
ef002e
This was fixed at least twice for this driver in different places,
ef002e
and accidentally reverted once more. This puts the correct version
ef002e
back in place.
ef002e
ef002e
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
ef002e
Fixes: 6198dd8d7a6a7 ("iw_cxgb4: 32b platform fixes")
ef002e
Signed-off-by: Doug Ledford <dledford@redhat.com>
ef002e
---
ef002e
 drivers/infiniband/hw/cxgb4/mem.c | 2 +-
ef002e
 1 file changed, 1 insertion(+), 1 deletion(-)
ef002e
ef002e
diff --git a/drivers/infiniband/hw/cxgb4/mem.c b/drivers/infiniband/hw/cxgb4/mem.c
ef002e
index 30f0720..65b2474 100644
ef002e
--- a/drivers/infiniband/hw/cxgb4/mem.c
ef002e
+++ b/drivers/infiniband/hw/cxgb4/mem.c
ef002e
@@ -137,7 +137,7 @@ static int _c4iw_write_mem_inline(struct c4iw_rdev *rdev, u32 addr, u32 len,
ef002e
 		if (i == (num_wqe-1)) {
ef002e
 			req->wr.wr_hi = cpu_to_be32(FW_WR_OP_V(FW_ULPTX_WR) |
ef002e
 						    FW_WR_COMPL_F);
ef002e
-			req->wr.wr_lo = (__force __be64)&wr_wait;
ef002e
+			req->wr.wr_lo = (__force __be64)(unsigned long)&wr_wait;
ef002e
 		} else
ef002e
 			req->wr.wr_hi = cpu_to_be32(FW_WR_OP_V(FW_ULPTX_WR));
ef002e
 		req->wr.wr_mid = cpu_to_be32(
ef002e
-- 
ef002e
1.8.3.1
ef002e
ef002e
From 11eee7bee939b945f9daca56c2347c1d8d680a95 Mon Sep 17 00:00:00 2001
ef002e
From: Arnd Bergmann <arnd@arndb.de>
ef002e
Date: Wed, 7 Oct 2015 14:29:51 +0200
ef002e
Subject: [PATCH] IB/core: avoid 32-bit warning
ef002e
ef002e
The INIT_UDATA() macro requires a pointer or unsigned long argument for
ef002e
both input and output buffer, and all callers had a cast from when
ef002e
the code was merged until a recent restructuring, so now we get
ef002e
ef002e
core/uverbs_cmd.c: In function 'ib_uverbs_create_cq':
ef002e
core/uverbs_cmd.c:1481:66: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
ef002e
ef002e
This makes the code behave as before by adding back the cast to
ef002e
unsigned long.
ef002e
ef002e
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
ef002e
Fixes: 565197dd8fb1 ("IB/core: Extend ib_uverbs_create_cq")
ef002e
Reviewed-by: Yann Droneaud <ydroneaud@opteya.com>
ef002e
Signed-off-by: Doug Ledford <dledford@redhat.com>
ef002e
---
ef002e
 drivers/infiniband/core/uverbs_cmd.c | 2 +-
ef002e
 1 file changed, 1 insertion(+), 1 deletion(-)
ef002e
ef002e
diff --git a/drivers/infiniband/core/uverbs_cmd.c b/drivers/infiniband/core/uverbs_cmd.c
ef002e
index bbb02ff..30f3011 100644
ef002e
--- a/drivers/infiniband/core/uverbs_cmd.c
ef002e
+++ b/drivers/infiniband/core/uverbs_cmd.c
ef002e
@@ -1463,7 +1463,7 @@ ssize_t ib_uverbs_create_cq(struct ib_uverbs_file *file,
ef002e
 	if (copy_from_user(&cmd, buf, sizeof(cmd)))
ef002e
 		return -EFAULT;
ef002e
 
ef002e
-	INIT_UDATA(&ucore, buf, cmd.response, sizeof(cmd), sizeof(resp));
ef002e
+	INIT_UDATA(&ucore, buf, (unsigned long)cmd.response, sizeof(cmd), sizeof(resp));
ef002e
 
ef002e
 	INIT_UDATA(&uhw, buf + sizeof(cmd),
ef002e
 		   (unsigned long)cmd.response + sizeof(resp),
ef002e
-- 
ef002e
1.8.3.1