You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
1
(1) |
2
|
3
|
4
(1) |
5
|
6
(1) |
7
|
|
8
|
9
|
10
|
11
|
12
(1) |
13
|
14
|
|
15
(1) |
16
(2) |
17
(5) |
18
(1) |
19
|
20
|
21
(2) |
|
22
(2) |
23
|
24
|
25
|
26
|
27
(4) |
28
(2) |
|
29
|
30
(4) |
31
(4) |
|
|
|
|
|
From: Julian S. <se...@so...> - 2019-12-30 10:45:48
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=0ddbdddc7ae735e258528fc6276478128999a2e7 commit 0ddbdddc7ae735e258528fc6276478128999a2e7 Author: Julian Seward <js...@ac...> Date: Mon Dec 30 11:43:42 2019 +0100 Bug 411451 - amd64->IR of bt/btc/bts/btr with immediate clears zero flag. Patch from bau...@ou.... Diff: --- VEX/priv/guest_amd64_toIR.c | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/VEX/priv/guest_amd64_toIR.c b/VEX/priv/guest_amd64_toIR.c index 4bba03c..1092419 100644 --- a/VEX/priv/guest_amd64_toIR.c +++ b/VEX/priv/guest_amd64_toIR.c @@ -4012,15 +4012,27 @@ ULong dis_Grp8_Imm ( const VexAbiInfo* vbi, } /* Copy relevant bit from t2 into the carry flag. */ - /* Flags: C=selected bit, O,S,Z,A,P undefined, so are set to zero. */ + /* Flags: C=selected bit, O,S,A,P undefined, Z unchanged */ + /* so let's also keep O,S,A,P unchanged */ + const ULong maskC = AMD64G_CC_MASK_C; + const ULong maskOSZAP = AMD64G_CC_MASK_O | AMD64G_CC_MASK_S + | AMD64G_CC_MASK_Z | AMD64G_CC_MASK_A + | AMD64G_CC_MASK_P; + + IRTemp old_rflags = newTemp(Ity_I64); + assign(old_rflags, mk_amd64g_calculate_rflags_all()); + + IRTemp new_rflags = newTemp(Ity_I64); + assign(new_rflags, + binop(Iop_Or64, + binop(Iop_And64, mkexpr(old_rflags), mkU64(maskOSZAP)), + binop(Iop_And64, + binop(Iop_Shr64, mkexpr(t2), mkU8(src_val)), + mkU64(maskC)) )); + stmt( IRStmt_Put( OFFB_CC_OP, mkU64(AMD64G_CC_OP_COPY) )); stmt( IRStmt_Put( OFFB_CC_DEP2, mkU64(0) )); - stmt( IRStmt_Put( - OFFB_CC_DEP1, - binop(Iop_And64, - binop(Iop_Shr64, mkexpr(t2), mkU8(src_val)), - mkU64(1)) - )); + stmt( IRStmt_Put( OFFB_CC_DEP1, mkexpr(new_rflags) )); /* Set NDEP even though it isn't used. This makes redundant-PUT elimination of previous stores to this field work better. */ stmt( IRStmt_Put( OFFB_CC_NDEP, mkU64(0) )); |
|
From: Julian S. <se...@so...> - 2019-12-30 10:25:05
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=57296eee72a6de284a9dee0864ffced884c3f350 commit 57296eee72a6de284a9dee0864ffced884c3f350 Author: Julian Seward <js...@ac...> Date: Mon Dec 30 11:23:32 2019 +0100 Bug 413119 - ioctl wrapper for DRM_IOCTL_I915_GEM_MMAP. Patches from Simon Richter <Sim...@ho...>. Diff: --- coregrind/m_syswrap/syswrap-linux.c | 49 +++++++++++++++++++++++++++++++++++++ include/vki/vki-linux-drm.h | 9 +++++++ 2 files changed, 58 insertions(+) diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c index 20132f5..6852366 100644 --- a/coregrind/m_syswrap/syswrap-linux.c +++ b/coregrind/m_syswrap/syswrap-linux.c @@ -8251,6 +8251,27 @@ PRE(sys_ioctl) * consecutive vertices) */ } break; + case VKI_DRM_IOCTL_I915_GEM_MMAPv1: + if (ARG3) { + struct vki_drm_i915_gem_mmap_v1 *data = + (struct vki_drm_i915_gem_mmap_v1 *)(Addr)ARG3; + PRE_MEM_READ("ioctl(DRM_I915_GEM_MMAPv1).handle", (Addr)&data->handle, sizeof(data->handle)); + PRE_MEM_READ("ioctl(DRM_I915_GEM_MMAPv1).offset", (Addr)&data->offset, sizeof(data->offset)); + PRE_MEM_READ("ioctl(DRM_I915_GEM_MMAPv1).size", (Addr)&data->size, sizeof(data->size)); + PRE_MEM_WRITE("ioctl(DRM_I915_GEM_MMAPv1).addr_ptr", (Addr)&data->addr_ptr, sizeof(data->addr_ptr)); + } + break; + case VKI_DRM_IOCTL_I915_GEM_MMAP: + if (ARG3) { + struct vki_drm_i915_gem_mmap *data = + (struct vki_drm_i915_gem_mmap *)(Addr)ARG3; + PRE_MEM_READ("ioctl(DRM_I915_GEM_MMAP).handle", (Addr)&data->handle, sizeof(data->handle)); + PRE_MEM_READ("ioctl(DRM_I915_GEM_MMAP).offset", (Addr)&data->offset, sizeof(data->offset)); + PRE_MEM_READ("ioctl(DRM_I915_GEM_MMAP).size", (Addr)&data->size, sizeof(data->size)); + PRE_MEM_READ("ioctl(DRM_I915_GEM_MMAP).flags", (Addr)&data->size, sizeof(data->flags)); + PRE_MEM_WRITE("ioctl(DRM_I915_GEM_MMAP).addr_ptr", (Addr)&data->addr_ptr, sizeof(data->addr_ptr)); + } + break; case VKI_DRM_IOCTL_I915_GEM_MMAP_GTT: if (ARG3) { struct vki_drm_i915_gem_mmap_gtt *data = @@ -10903,6 +10924,34 @@ POST(sys_ioctl) POST_MEM_WRITE((Addr)data->data_ptr, data->size); } break; + case VKI_DRM_IOCTL_I915_GEM_MMAPv1: + if (ARG3) { + struct vki_drm_i915_gem_mmap_v1 *data = + (struct vki_drm_i915_gem_mmap_v1 *)(Addr)ARG3; + Addr addr = data->addr_ptr; + SizeT size = data->size; + vg_assert(ML_(valid_client_addr)(addr, size, tid, + "ioctl(DRM_IOCTL_I915_GEM_MMAPv1)")); + ML_(notify_core_and_tool_of_mmap)(addr, size, + VKI_PROT_READ | VKI_PROT_WRITE, + VKI_MAP_ANONYMOUS, -1, 0 ); + POST_MEM_WRITE((Addr)&data->addr_ptr, sizeof(data->addr_ptr)); + } + break; + case VKI_DRM_IOCTL_I915_GEM_MMAP: + if (ARG3) { + struct vki_drm_i915_gem_mmap *data = + (struct vki_drm_i915_gem_mmap *)(Addr)ARG3; + Addr addr = data->addr_ptr; + SizeT size = data->size; + vg_assert(ML_(valid_client_addr)(addr, size, tid, + "ioctl(DRM_IOCTL_I915_GEM_MMAP)")); + ML_(notify_core_and_tool_of_mmap)(addr, size, + VKI_PROT_READ | VKI_PROT_WRITE, + VKI_MAP_ANONYMOUS, -1, 0 ); + POST_MEM_WRITE((Addr)&data->addr_ptr, sizeof(data->addr_ptr)); + } + break; case VKI_DRM_IOCTL_I915_GEM_MMAP_GTT: if (ARG3) { struct vki_drm_i915_gem_mmap_gtt *data = diff --git a/include/vki/vki-linux-drm.h b/include/vki/vki-linux-drm.h index 6ba909c..ca62044 100644 --- a/include/vki/vki-linux-drm.h +++ b/include/vki/vki-linux-drm.h @@ -633,6 +633,7 @@ typedef struct _vki_drm_i915_init { #define VKI_DRM_IOCTL_I915_GEM_CREATE VKI_DRM_IOWR(VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_CREATE, struct vki_drm_i915_gem_create) #define VKI_DRM_IOCTL_I915_GEM_PREAD VKI_DRM_IOW (VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_PREAD, struct vki_drm_i915_gem_pread) #define VKI_DRM_IOCTL_I915_GEM_PWRITE VKI_DRM_IOW (VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_PWRITE, struct vki_drm_i915_gem_pwrite) +#define VKI_DRM_IOCTL_I915_GEM_MMAPv1 VKI_DRM_IOWR(VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_MMAP, struct vki_drm_i915_gem_mmap_v1) #define VKI_DRM_IOCTL_I915_GEM_MMAP VKI_DRM_IOWR(VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_MMAP, struct vki_drm_i915_gem_mmap) #define VKI_DRM_IOCTL_I915_GEM_MMAP_GTT VKI_DRM_IOWR(VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_MMAP_GTT, struct vki_drm_i915_gem_mmap_gtt) #define VKI_DRM_IOCTL_I915_GEM_SET_DOMAIN VKI_DRM_IOW (VKI_DRM_COMMAND_BASE + VKI_DRM_I915_GEM_SET_DOMAIN, struct vki_drm_i915_gem_set_domain) @@ -724,12 +725,20 @@ struct vki_drm_i915_gem_pwrite { __vki_u64 size; __vki_u64 data_ptr; }; +struct vki_drm_i915_gem_mmap_v1 { + __vki_u32 handle; + __vki_u32 pad; + __vki_u64 offset; + __vki_u64 size; + __vki_u64 addr_ptr; +}; struct vki_drm_i915_gem_mmap { __vki_u32 handle; __vki_u32 pad; __vki_u64 offset; __vki_u64 size; __vki_u64 addr_ptr; + __vki_u64 flags; }; struct vki_drm_i915_gem_mmap_gtt { __vki_u32 handle; |
|
From: Julian S. <se...@so...> - 2019-12-30 10:14:35
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=11b7891a8a39b0dae39c97cfcd039a708f83a69a commit 11b7891a8a39b0dae39c97cfcd039a708f83a69a Author: Julian Seward <js...@ac...> Date: Mon Dec 30 11:13:13 2019 +0100 Bug 410556 - add support for BLKIO{MIN,OPT} and BLKALIGNOFF ioctls. Patch from Nick Black <dan...@gm...>. Diff: --- coregrind/m_syswrap/syswrap-linux.c | 18 ++++++++++++++++++ include/vki/vki-linux.h | 5 ++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c index fd958e4..20132f5 100644 --- a/coregrind/m_syswrap/syswrap-linux.c +++ b/coregrind/m_syswrap/syswrap-linux.c @@ -7282,6 +7282,15 @@ PRE(sys_ioctl) case VKI_BLKPBSZGET: PRE_MEM_WRITE( "ioctl(BLKPBSZGET)", ARG3, sizeof(int)); break; + case VKI_BLKIOMIN: + PRE_MEM_WRITE( "ioctl(BLKIOMIN)", ARG3, sizeof(vki_uint)); + break; + case VKI_BLKIOOPT: + PRE_MEM_WRITE( "ioctl(BLKIOOPT)", ARG3, sizeof(vki_uint)); + break; + case VKI_BLKALIGNOFF: + PRE_MEM_WRITE( "ioctl(BLKALIGNOFF)", ARG3, sizeof(int)); + break; case VKI_BLKDISCARDZEROES: PRE_MEM_WRITE( "ioctl(BLKDISCARDZEROES)", ARG3, sizeof(vki_uint)); break; @@ -10212,6 +10221,15 @@ POST(sys_ioctl) case VKI_BLKPBSZGET: POST_MEM_WRITE(ARG3, sizeof(int)); break; + case VKI_BLKIOMIN: + POST_MEM_WRITE(ARG3, sizeof(vki_uint)); + break; + case VKI_BLKIOOPT: + POST_MEM_WRITE(ARG3, sizeof(vki_uint)); + break; + case VKI_BLKALIGNOFF: + POST_MEM_WRITE(ARG3, sizeof(int)); + break; case VKI_BLKDISCARDZEROES: POST_MEM_WRITE(ARG3, sizeof(vki_uint)); break; diff --git a/include/vki/vki-linux.h b/include/vki/vki-linux.h index 99127eb..dd9b20f 100644 --- a/include/vki/vki-linux.h +++ b/include/vki/vki-linux.h @@ -1825,7 +1825,7 @@ struct vki_ppdev_frob_struct { #define VKI_PPSETFLAGS _VKI_IOW(VKI_PP_IOCTL, 0x9b, int) //---------------------------------------------------------------------- -// From linux-3.16/include/uapi/linux/fs.h +// From linux-5.2.5/include/uapi/linux/fs.h //---------------------------------------------------------------------- #define VKI_BLKROSET _VKI_IO(0x12,93) /* set device read-only (0 = read-write) */ @@ -1844,6 +1844,9 @@ struct vki_ppdev_frob_struct { #define VKI_BLKBSZSET _VKI_IOW(0x12,113,vki_size_t) #define VKI_BLKGETSIZE64 _VKI_IOR(0x12,114,vki_size_t) /* return device size in bytes (u64 *arg) */ #define VKI_BLKDISCARD _VKI_IO(0x12,119) +#define VKI_BLKIOMIN _VKI_IO(0x12,120) +#define VKI_BLKIOOPT _VKI_IO(0x12,121) +#define VKI_BLKALIGNOFF _VKI_IO(0x12,122) #define VKI_BLKPBSZGET _VKI_IO(0x12,123) #define VKI_BLKDISCARDZEROES _VKI_IO(0x12,124) #define VKI_BLKZEROOUT _VKI_IO(0x12,127) |
|
From: Julian S. <se...@so...> - 2019-12-30 10:05:09
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=bba186064e905d6fbed6d18cc2f66f4ec78e2c1d commit bba186064e905d6fbed6d18cc2f66f4ec78e2c1d Author: Julian Seward <js...@ac...> Date: Mon Dec 30 11:03:19 2019 +0100 Bug 409206 - Support for Linux PPS and PTP ioctls. Patches from Miroslav Lichvar <mli...@re...>. Diff: --- coregrind/m_syswrap/syswrap-linux.c | 150 ++++++++++++++++++++++++++++++++++++ include/vki/vki-linux.h | 118 ++++++++++++++++++++++++++++ 2 files changed, 268 insertions(+) diff --git a/coregrind/m_syswrap/syswrap-linux.c b/coregrind/m_syswrap/syswrap-linux.c index 4655d09..fd958e4 100644 --- a/coregrind/m_syswrap/syswrap-linux.c +++ b/coregrind/m_syswrap/syswrap-linux.c @@ -9474,6 +9474,100 @@ PRE(sys_ioctl) PRE_MEM_WRITE("ioctl(VKI_PERF_EVENT_IOC_ID)", (Addr)ARG3, sizeof(__vki_u64)); break; + /* Pulse Per Second (PPS) */ + case VKI_PPS_GETPARAMS: { + struct vki_pps_kparams *data = (struct vki_pps_kparams *)(Addr)ARG3; + PRE_MEM_WRITE("ioctl(PPS_GETPARAMS)", (Addr)data, sizeof(*data)); + break; + } + case VKI_PPS_SETPARAMS: { + struct vki_pps_kparams *data = (struct vki_pps_kparams *)(Addr)ARG3; + PRE_FIELD_READ("ioctl(PPS_SETPARAMS).mode", data->mode); + PRE_FIELD_READ("ioctl(PPS_SETPARAMS).assert_off_tu.sec", + data->assert_off_tu.sec); + PRE_FIELD_READ("ioctl(PPS_SETPARAMS).assert_off_tu.nsec", + data->assert_off_tu.nsec); + PRE_FIELD_READ("ioctl(PPS_SETPARAMS).clear_off_tu.sec", + data->clear_off_tu.sec); + PRE_FIELD_READ("ioctl(PPS_SETPARAMS).clear_off_tu.nsec", + data->clear_off_tu.nsec); + break; + } + case VKI_PPS_GETCAP: + PRE_MEM_WRITE("ioctl(PPS_GETCAP)", (Addr)ARG3, sizeof(int)); + break; + case VKI_PPS_FETCH: { + struct vki_pps_fdata *data = (struct vki_pps_fdata *)(Addr)ARG3; + PRE_FIELD_READ("ioctl(PPS_FETCH).timeout", data->timeout); + PRE_FIELD_WRITE("ioctl(PPS_FETCH).info", data->info); + break; + } + case VKI_PPS_KC_BIND: { + struct vki_pps_bind_args *data = (struct vki_pps_bind_args *)(Addr)ARG3; + PRE_MEM_READ("ioctl(PPS_KC_BIND)", (Addr)data, sizeof(*data)); + break; + } + + /* PTP Hardware Clock */ + case VKI_PTP_CLOCK_GETCAPS: { + struct vki_ptp_clock_caps *data = + (struct vki_ptp_clock_caps *)(Addr)ARG3; + PRE_MEM_WRITE("ioctl(PTP_CLOCK_GETCAPS)", (Addr)data, sizeof(*data)); + break; + } + case VKI_PTP_EXTTS_REQUEST: { + struct vki_ptp_extts_request *data = + (struct vki_ptp_extts_request *)(Addr)ARG3; + PRE_MEM_READ("ioctl(PTP_EXTTS_REQUEST)", (Addr)data, sizeof(*data)); + break; + } + case VKI_PTP_PEROUT_REQUEST: { + struct vki_ptp_perout_request *data = + (struct vki_ptp_perout_request *)(Addr)ARG3; + PRE_MEM_READ("ioctl(PTP_PEROUT_REQUEST)", (Addr)data, sizeof(*data)); + break; + } + case VKI_PTP_ENABLE_PPS: + break; + case VKI_PTP_SYS_OFFSET: { + struct vki_ptp_sys_offset *data = + (struct vki_ptp_sys_offset *)(Addr)ARG3; + PRE_FIELD_READ("ioctl(PTP_SYS_OFFSET).n_samples", data->n_samples); + if (data->n_samples <= VKI_PTP_MAX_SAMPLES) + PRE_MEM_WRITE("ioctl(PTP_SYS_OFFSET).ts", (Addr)data->ts, + (2 * data->n_samples + 1) * sizeof(data->ts[0])); + break; + } + case VKI_PTP_PIN_GETFUNC: { + struct vki_ptp_pin_desc *data = (struct vki_ptp_pin_desc *)(Addr)ARG3; + PRE_FIELD_READ("ioctl(PTP_PIN_GETFUNC).index", data->index); + PRE_MEM_WRITE("ioctl(PTP_PIN_GETFUNC)", (Addr)data, sizeof(*data)); + break; + } + case VKI_PTP_PIN_SETFUNC: { + struct vki_ptp_pin_desc *data = (struct vki_ptp_pin_desc *)(Addr)ARG3; + PRE_FIELD_READ("ioctl(PTP_PIN_SETFUNC).index", data->index); + PRE_FIELD_READ("ioctl(PTP_PIN_SETFUNC).func", data->func); + PRE_FIELD_READ("ioctl(PTP_PIN_SETFUNC).chan", data->chan); + break; + } + case VKI_PTP_SYS_OFFSET_PRECISE: { + struct vki_ptp_sys_offset_precise *data = + (struct vki_ptp_sys_offset_precise *)(Addr)ARG3; + PRE_MEM_WRITE("ioctl(PTP_SYS_OFFSET_PRECISE)", (Addr)data, sizeof(*data)); + break; + } + case VKI_PTP_SYS_OFFSET_EXTENDED: { + struct vki_ptp_sys_offset_extended *data = + (struct vki_ptp_sys_offset_extended *)(Addr)ARG3; + PRE_FIELD_READ("ioctl(PTP_SYS_OFFSET_EXTENDED).n_samples", data->n_samples); + PRE_FIELD_READ("ioctl(PTP_SYS_OFFSET_EXTENDED).rsv", data->rsv); + if (data->n_samples <= VKI_PTP_MAX_SAMPLES) + PRE_MEM_WRITE("ioctl(PTP_SYS_OFFSET_EXTENDED).ts", (Addr)data->ts, + 3 * data->n_samples * sizeof(data->ts[0][0])); + break; + } + default: /* EVIOC* are variable length and return size written on success */ switch (ARG2 & ~(_VKI_IOC_SIZEMASK << _VKI_IOC_SIZESHIFT)) { @@ -11471,6 +11565,62 @@ POST(sys_ioctl) POST_MEM_WRITE((Addr)ARG3, sizeof(__vki_u64)); break; + /* Pulse Per Second (PPS) */ + case VKI_PPS_GETPARAMS: { + struct vki_pps_kparams *data = (struct vki_pps_kparams *)(Addr)ARG3; + POST_MEM_WRITE((Addr)data, sizeof(*data)); + break; + } + case VKI_PPS_GETCAP: + POST_MEM_WRITE((Addr)ARG3, sizeof(int)); + break; + case VKI_PPS_FETCH: { + struct vki_pps_fdata *data = (struct vki_pps_fdata *)(Addr)ARG3; + POST_FIELD_WRITE(data->info); + break; + } + case VKI_PPS_SETPARAMS: + case VKI_PPS_KC_BIND: + break; + + /* PTP Hardware Clock */ + case VKI_PTP_CLOCK_GETCAPS: { + struct vki_ptp_clock_caps *data = + (struct vki_ptp_clock_caps *)(Addr)ARG3; + POST_MEM_WRITE((Addr)data, sizeof(*data)); + break; + } + case VKI_PTP_SYS_OFFSET: { + struct vki_ptp_sys_offset *data = + (struct vki_ptp_sys_offset *)(Addr)ARG3; + POST_MEM_WRITE((Addr)data->ts, + (2 * data->n_samples + 1) * sizeof(data->ts[0])); + break; + } + case VKI_PTP_PIN_GETFUNC: { + struct vki_ptp_pin_desc *data = (struct vki_ptp_pin_desc *)(Addr)ARG3; + POST_MEM_WRITE((Addr)data, sizeof(*data)); + break; + } + case VKI_PTP_SYS_OFFSET_PRECISE: { + struct vki_ptp_sys_offset_precise *data = + (struct vki_ptp_sys_offset_precise *)(Addr)ARG3; + POST_MEM_WRITE((Addr)data, sizeof(*data)); + break; + } + case VKI_PTP_SYS_OFFSET_EXTENDED: { + struct vki_ptp_sys_offset_extended *data = + (struct vki_ptp_sys_offset_extended *)(Addr)ARG3; + POST_MEM_WRITE((Addr)data->ts, + 3 * data->n_samples * sizeof(data->ts[0][0])); + break; + } + case VKI_PTP_EXTTS_REQUEST: + case VKI_PTP_PEROUT_REQUEST: + case VKI_PTP_ENABLE_PPS: + case VKI_PTP_PIN_SETFUNC: + break; + default: /* EVIOC* are variable length and return size written on success */ switch (ARG2 & ~(_VKI_IOC_SIZEMASK << _VKI_IOC_SIZESHIFT)) { diff --git a/include/vki/vki-linux.h b/include/vki/vki-linux.h index 6903c77..99127eb 100644 --- a/include/vki/vki-linux.h +++ b/include/vki/vki-linux.h @@ -5132,6 +5132,124 @@ struct vki_bpf_btf_info { __vki_u32 id; } __attribute__((aligned(8))); +//---------------------------------------------------------------------- +// From linux-5.1/include/uapi/linux/pps.h +//---------------------------------------------------------------------- + +struct vki_pps_ktime { + __vki_s64 sec; + __vki_s32 nsec; + __vki_u32 flags; +}; + +struct vki_pps_kinfo { + __vki_u32 assert_sequence; + __vki_u32 clear_sequence; + struct vki_pps_ktime assert_tu; + struct vki_pps_ktime clear_tu; + int current_mode; +}; + +struct vki_pps_kparams { + int api_version; + int mode; + struct vki_pps_ktime assert_off_tu; + struct vki_pps_ktime clear_off_tu; +}; + +struct vki_pps_fdata { + struct vki_pps_kinfo info; + struct vki_pps_ktime timeout; +}; + +struct vki_pps_bind_args { + int tsformat; + int edge; + int consumer; +}; + +#define VKI_PPS_GETPARAMS _VKI_IOR('p', 0xa1, struct vki_pps_kparams *) +#define VKI_PPS_SETPARAMS _VKI_IOW('p', 0xa2, struct vki_pps_kparams *) +#define VKI_PPS_GETCAP _VKI_IOR('p', 0xa3, int *) +#define VKI_PPS_FETCH _VKI_IOWR('p', 0xa4, struct vki_pps_fdata *) +#define VKI_PPS_KC_BIND _VKI_IOW('p', 0xa5, struct vki_pps_bind_args *) + +//---------------------------------------------------------------------- +// From linux-5.1/include/uapi/linux/ptp_clock.h +//---------------------------------------------------------------------- + +struct vki_ptp_clock_time { + __vki_s64 sec; + __vki_u32 nsec; + __vki_u32 reserved; +}; + +struct vki_ptp_clock_caps { + int max_adj; + int n_alarm; + int n_ext_ts; + int n_per_out; + int pps; + int n_pins; + int cross_timestamping; + int rsv[13]; +}; + +struct vki_ptp_extts_request { + unsigned int index; + unsigned int flags; + unsigned int rsv[2]; +}; + +struct vki_ptp_perout_request { + struct vki_ptp_clock_time start; + struct vki_ptp_clock_time period; + unsigned int index; + unsigned int flags; + unsigned int rsv[4]; +}; + +#define VKI_PTP_MAX_SAMPLES 25 + +struct vki_ptp_sys_offset { + unsigned int n_samples; + unsigned int rsv[3]; + struct vki_ptp_clock_time ts[2 * VKI_PTP_MAX_SAMPLES + 1]; +}; + +struct vki_ptp_sys_offset_extended { + unsigned int n_samples; + unsigned int rsv[3]; + struct vki_ptp_clock_time ts[VKI_PTP_MAX_SAMPLES][3]; +}; + +struct vki_ptp_sys_offset_precise { + struct vki_ptp_clock_time device; + struct vki_ptp_clock_time sys_realtime; + struct vki_ptp_clock_time sys_monoraw; + unsigned int rsv[4]; +}; + +struct vki_ptp_pin_desc { + char name[64]; + unsigned int index; + unsigned int func; + unsigned int chan; + unsigned int rsv[5]; +}; + +#define VKI_PTP_CLOCK_GETCAPS _VKI_IOR('=', 1, struct vki_ptp_clock_caps) +#define VKI_PTP_EXTTS_REQUEST _VKI_IOW('=', 2, struct vki_ptp_extts_request) +#define VKI_PTP_PEROUT_REQUEST _VKI_IOW('=', 3, struct vki_ptp_perout_request) +#define VKI_PTP_ENABLE_PPS _VKI_IOW('=', 4, int) +#define VKI_PTP_SYS_OFFSET _VKI_IOW('=', 5, struct vki_ptp_sys_offset) +#define VKI_PTP_PIN_GETFUNC _VKI_IOWR('=', 6, struct vki_ptp_pin_desc) +#define VKI_PTP_PIN_SETFUNC _VKI_IOW('=', 7, struct vki_ptp_pin_desc) +#define VKI_PTP_SYS_OFFSET_PRECISE \ + _VKI_IOWR('=', 8, struct vki_ptp_sys_offset_precise) +#define VKI_PTP_SYS_OFFSET_EXTENDED \ + _VKI_IOWR('=', 9, struct vki_ptp_sys_offset_extended) + /*--------------------------------------------------------------------*/ /*--- end ---*/ /*--------------------------------------------------------------------*/ |