From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755034AbbDJL71 (ORCPT ); Fri, 10 Apr 2015 07:59:27 -0400 Received: from mout.kundenserver.de ([212.227.126.130]:60880 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751609AbbDJL7Z (ORCPT ); Fri, 10 Apr 2015 07:59:25 -0400 From: Arnd Bergmann To: Kai Vehmanen Cc: Aaro Koskinen , Pavel Machek , Sebastian Reichel , linux-kernel@vger.kernel.org Subject: [RFC, PATCH] HSI: cmt_speech: fix timestamp interface Date: Fri, 10 Apr 2015 13:59:19 +0200 Message-ID: <49891497.PNlYVWnWxN@wuerfel> User-Agent: KMail/4.11.5 (Linux/3.16.0-10-generic; KDE/4.11.5; x86_64; ; ) MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" X-Provags-ID: V03:K0:TwjjuJ1OP9TwCzHAQXxYlyqAcO1gHJH1yq/zwPIv4F4oIobU6Y0 48/WO3knIzmSoriZA6MkVqMBOeKMwm5iLGgOEe+wV8PohmS6ushCyCC3uALRAtrp8KaHgVw B8iGdUzh1USiI/4yi/zbiGgElUn2zheE3/SzdiMksZUoydi4hDzfxC4m7mDV8cNYmTbVVNP Vu1di4v9jxRG3Od0o9I9Q== X-UI-Out-Filterresults: notjunk:1; Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The user interface for timestamps in the new cms_speech driver is broken in multiple ways: - The layout is incompatible between 32-bit and 64-bit user space, because of the size differences in 'struct timespec'. This means that the driver can not work when used with 32-bit user space on a 64-bit kernel. - As there are plans to change 32-bit user space to use a 64-bit time_t type in the future, it will also be incompatible with new 32-bit user space. As the driver is not yet widely used, now would be a good time to change it to just use a 64-bit nanosecond value, which also happens to be more efficient. In order to make the layout non-ambiguous, we have to also add extra padding so the 64-bit value is naturally aligned. The change requires the respective update to user space tools using it. If that is for some reason not possible any more, another solution would be to replace the timespec structure with two __u32 values to avoid incompatibilities later. Signed-off-by: Arnd Bergmann diff --git a/drivers/hsi/clients/cmt_speech.c b/drivers/hsi/clients/cmt_speech.c index 4983529a9c6c..568dbc117f2e 100644 --- a/drivers/hsi/clients/cmt_speech.c +++ b/drivers/hsi/clients/cmt_speech.c @@ -451,9 +451,7 @@ static void cs_hsi_read_on_control_complete(struct hsi_msg *msg) dev_dbg(&hi->cl->device, "Read on control: %08X\n", cmd); cs_release_cmd(msg); if (hi->flags & CS_FEAT_TSTAMP_RX_CTRL) { - struct timespec *tstamp = - &hi->mmap_cfg->tstamp_rx_ctrl; - do_posix_clock_monotonic_gettime(tstamp); + hi->mmap_cfg->tstamp_rx_ctrl = ktime_get_ns(); } spin_unlock(&hi->lock); diff --git a/include/uapi/linux/hsi/cs-protocol.h b/include/uapi/linux/hsi/cs-protocol.h index 4957bba57cbe..fce633c7c649 100644 --- a/include/uapi/linux/hsi/cs-protocol.h +++ b/include/uapi/linux/hsi/cs-protocol.h @@ -90,12 +90,12 @@ struct cs_mmap_config_block { __u32 tx_offsets[CS_MAX_BUFFERS]; __u32 rx_ptr; __u32 rx_ptr_boundary; - __u32 reserved3[2]; + __u32 reserved3[3]; /* * if enabled with CS_FEAT_TSTAMP_RX_CTRL, monotonic * timestamp taken when the last control command was received */ - struct timespec tstamp_rx_ctrl; + __u64 tstamp_rx_ctrl; }; #define CS_IO_MAGIC 'C'