From patchwork Thu Apr 12 14:20:20 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Arnd Bergmann X-Patchwork-Id: 133290 Delivered-To: patch@linaro.org Received: by 10.46.84.29 with SMTP id i29csp1737881ljb; Thu, 12 Apr 2018 07:21:49 -0700 (PDT) X-Google-Smtp-Source: AIpwx49AdlRRRof7XzA2jEPtz3U2yYpen5OtuaQl9U6EGu0Vamv9xrANiOz4Cc9FL2rWhQ+llKJv X-Received: by 2002:a17:902:52ec:: with SMTP id a99-v6mr308138pli.371.1523542908955; Thu, 12 Apr 2018 07:21:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523542908; cv=none; d=google.com; s=arc-20160816; b=Q3DNIBzfHuVOeHBBf3ZkUZHX/IdZ5tRn6EreejW7hUpxw3pMSD1DREqQniJdX8kK0P n13XQkCmrZ3r2Af5/mxfEFqztkZmrmqClfOhtivjQ7JUvUJlCiaSCKBJMw7RHNAOtyOx 0BOKeEMsmKR12Xx0mQtKBCMvx2lRMi0aw74pdegzlbePzBfN1A7K8RzJx5H3lbixp17O +UAH3k2KyqDT5yMs9miYNNuJEnn8ekTkQU8fO1iycDlIcU7Pz+N9suQD+hDyTm1Ab6A7 ag+2FxoYEwUFUi7gp6FID5K7GxLuv0/bKdtFJl2CFiVQjlckU6ffWMYxta1al6WFMeBm /fVw== 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=l6l8hBD1LwMEc8rPECkl+yH6jwVWAzXXcGJGNxvajns=; b=qAkG8dmRju3E8GmpmFbJ5m1VWcRo3fjWYN1kAnb8dToxG7+8uFNooKRTYZgXBfLhRo kcuPEoYSTGjMjgiIlWx2CFS2Fp7w0zF0OBqvsFEZD2rpyTKfx3VFiwWPJUFh1lu72M2/ YvYXne34l0mqzt+68ot7FAjj1CdrQaUhI2kzn1loD6fEIXdvRdnJyvhp2s2u0ZiofypQ 5lIcNDpTkDHaYAF/H9zt7lAj+HSvpu+S3ji50k0yyWBWmKUvvlYQEXXCoqIIfRf/HsWM DFpfy+YXGusbSSScb3C6eCtJ9PhH8YjAVOd/TFYxDTvCU72aVeoqvhG2eIq1IwA14n+m qYSA== 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 e12si2624290pff.366.2018.04.12.07.21.48; Thu, 12 Apr 2018 07:21:48 -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 S1753353AbeDLOVA (ORCPT + 29 others); Thu, 12 Apr 2018 10:21:00 -0400 Received: from mout.kundenserver.de ([217.72.192.73]:51193 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752943AbeDLOUg (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 0MfHVi-1eqcP21sEc-00OmfA; 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 09/13] y2038: sparc: extend sysvipc data structures Date: Thu, 12 Apr 2018 16:20:20 +0200 Message-Id: <20180412142024.853892-10-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:E5DpL6168Mr+7Tgj79zfCr87hM7aMrzHvGJtCyz7iMT0bShqzaS 279OjtwAFJ+Ess3Ol3nNDMUAo5YR2AC9mWQ3f7Wp6dxa5MUzMcLowf10SEJc7GQZ9LFcQAm YiQeC4jsEtwyjLTN79b9l91+B8ObmtxiCojSBY0e5jxM2eRrVHeQDEcUYk91NQgRiVYJ/Hq D0npN2puuWuBL5U20SGJw== X-UI-Out-Filterresults: notjunk:1; V01:K0:0/GfNFSZ1Dw=:o/EyEkpUuciHpth/CT9dy4 DiueCe8KKI5Zbh+5ks0IxuRP5Gzi6RnxSPeN6o6xiRVUWkOV819v2nszrvU4h8i//+NrhXBRm EnR1tBr4EeI/TjSpfDnmhLw+X0KSsIOYa1xOcFLw4+tLz/DvkRmwvSqSBFhn6c4Dek6YxuVR+ +qx2dfDtWtXRqw7Vuoxna1y6P8BwkwllajJSE+M4IimnSvipkRWteCxQCjDcJxrrXXR0sNgVi yOeai2xTr8HPodUU2TJAM+z5rNKUhJA4TtXzrXIXsOuGqO5FpRFf284fJkjvpymk7aYySBTSc x6I9P2i0/czSq7Mv1WUYX7ZZz3rhOXa2wAur4UPuydzsroqOjKH0SgaOEzG64nilqlOFWoHc4 QeHzTg0IeFay8vpwO6+5XTSh/HPEBBFMEZ8hqeIfWEkjHlSX4zxj+UHYWdb8Zv2knWTc8C1qw kvM9154DQFEXsEaqJM4UAI/vFqEkOmsB7LtoQFTxmNv4DvQnJfHVYyluPHdxxEnd55L9R7Axm d50y/KLAG9v8JXnLjFHKLdceXbKfszP3K04fvRYrjHNm1LnTJqQw0WnQDpsFBouTlMNjAQhAr SyHEy/J8a+lbNhazQS9s7uMJaTlfBqb1vbro2ewv1Tlp8UfM1cOESq436hSodXdtXMXf2qJwb RT1GNBuZgCvAWXtbg2RKAViLeL513DsYzq2kDNZm3Q027m+LgOmG2npK3+/N6/YwKZdsN9g2y 0/nIuND8zUPt0eIHMzL10Hf/8wYOf27um2oaTw== Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org sparc, 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. Unlike most architectures, sparc actually succeeded in defining this right for big-endian CPUs, but as everyone else got it wrong, we just use the same hack everywhere. 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/sparc/include/asm/compat.h | 32 ++++++++++++++++---------------- arch/sparc/include/uapi/asm/msgbuf.h | 22 +++++++++------------- arch/sparc/include/uapi/asm/sembuf.h | 16 +++++++--------- arch/sparc/include/uapi/asm/shmbuf.h | 21 +++++++++------------ 4 files changed, 41 insertions(+), 50 deletions(-) -- 2.9.0 diff --git a/arch/sparc/include/asm/compat.h b/arch/sparc/include/asm/compat.h index 1910c44521e3..4eb51d2dae98 100644 --- a/arch/sparc/include/asm/compat.h +++ b/arch/sparc/include/asm/compat.h @@ -192,10 +192,10 @@ struct compat_ipc64_perm { struct compat_semid64_ds { struct compat_ipc64_perm sem_perm; - unsigned int __pad1; - compat_time_t sem_otime; - unsigned int __pad2; - compat_time_t sem_ctime; + unsigned int sem_otime_high; + unsigned int sem_otime; + unsigned int sem_ctime_high; + unsigned int sem_ctime; u32 sem_nsems; u32 __unused1; u32 __unused2; @@ -203,12 +203,12 @@ struct compat_semid64_ds { struct compat_msqid64_ds { struct compat_ipc64_perm msg_perm; - unsigned int __pad1; - compat_time_t msg_stime; - unsigned int __pad2; - compat_time_t msg_rtime; - unsigned int __pad3; - 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; unsigned int msg_cbytes; unsigned int msg_qnum; unsigned int msg_qbytes; @@ -220,12 +220,12 @@ struct compat_msqid64_ds { struct compat_shmid64_ds { struct compat_ipc64_perm shm_perm; - unsigned int __pad1; - compat_time_t shm_atime; - unsigned int __pad2; - compat_time_t shm_dtime; - unsigned int __pad3; - 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; compat_size_t shm_segsz; compat_pid_t shm_cpid; compat_pid_t shm_lpid; diff --git a/arch/sparc/include/uapi/asm/msgbuf.h b/arch/sparc/include/uapi/asm/msgbuf.h index b601c4f4d956..ffc46c211d6d 100644 --- a/arch/sparc/include/uapi/asm/msgbuf.h +++ b/arch/sparc/include/uapi/asm/msgbuf.h @@ -8,25 +8,22 @@ * between kernel and user space. * * Pad space is left for: - * - 64-bit time_t to solve y2038 problem * - 2 miscellaneous 32-bit values */ - -#if defined(__sparc__) && defined(__arch64__) -# define PADDING(x) -#else -# define PADDING(x) unsigned int x; -#endif - - struct msqid64_ds { struct ipc64_perm msg_perm; - PADDING(__pad1) +#if defined(__sparc__) && defined(__arch64__) __kernel_time_t msg_stime; /* last msgsnd time */ - PADDING(__pad2) __kernel_time_t msg_rtime; /* last msgrcv time */ - PADDING(__pad3) __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 */ @@ -35,5 +32,4 @@ struct msqid64_ds { unsigned long __unused1; unsigned long __unused2; }; -#undef PADDING #endif /* _SPARC_MSGBUF_H */ diff --git a/arch/sparc/include/uapi/asm/sembuf.h b/arch/sparc/include/uapi/asm/sembuf.h index f49b0ffa0ab8..f3d309c2e1cd 100644 --- a/arch/sparc/include/uapi/asm/sembuf.h +++ b/arch/sparc/include/uapi/asm/sembuf.h @@ -8,25 +8,23 @@ * between kernel and user space. * * Pad space is left for: - * - 64-bit time_t to solve y2038 problem * - 2 miscellaneous 32-bit values */ -#if defined(__sparc__) && defined(__arch64__) -# define PADDING(x) -#else -# define PADDING(x) unsigned int x; -#endif struct semid64_ds { struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ - PADDING(__pad1) +#if defined(__sparc__) && defined(__arch64__) __kernel_time_t sem_otime; /* last semop time */ - PADDING(__pad2) __kernel_time_t sem_ctime; /* last change time */ +#else + unsigned long sem_otime_high; + unsigned long sem_otime; /* last semop time */ + unsigned long sem_ctime_high; + unsigned long sem_ctime; /* last change time */ +#endif unsigned long sem_nsems; /* no. of semaphores in array */ unsigned long __unused1; unsigned long __unused2; }; -#undef PADDING #endif /* _SPARC64_SEMBUF_H */ diff --git a/arch/sparc/include/uapi/asm/shmbuf.h b/arch/sparc/include/uapi/asm/shmbuf.h index 286631db705c..06618b84822d 100644 --- a/arch/sparc/include/uapi/asm/shmbuf.h +++ b/arch/sparc/include/uapi/asm/shmbuf.h @@ -8,24 +8,23 @@ * between kernel and user space. * * Pad space is left for: - * - 64-bit time_t to solve y2038 problem * - 2 miscellaneous 32-bit values */ -#if defined(__sparc__) && defined(__arch64__) -# define PADDING(x) -#else -# define PADDING(x) unsigned int x; -#endif - struct shmid64_ds { struct ipc64_perm shm_perm; /* operation perms */ - PADDING(__pad1) +#if defined(__sparc__) && defined(__arch64__) __kernel_time_t shm_atime; /* last attach time */ - PADDING(__pad2) __kernel_time_t shm_dtime; /* last detach time */ - PADDING(__pad3) __kernel_time_t shm_ctime; /* last change time */ +#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 */ +#endif size_t shm_segsz; /* size of segment (bytes) */ __kernel_pid_t shm_cpid; /* pid of creator */ __kernel_pid_t shm_lpid; /* pid of last operator */ @@ -46,6 +45,4 @@ struct shminfo64 { unsigned long __unused4; }; -#undef PADDING - #endif /* _SPARC_SHMBUF_H */