Le 15/01/2020 à 16:53, Filip Bozuta a écrit : > This patch implements functionalities of following ioctls: > > RTC_IRQP_READ, RTC_IRQP_SET - Getting/Setting IRQ rate > > Read and set the frequency for periodic interrupts, for RTCs > that support periodic interrupts. The periodic interrupt must > be separately enabled or disabled using the RTC_PIE_ON, > RTC_PIE_OFF requests. The third ioctl's argument is an > unsigned long * or an unsigned long, respectively. The value > is the frequency in interrupts per second. The set of allow‐ > able frequencies is the multiples of two in the range 2 to > 8192. Only a privileged process (i.e., one having the > CAP_SYS_RESOURCE capability) can set frequencies above the > value specified in /proc/sys/dev/rtc/max-user-freq. (This > file contains the value 64 by default.) > > RTC_EPOCH_READ, RTC_EPOCH_SET - Getting/Setting epoch > > Many RTCs encode the year in an 8-bit register which is either > interpreted as an 8-bit binary number or as a BCD number. In > both cases, the number is interpreted relative to this RTC's > Epoch. The RTC's Epoch is initialized to 1900 on most systems > but on Alpha and MIPS it might also be initialized to 1952, > 1980, or 2000, depending on the value of an RTC register for > the year. With some RTCs, these operations can be used to > read or to set the RTC's Epoch, respectively. The third > ioctl's argument is an unsigned long * or an unsigned long, > respectively, and the value returned (or assigned) is the > Epoch. To set the RTC's Epoch the process must be privileged > (i.e., have the CAP_SYS_TIME capability). > > Implementation notes: > > All ioctls in this patch have a pointer to 'ulong' as their > third argument. That is the reason why corresponding parts > of added code in linux-user/syscall_defs.h contain special > handling related to 'ulong' type: they use 'abi_ulong' type > to make sure that ioctl's code is calculated correctly for > both 32-bit and 64-bit targets. Also, 'MK_PTR(TYPE_ULONG)' > is used for the similar reason in linux-user/ioctls.h. > Because ioctls RTC_IRQP_SET and RTC_EPOCH_SET are ioctls of > type IOW(writing type) that have unsigned long as their > third argument, a case statement for "TYPE_ULONG" was added > in the appropriate place for function "abi_ulong do_ioctl" > in file "syscall.c". There were no implemented ioctls of > type IOW with unsigned long as third argument before this > patch, which is the reason why this case statement was added > now for the first time. > > Signed-off-by: Filip Bozuta <filip.boz...@rt-rk.com> > --- > linux-user/ioctls.h | 4 ++++ > linux-user/syscall.c | 1 + > linux-user/syscall_defs.h | 4 ++++ > 3 files changed, 9 insertions(+) > ... > diff --git a/linux-user/syscall.c b/linux-user/syscall.c > index 74c3c08..c0b7314 100644 > --- a/linux-user/syscall.c > +++ b/linux-user/syscall.c > @@ -5175,6 +5175,7 @@ static abi_long do_ioctl(int fd, int cmd, abi_long arg) > break; > case TYPE_PTRVOID: > case TYPE_INT: > + case TYPE_ULONG: > ret = get_errno(safe_ioctl(fd, ie->host_cmd, arg)); > break; > case TYPE_PTR:
I think this can go in a separate patch as it's a fix. You should also add TYPE_LONG. Thanks, Laurent