From patchwork Thu Apr 12 14:20:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 133287 Delivered-To: patch@linaro.org Received: by 10.46.84.29 with SMTP id i29csp1737222ljb; Thu, 12 Apr 2018 07:21:05 -0700 (PDT) X-Google-Smtp-Source: AIpwx495hJ8SgTLN+KKffW8CAgWlbePWRHwqCJeg+NrLqaG3fNRMAYtm85V/ZrCvdC6qRBLRJ2uA X-Received: by 2002:a17:902:7e46:: with SMTP id a6-v6mr1306231pln.61.1523542865581; Thu, 12 Apr 2018 07:21:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523542865; cv=none; d=google.com; s=arc-20160816; b=T4kcKdXIralfU6kUAQ/tAFWOBMiIoPV5qGa6E5bjpLgjGIgktE6xKtwWyhLYM7XEDH +iaVToIKmh2MS2e2Gt4UXxupjNsEdU5yhPqqoET9esM3BH2J5O26Aw/rpXWeX0Y6zyiP eRajOMhoRnVmitVD2eQHcdeu8B5LC43DXvGKVNg1rndEAjXdDneqmBKYgAn/98L+JEuP 8nAo/M8Wwbtzch/UhTBVT4erR8cxYay17nwuZe4/FZIN4OvmfRhpYX5DWs4z8SquEoI4 y6RtofheMNEKHdi9uLqClbdTVy9pFHqTOCdgeBjVc3MnIxk3m5SZrWHe+/yaJL94+Dmw U3wA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:arc-authentication-results; bh=Wg9nx2Y4STPDXVNbfVvjsEPGIiZUgNxg/aEdD3j8C7w=; b=ztqddPyt99N0IEQQqqH0pmZuNP08ZR9wKa9Ch/U8GrPWTozWX7CXrdXGUfCROClPVd iJqUIdvoW7s2I4KsexVnVkhC4N7Tjd/Q03eYvgh0Q2PoUCYBv8y+lYxOJMeq6paWD9ne Ydi8tyS0m8b6elWW/kHniOnf1fQVggnWjMSZu4nZpoYsoPr08k0qzofZQkNQGUq/zf2k ufluZH//94FmsXr5OrJm9MQoOYBiG9WU2t1oDW6YmF3IJ9ln3woHZXmZM5U6hgecDSdA 5nrgTRc9XVVF/buB8ICRNPKah3CtZwoRdmwzULUlbGGSNPV2ZWg8xkS3wueUtIT1/Pbk SZkg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p88si2731671pfk.134.2018.04.12.07.21.05; Thu, 12 Apr 2018 07:21:05 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753372AbeDLOVB (ORCPT + 29 others); Thu, 12 Apr 2018 10:21:01 -0400 Received: from mout.kundenserver.de ([217.72.192.73]:39007 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752953AbeDLOUg (ORCPT ); Thu, 12 Apr 2018 10:20:36 -0400 Received: from wuerfel.lan ([95.208.111.237]) by mrelayeu.kundenserver.de (mreue101 [212.227.15.145]) with ESMTPA (Nemesis) id 0M89c9-1eK2jr2zC5-00veZX; Thu, 12 Apr 2018 16:20:34 +0200 From: Arnd Bergmann To: y2038@lists.linaro.org, linux-kernel@vger.kernel.org Cc: Arnd Bergmann Subject: [PATCH v2 10/13] y2038: powerpc: extend sysvipc data structures Date: Thu, 12 Apr 2018 16:20:21 +0200 Message-Id: <20180412142024.853892-11-arnd@arndb.de> X-Mailer: git-send-email 2.9.0 In-Reply-To: <20180412142024.853892-1-arnd@arndb.de> References: <20180412142024.853892-1-arnd@arndb.de> X-Provags-ID: V03:K1:2A6WSm6inCQSe5+6zvDWkxr4L7h65/JDdeJmZ8ATjN8JM39sdYG 2AF/0kz/Ib9pEHl+Tu4zX0rnygmZ+/DQ2M95Sjn1+fxq0xOIFCkTrMxzuYuvc2GsNEMMMfw x22BbgbwpFMDeZgv5F4Su/IgpGkDeM7vUfwz4eMJSj6VZC22aMkUc5BxUgwPUSGCP9zCLUb +On/eGQmssH6Vrtldpt5A== X-UI-Out-Filterresults: notjunk:1; V01:K0:ok5KWf+OTcc=:d46NBjfqk0Cs0Z+iwFoXFC /UkJqEsn0CVGlKV3RuQsC5OQXB+CAvGpXCBWWMiUE/bvOEKyb4B4uqm1vgGPEGang75DJ/ICM Gb/UsLzVbl/OUbtMCe5JYT5jm6YeW9hYmumNo4eEpnFpZ1ShdL9jo2dVU290rNbmaqP5azXfj 6LhGekInD3ZTG1q3F02XkHGBBLXZrPH7H7b6FuMU3hy1hOFjFMnT1IrE5EPWJmuj778bj6Grr ppTuqjlMscjPGmiH+nJhB4AGj5mn19CZLpx2ug1EoiKJyZ2HTIczjjk50FQOPaDmOXxenKOl8 ICNeZxS3e9h4cFmKnCfQar5ACbeou1FVIRF/fwJxyBeFjXkYAK7sg4nn0hXM2riqyu49mREUJ U3xJR9e3Oabh7a3pfp7FTtPW4GvDDIN98k6B1Ut6MtLhqwV6Rg8DaSTEis3j/cdRDZAID45Q0 qmC+RwKiHd4tCFpoPH7tiSQmCLmnXt0Kosxta5A+dUXXN4eLWNnhO4veUrkOcr7GRNJkrMIYj egOZYKio5NDSv7Gyy12NnXvG92FjNFToBaCNtxjfSTl+ZsfMBDn0+eoV46elLLlTQli0UMDmy b/kjE1Sbzbs2pY6PqCN05zTHVbZIExKGvZ6Unfs9uv8S+sHCRHSOr5W2KYdQ9D16szin5SYrS YgiLDJAt8KLg1XKmB5eYvDrUrjf7FgVOWn+r9AOm1blLKAL0V5atP4BKHEYcMbsVgQPIrTKQK ZaRr5Gni7toqPhTMKMkmT4uTY2fR+9pExAwb8Q== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org powerpc, uses a nonstandard variation of the generic sysvipc data structures, intended to have the padding moved around so it can deal with big-endian 32-bit user space that has 64-bit time_t. powerpc has the same definition as parisc and sparc, but now also supports little-endian mode, which is now wrong because the padding is made for big-endian user space. This takes just take the same approach here that we have for the asm-generic headers and adds separate 32-bit fields for the upper halves of the timestamps, to let libc deal with the mess in user space. Signed-off-by: Arnd Bergmann --- arch/powerpc/include/asm/compat.h | 32 ++++++++++++++++---------------- arch/powerpc/include/uapi/asm/msgbuf.h | 18 +++++++++--------- arch/powerpc/include/uapi/asm/sembuf.h | 14 +++++++------- arch/powerpc/include/uapi/asm/shmbuf.h | 19 ++++++++----------- 4 files changed, 40 insertions(+), 43 deletions(-) -- 2.9.0 diff --git a/arch/powerpc/include/asm/compat.h b/arch/powerpc/include/asm/compat.h index b4773c81f7d5..85c8af2bb272 100644 --- a/arch/powerpc/include/asm/compat.h +++ b/arch/powerpc/include/asm/compat.h @@ -162,10 +162,10 @@ struct compat_ipc64_perm { struct compat_semid64_ds { struct compat_ipc64_perm sem_perm; - unsigned int __unused1; - compat_time_t sem_otime; - unsigned int __unused2; - compat_time_t sem_ctime; + unsigned int sem_otime_high; + unsigned int sem_otime; + unsigned int sem_ctime_high; + unsigned int sem_ctime; compat_ulong_t sem_nsems; compat_ulong_t __unused3; compat_ulong_t __unused4; @@ -173,12 +173,12 @@ struct compat_semid64_ds { struct compat_msqid64_ds { struct compat_ipc64_perm msg_perm; - unsigned int __unused1; - compat_time_t msg_stime; - unsigned int __unused2; - compat_time_t msg_rtime; - unsigned int __unused3; - compat_time_t msg_ctime; + unsigned int msg_stime_high; + unsigned int msg_stime; + unsigned int msg_rtime_high; + unsigned int msg_rtime; + unsigned int msg_ctime_high; + unsigned int msg_ctime; compat_ulong_t msg_cbytes; compat_ulong_t msg_qnum; compat_ulong_t msg_qbytes; @@ -190,12 +190,12 @@ struct compat_msqid64_ds { struct compat_shmid64_ds { struct compat_ipc64_perm shm_perm; - unsigned int __unused1; - compat_time_t shm_atime; - unsigned int __unused2; - compat_time_t shm_dtime; - unsigned int __unused3; - compat_time_t shm_ctime; + unsigned int shm_atime_high; + unsigned int shm_atime; + unsigned int shm_dtime_high; + unsigned int shm_dtime; + unsigned int shm_ctime_high; + unsigned int shm_ctime; unsigned int __unused4; compat_size_t shm_segsz; compat_pid_t shm_cpid; diff --git a/arch/powerpc/include/uapi/asm/msgbuf.h b/arch/powerpc/include/uapi/asm/msgbuf.h index 65beb0942500..2b1b37797a47 100644 --- a/arch/powerpc/include/uapi/asm/msgbuf.h +++ b/arch/powerpc/include/uapi/asm/msgbuf.h @@ -10,18 +10,18 @@ struct msqid64_ds { struct ipc64_perm msg_perm; -#ifndef __powerpc64__ - unsigned int __unused1; -#endif +#ifdef __powerpc64__ __kernel_time_t msg_stime; /* last msgsnd time */ -#ifndef __powerpc64__ - unsigned int __unused2; -#endif __kernel_time_t msg_rtime; /* last msgrcv time */ -#ifndef __powerpc64__ - unsigned int __unused3; -#endif __kernel_time_t msg_ctime; /* last change time */ +#else + unsigned long msg_stime_high; + unsigned long msg_stime; /* last msgsnd time */ + unsigned long msg_rtime_high; + unsigned long msg_rtime; /* last msgrcv time */ + unsigned long msg_ctime_high; + unsigned long msg_ctime; /* last change time */ +#endif unsigned long msg_cbytes; /* current number of bytes on queue */ unsigned long msg_qnum; /* number of messages in queue */ unsigned long msg_qbytes; /* max number of bytes on queue */ diff --git a/arch/powerpc/include/uapi/asm/sembuf.h b/arch/powerpc/include/uapi/asm/sembuf.h index 8f393d60f02d..3f60946f77e3 100644 --- a/arch/powerpc/include/uapi/asm/sembuf.h +++ b/arch/powerpc/include/uapi/asm/sembuf.h @@ -15,20 +15,20 @@ * between kernel and user space. * * Pad space is left for: - * - 64-bit time_t to solve y2038 problem - * - 2 miscellaneous 32-bit values + * - 2 miscellaneous 32/64-bit values */ struct semid64_ds { struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ #ifndef __powerpc64__ - unsigned long __unused1; -#endif + unsigned long sem_otime_high; + unsigned long sem_otime; /* last semop time */ + unsigned long sem_ctime_high; + unsigned long sem_ctime; /* last change time */ +#else __kernel_time_t sem_otime; /* last semop time */ -#ifndef __powerpc64__ - unsigned long __unused2; -#endif __kernel_time_t sem_ctime; /* last change time */ +#endif unsigned long sem_nsems; /* no. of semaphores in array */ unsigned long __unused3; unsigned long __unused4; diff --git a/arch/powerpc/include/uapi/asm/shmbuf.h b/arch/powerpc/include/uapi/asm/shmbuf.h index deb1c3e503d3..b591c4d7e4c5 100644 --- a/arch/powerpc/include/uapi/asm/shmbuf.h +++ b/arch/powerpc/include/uapi/asm/shmbuf.h @@ -16,25 +16,22 @@ * between kernel and user space. * * Pad space is left for: - * - 64-bit time_t to solve y2038 problem * - 2 miscellaneous 32-bit values */ struct shmid64_ds { struct ipc64_perm shm_perm; /* operation perms */ -#ifndef __powerpc64__ - unsigned long __unused1; -#endif +#ifdef __powerpc64__ __kernel_time_t shm_atime; /* last attach time */ -#ifndef __powerpc64__ - unsigned long __unused2; -#endif __kernel_time_t shm_dtime; /* last detach time */ -#ifndef __powerpc64__ - unsigned long __unused3; -#endif __kernel_time_t shm_ctime; /* last change time */ -#ifndef __powerpc64__ +#else + unsigned long shm_atime_high; + unsigned long shm_atime; /* last attach time */ + unsigned long shm_dtime_high; + unsigned long shm_dtime; /* last detach time */ + unsigned long shm_ctime_high; + unsigned long shm_ctime; /* last change time */ unsigned long __unused4; #endif size_t shm_segsz; /* size of segment (bytes) */