[Qemu-devel] [PATCH] linux-user/syscall.c: Notice about lock bitmask translation for fcntl
For fcntl, it always needs to notice about it, just like do_fcntl() has done, or it will cause issue (e.g. alpha host run i386 guest). Signed-off-by: Chen Gang --- linux-user/syscall.c | 18 -- 1 files changed, 12 insertions(+), 6 deletions(-) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index 0f8adeb..1a60e6f 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -9007,7 +9007,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, if (((CPUARMState *)cpu_env)->eabi) { if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1)) goto efault; -fl.l_type = tswap16(target_efl->l_type); +fl.l_type = target_to_host_bitmask(tswap16(target_fl->l_type), + flock_tbl); fl.l_whence = tswap16(target_efl->l_whence); fl.l_start = tswap64(target_efl->l_start); fl.l_len = tswap64(target_efl->l_len); @@ -9018,7 +9019,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, { if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1)) goto efault; -fl.l_type = tswap16(target_fl->l_type); +fl.l_type = target_to_host_bitmask(tswap16(target_fl->l_type), + flock_tbl); fl.l_whence = tswap16(target_fl->l_whence); fl.l_start = tswap64(target_fl->l_start); fl.l_len = tswap64(target_fl->l_len); @@ -9031,7 +9033,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, if (((CPUARMState *)cpu_env)->eabi) { if (!lock_user_struct(VERIFY_WRITE, target_efl, arg3, 0)) goto efault; -target_efl->l_type = tswap16(fl.l_type); +target_efl->l_type = host_to_target_bitmask( + tswap16(fl.l_type), flock_tbl); target_efl->l_whence = tswap16(fl.l_whence); target_efl->l_start = tswap64(fl.l_start); target_efl->l_len = tswap64(fl.l_len); @@ -9042,7 +9045,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, { if (!lock_user_struct(VERIFY_WRITE, target_fl, arg3, 0)) goto efault; -target_fl->l_type = tswap16(fl.l_type); +target_fl->l_type = host_to_target_bitmask( + tswap16(fl.l_type), flock_tbl); target_fl->l_whence = tswap16(fl.l_whence); target_fl->l_start = tswap64(fl.l_start); target_fl->l_len = tswap64(fl.l_len); @@ -9058,7 +9062,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, if (((CPUARMState *)cpu_env)->eabi) { if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1)) goto efault; -fl.l_type = tswap16(target_efl->l_type); +fl.l_type = target_to_host_bitmask(tswap16(target_fl->l_type), + flock_tbl); fl.l_whence = tswap16(target_efl->l_whence); fl.l_start = tswap64(target_efl->l_start); fl.l_len = tswap64(target_efl->l_len); @@ -9069,7 +9074,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, { if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1)) goto efault; -fl.l_type = tswap16(target_fl->l_type); +fl.l_type = target_to_host_bitmask(tswap16(target_fl->l_type), + flock_tbl); fl.l_whence = tswap16(target_fl->l_whence); fl.l_start = tswap64(target_fl->l_start); fl.l_len = tswap64(target_fl->l_len); -- 1.7.3.4
Re: [Qemu-devel] [PATCH] linux-user/syscall.c: Notice about lock bitmask translation for fcntl
I found this issue during my working time, it is about sw_64 (almost the same as alpha) host running i386 wine programs. I also found another issue, but I am not quite sure whether it is worth enough for our upstream: The related fix patch is below, which will let the initialization slower, but for most archs, they have no this issue. linux-user/mmap.c: Always zero MAP_ANONYMOUS memory in target_mmap() In some architectures, they have no policy to zero MAP_ANONYMOUS memory, which will cause issue for qemu target_mmap. Signed-off-by: Chen Gang diff --git a/linux-user/mmap.c b/linux-user/mmap.c index 7b459d5..9c9152d 100644 --- a/linux-user/mmap.c +++ b/linux-user/mmap.c @@ -567,6 +567,10 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int prot, printf("\n"); #endif tb_invalidate_phys_range(start, start + len); +if ((prot & PROT_WRITE) && (flags & MAP_ANONYMOUS) +&& ((flags & MAP_PRIVATE) || (fd == -1))) { +memset(g2h(start), 0, len); +} mmap_unlock(); return start; fail: Thanks. On 2015年12月18日 14:26, Chen Gang wrote: > > For fcntl, it always needs to notice about it, just like do_fcntl() has > done, or it will cause issue (e.g. alpha host run i386 guest). > > Signed-off-by: Chen Gang > --- > linux-user/syscall.c | 18 -- > 1 files changed, 12 insertions(+), 6 deletions(-) > > diff --git a/linux-user/syscall.c b/linux-user/syscall.c > index 0f8adeb..1a60e6f 100644 > --- a/linux-user/syscall.c > +++ b/linux-user/syscall.c > @@ -9007,7 +9007,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long > arg1, > if (((CPUARMState *)cpu_env)->eabi) { > if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1)) > goto efault; > -fl.l_type = tswap16(target_efl->l_type); > +fl.l_type = > target_to_host_bitmask(tswap16(target_fl->l_type), > + flock_tbl); > fl.l_whence = tswap16(target_efl->l_whence); > fl.l_start = tswap64(target_efl->l_start); > fl.l_len = tswap64(target_efl->l_len); > @@ -9018,7 +9019,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long > arg1, > { > if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1)) > goto efault; > -fl.l_type = tswap16(target_fl->l_type); > +fl.l_type = > target_to_host_bitmask(tswap16(target_fl->l_type), > + flock_tbl); > fl.l_whence = tswap16(target_fl->l_whence); > fl.l_start = tswap64(target_fl->l_start); > fl.l_len = tswap64(target_fl->l_len); > @@ -9031,7 +9033,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long > arg1, > if (((CPUARMState *)cpu_env)->eabi) { > if (!lock_user_struct(VERIFY_WRITE, target_efl, arg3, > 0)) > goto efault; > -target_efl->l_type = tswap16(fl.l_type); > +target_efl->l_type = host_to_target_bitmask( > + tswap16(fl.l_type), > flock_tbl); > target_efl->l_whence = tswap16(fl.l_whence); > target_efl->l_start = tswap64(fl.l_start); > target_efl->l_len = tswap64(fl.l_len); > @@ -9042,7 +9045,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long > arg1, > { > if (!lock_user_struct(VERIFY_WRITE, target_fl, arg3, 0)) > goto efault; > -target_fl->l_type = tswap16(fl.l_type); > +target_fl->l_type = host_to_target_bitmask( > + tswap16(fl.l_type), > flock_tbl); > target_fl->l_whence = tswap16(fl.l_whence); > target_fl->l_start = tswap64(fl.l_start); > target_fl->l_len = tswap64(fl.l_len); > @@ -9058,7 +9062,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long > arg1, > if (((CPUARMState *)cpu_env)->eabi) { > if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1)) > goto efault; > -fl.l_type = tswap16(target_efl->l_type); > +fl.l_type = > target_to_host_bitmask(tswap16(target_fl->l_type), > + flock_tbl); > fl.l_whence = tswap16(target_efl->l_whence); > fl.l_start = tswap64(target_efl->l_start); > fl.l_len = tswap64(target_efl->l_len); > @@ -9069,7 +9074,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long > arg1, > { > if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1)) > goto efault; > -
Re: [Qemu-devel] [PATCH] linux-user/syscall.c: Notice about lock bitmask translation for fcntl
Le 18/12/2015 07:26, Chen Gang a écrit : > > For fcntl, it always needs to notice about it, just like do_fcntl() has > done, or it will cause issue (e.g. alpha host run i386 guest). > > Signed-off-by: Chen Gang > --- > linux-user/syscall.c | 18 -- > 1 files changed, 12 insertions(+), 6 deletions(-) > > diff --git a/linux-user/syscall.c b/linux-user/syscall.c > index 0f8adeb..1a60e6f 100644 > --- a/linux-user/syscall.c > +++ b/linux-user/syscall.c > @@ -9007,7 +9007,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long > arg1, > if (((CPUARMState *)cpu_env)->eabi) { > if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1)) > goto efault; > -fl.l_type = tswap16(target_efl->l_type); > +fl.l_type = > target_to_host_bitmask(tswap16(target_fl->l_type), > + flock_tbl); > fl.l_whence = tswap16(target_efl->l_whence); > fl.l_start = tswap64(target_efl->l_start); > fl.l_len = tswap64(target_efl->l_len); > @@ -9018,7 +9019,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long > arg1, > { > if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1)) > goto efault; > -fl.l_type = tswap16(target_fl->l_type); > +fl.l_type = > target_to_host_bitmask(tswap16(target_fl->l_type), > + flock_tbl); > fl.l_whence = tswap16(target_fl->l_whence); > fl.l_start = tswap64(target_fl->l_start); > fl.l_len = tswap64(target_fl->l_len); > @@ -9031,7 +9033,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long > arg1, > if (((CPUARMState *)cpu_env)->eabi) { > if (!lock_user_struct(VERIFY_WRITE, target_efl, arg3, > 0)) > goto efault; > -target_efl->l_type = tswap16(fl.l_type); > +target_efl->l_type = host_to_target_bitmask( > + tswap16(fl.l_type), > flock_tbl); > target_efl->l_whence = tswap16(fl.l_whence); > target_efl->l_start = tswap64(fl.l_start); > target_efl->l_len = tswap64(fl.l_len); > @@ -9042,7 +9045,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long > arg1, > { > if (!lock_user_struct(VERIFY_WRITE, target_fl, arg3, 0)) > goto efault; > -target_fl->l_type = tswap16(fl.l_type); > +target_fl->l_type = host_to_target_bitmask( > + tswap16(fl.l_type), > flock_tbl); > target_fl->l_whence = tswap16(fl.l_whence); > target_fl->l_start = tswap64(fl.l_start); > target_fl->l_len = tswap64(fl.l_len); > @@ -9058,7 +9062,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long > arg1, > if (((CPUARMState *)cpu_env)->eabi) { > if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1)) > goto efault; > -fl.l_type = tswap16(target_efl->l_type); > +fl.l_type = > target_to_host_bitmask(tswap16(target_fl->l_type), > + flock_tbl); > fl.l_whence = tswap16(target_efl->l_whence); > fl.l_start = tswap64(target_efl->l_start); > fl.l_len = tswap64(target_efl->l_len); > @@ -9069,7 +9074,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long > arg1, > { > if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1)) > goto efault; > -fl.l_type = tswap16(target_fl->l_type); > +fl.l_type = > target_to_host_bitmask(tswap16(target_fl->l_type), > + flock_tbl); > fl.l_whence = tswap16(target_fl->l_whence); > fl.l_start = tswap64(target_fl->l_start); > fl.l_len = tswap64(target_fl->l_len); > This patch looks good to me, except that script/checkpatch.pl complains about "DOS line ending" and "line over 80 characters". Reviewed-by: Laurent Vivier
Re: [Qemu-devel] [PATCH] linux-user/syscall.c: Notice about lock bitmask translation for fcntl
Le 18/12/2015 07:51, Chen Gang a écrit : > > I found this issue during my working time, it is about sw_64 (almost the > same as alpha) host running i386 wine programs. > > I also found another issue, but I am not quite sure whether it is worth > enough for our upstream: The related fix patch is below, which will let > the initialization slower, but for most archs, they have no this issue. > > linux-user/mmap.c: Always zero MAP_ANONYMOUS memory in target_mmap() > > In some architectures, they have no policy to zero MAP_ANONYMOUS memory, > which will cause issue for qemu target_mmap. > > Signed-off-by: Chen Gang > > diff --git a/linux-user/mmap.c b/linux-user/mmap.c > index 7b459d5..9c9152d 100644 > --- a/linux-user/mmap.c > +++ b/linux-user/mmap.c > @@ -567,6 +567,10 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, int > prot, > printf("\n"); > #endif > tb_invalidate_phys_range(start, start + len); > +if ((prot & PROT_WRITE) && (flags & MAP_ANONYMOUS) > +&& ((flags & MAP_PRIVATE) || (fd == -1))) { > +memset(g2h(start), 0, len); > +} IMHO, their kernel needs a fix, mmap(2): MAP_ANONYMOUS The mapping is not backed by any file; its contents are initial‐ ized to zero. > mmap_unlock(); > return start; > fail: > > > Thanks. Laurent
Re: [Qemu-devel] [PATCH] linux-user/syscall.c: Notice about lock bitmask translation for fcntl
On 2015年12月18日 17:41, Laurent Vivier wrote: > > > Le 18/12/2015 07:51, Chen Gang a écrit : >> >> I found this issue during my working time, it is about sw_64 (almost the >> same as alpha) host running i386 wine programs. >> >> I also found another issue, but I am not quite sure whether it is worth >> enough for our upstream: The related fix patch is below, which will let >> the initialization slower, but for most archs, they have no this issue. >> >> linux-user/mmap.c: Always zero MAP_ANONYMOUS memory in target_mmap() >> >> In some architectures, they have no policy to zero MAP_ANONYMOUS memory, >> which will cause issue for qemu target_mmap. >> >> Signed-off-by: Chen Gang >> >> diff --git a/linux-user/mmap.c b/linux-user/mmap.c >> index 7b459d5..9c9152d 100644 >> --- a/linux-user/mmap.c >> +++ b/linux-user/mmap.c >> @@ -567,6 +567,10 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, >> int prot, >> printf("\n"); >> #endif >> tb_invalidate_phys_range(start, start + len); >> +if ((prot & PROT_WRITE) && (flags & MAP_ANONYMOUS) >> +&& ((flags & MAP_PRIVATE) || (fd == -1))) { >> +memset(g2h(start), 0, len); >> +} > > IMHO, their kernel needs a fix, mmap(2): > > MAP_ANONYMOUS > The mapping is not backed by any file; its contents are initial‐ > ized to zero. > OK, Thanks. -- Chen Gang (陈刚) Open, share, and attitude like air, water, and life which God blessed
Re: [Qemu-devel] [PATCH] linux-user/syscall.c: Notice about lock bitmask translation for fcntl
On 12/18/15 17:37, Laurent Vivier wrote: > > Le 18/12/2015 07:26, Chen Gang a écrit : >> >> For fcntl, it always needs to notice about it, just like do_fcntl() has >> done, or it will cause issue (e.g. alpha host run i386 guest). >> >> Signed-off-by: Chen Gang >> --- >> linux-user/syscall.c | 18 -- >> 1 files changed, 12 insertions(+), 6 deletions(-) >> >> diff --git a/linux-user/syscall.c b/linux-user/syscall.c >> index 0f8adeb..1a60e6f 100644 >> --- a/linux-user/syscall.c >> +++ b/linux-user/syscall.c >> @@ -9007,7 +9007,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long >> arg1, >> if (((CPUARMState *)cpu_env)->eabi) { >> if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1)) >> goto efault; >> -fl.l_type = tswap16(target_efl->l_type); >> +fl.l_type = >> target_to_host_bitmask(tswap16(target_fl->l_type), >> + flock_tbl); >> fl.l_whence = tswap16(target_efl->l_whence); >> fl.l_start = tswap64(target_efl->l_start); >> fl.l_len = tswap64(target_efl->l_len); >> @@ -9018,7 +9019,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long >> arg1, >> { >> if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1)) >> goto efault; >> -fl.l_type = tswap16(target_fl->l_type); >> +fl.l_type = >> target_to_host_bitmask(tswap16(target_fl->l_type), >> + flock_tbl); >> fl.l_whence = tswap16(target_fl->l_whence); >> fl.l_start = tswap64(target_fl->l_start); >> fl.l_len = tswap64(target_fl->l_len); >> @@ -9031,7 +9033,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long >> arg1, >> if (((CPUARMState *)cpu_env)->eabi) { >> if (!lock_user_struct(VERIFY_WRITE, target_efl, arg3, >> 0)) >> goto efault; >> -target_efl->l_type = tswap16(fl.l_type); >> +target_efl->l_type = host_to_target_bitmask( >> + tswap16(fl.l_type), >> flock_tbl); >> target_efl->l_whence = tswap16(fl.l_whence); >> target_efl->l_start = tswap64(fl.l_start); >> target_efl->l_len = tswap64(fl.l_len); >> @@ -9042,7 +9045,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long >> arg1, >> { >> if (!lock_user_struct(VERIFY_WRITE, target_fl, arg3, >> 0)) >> goto efault; >> -target_fl->l_type = tswap16(fl.l_type); >> +target_fl->l_type = host_to_target_bitmask( >> + tswap16(fl.l_type), >> flock_tbl); >> target_fl->l_whence = tswap16(fl.l_whence); >> target_fl->l_start = tswap64(fl.l_start); >> target_fl->l_len = tswap64(fl.l_len); >> @@ -9058,7 +9062,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long >> arg1, >> if (((CPUARMState *)cpu_env)->eabi) { >> if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1)) >> goto efault; >> -fl.l_type = tswap16(target_efl->l_type); >> +fl.l_type = >> target_to_host_bitmask(tswap16(target_fl->l_type), >> + flock_tbl); >> fl.l_whence = tswap16(target_efl->l_whence); >> fl.l_start = tswap64(target_efl->l_start); >> fl.l_len = tswap64(target_efl->l_len); >> @@ -9069,7 +9074,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long >> arg1, >> { >> if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1)) >> goto efault; >> -fl.l_type = tswap16(target_fl->l_type); >> +fl.l_type = >> target_to_host_bitmask(tswap16(target_fl->l_type), >> + flock_tbl); >> fl.l_whence = tswap16(target_fl->l_whence); >> fl.l_start = tswap64(target_fl->l_start); >> fl.l_len = tswap64(target_fl->l_len); >> > > This patch looks good to me, except that script/checkpatch.pl complains > about "DOS line ending" and "line over 80 characters". > I did not get any script/checkpatch.pl complains, originally. Does my email client configuration is incorrect, then cause incorrect mail format? I guess not. The related reason is below. - I copy your full reply mail contents to a new file (diff.patch). - Remove all '> ' in vi editor (1,% s/^> //g) (so get the original patch contents). - ./script/checkpatch.pl diff.patch, it has no any complains. > Reviewed-
Re: [Qemu-devel] [PATCH] linux-user/syscall.c: Notice about lock bitmask translation for fcntl
Le 18/12/2015 22:40, Chen Gang a écrit : > > On 12/18/15 17:37, Laurent Vivier wrote: >> >> Le 18/12/2015 07:26, Chen Gang a écrit : >>> >>> For fcntl, it always needs to notice about it, just like do_fcntl() has >>> done, or it will cause issue (e.g. alpha host run i386 guest). >>> >>> Signed-off-by: Chen Gang >>> --- >>> linux-user/syscall.c | 18 -- >>> 1 files changed, 12 insertions(+), 6 deletions(-) >>> >>> diff --git a/linux-user/syscall.c b/linux-user/syscall.c >>> index 0f8adeb..1a60e6f 100644 >>> --- a/linux-user/syscall.c >>> +++ b/linux-user/syscall.c >>> @@ -9007,7 +9007,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long >>> arg1, >>> if (((CPUARMState *)cpu_env)->eabi) { >>> if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1)) >>> goto efault; >>> -fl.l_type = tswap16(target_efl->l_type); >>> +fl.l_type = >>> target_to_host_bitmask(tswap16(target_fl->l_type), >>> + flock_tbl); >>> fl.l_whence = tswap16(target_efl->l_whence); >>> fl.l_start = tswap64(target_efl->l_start); >>> fl.l_len = tswap64(target_efl->l_len); >>> @@ -9018,7 +9019,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long >>> arg1, >>> { >>> if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1)) >>> goto efault; >>> -fl.l_type = tswap16(target_fl->l_type); >>> +fl.l_type = >>> target_to_host_bitmask(tswap16(target_fl->l_type), >>> + flock_tbl); >>> fl.l_whence = tswap16(target_fl->l_whence); >>> fl.l_start = tswap64(target_fl->l_start); >>> fl.l_len = tswap64(target_fl->l_len); >>> @@ -9031,7 +9033,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long >>> arg1, >>> if (((CPUARMState *)cpu_env)->eabi) { >>> if (!lock_user_struct(VERIFY_WRITE, target_efl, arg3, >>> 0)) >>> goto efault; >>> -target_efl->l_type = tswap16(fl.l_type); >>> +target_efl->l_type = host_to_target_bitmask( >>> + tswap16(fl.l_type), >>> flock_tbl); >>> target_efl->l_whence = tswap16(fl.l_whence); >>> target_efl->l_start = tswap64(fl.l_start); >>> target_efl->l_len = tswap64(fl.l_len); >>> @@ -9042,7 +9045,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long >>> arg1, >>> { >>> if (!lock_user_struct(VERIFY_WRITE, target_fl, arg3, >>> 0)) >>> goto efault; >>> -target_fl->l_type = tswap16(fl.l_type); >>> +target_fl->l_type = host_to_target_bitmask( >>> + tswap16(fl.l_type), >>> flock_tbl); >>> target_fl->l_whence = tswap16(fl.l_whence); >>> target_fl->l_start = tswap64(fl.l_start); >>> target_fl->l_len = tswap64(fl.l_len); >>> @@ -9058,7 +9062,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long >>> arg1, >>> if (((CPUARMState *)cpu_env)->eabi) { >>> if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1)) >>> goto efault; >>> -fl.l_type = tswap16(target_efl->l_type); >>> +fl.l_type = >>> target_to_host_bitmask(tswap16(target_fl->l_type), >>> + flock_tbl); >>> fl.l_whence = tswap16(target_efl->l_whence); >>> fl.l_start = tswap64(target_efl->l_start); >>> fl.l_len = tswap64(target_efl->l_len); >>> @@ -9069,7 +9074,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long >>> arg1, >>> { >>> if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1)) >>> goto efault; >>> -fl.l_type = tswap16(target_fl->l_type); >>> +fl.l_type = >>> target_to_host_bitmask(tswap16(target_fl->l_type), >>> + flock_tbl); >>> fl.l_whence = tswap16(target_fl->l_whence); >>> fl.l_start = tswap64(target_fl->l_start); >>> fl.l_len = tswap64(target_fl->l_len); >>> >> >> This patch looks good to me, except that script/checkpatch.pl complains >> about "DOS line ending" and "line over 80 characters". >> > > I did not get any script/checkpatch.pl complains, originally. > > Does my email client configuration is incorrect, then cause incorrect > mail format? I guess not. The related reason is below. > > - I copy your full reply mail contents to a new file (diff.patch). If you copy,
Re: [Qemu-devel] [PATCH] linux-user/syscall.c: Notice about lock bitmask translation for fcntl
On 12/19/15 05:58, Laurent Vivier wrote: > > Le 18/12/2015 22:40, Chen Gang a écrit : >> [...] >> I did not get any script/checkpatch.pl complains, originally. >> >> Does my email client configuration is incorrect, then cause incorrect >> mail format? I guess not. The related reason is below. >> >> - I copy your full reply mail contents to a new file (diff.patch). > > If you copy, you loose the special characters. I do a "Save as". > >> >> - Remove all '> ' in vi editor (1,% s/^> //g) (so get the original >>patch contents). >> >> - ./script/checkpatch.pl diff.patch, it has no any complains. > > If I run "file" on the saved file, I have: > > $ file orig.eml > orig.eml: SMTP mail, ASCII text, with CRLF line terminators > > I can convert it with "tr": > > $ tr "\r" "\n" < orig.eml > new.eml > > $ file new.eml > new.eml: SMTP mail, ASCII text > > $ ./scripts/checkpatch.pl new.eml > total: 0 errors, 0 warnings, 54 lines checked > > new.eml has no obvious style problems and is ready for submission. > > Laurent > OK, thank you very much. I shall config my email client again to notice about it. Thanks. -- Chen Gang Open, share, and attitude like air, water, and life which God blessed.
Re: [Qemu-devel] [PATCH] linux-user/syscall.c: Notice about lock bitmask translation for fcntl
Le 18/12/2015 23:12, Chen Gang a écrit : > > On 12/19/15 05:58, Laurent Vivier wrote: >> >> Le 18/12/2015 22:40, Chen Gang a écrit : >>> > > [...] > >>> I did not get any script/checkpatch.pl complains, originally. >>> >>> Does my email client configuration is incorrect, then cause incorrect >>> mail format? I guess not. The related reason is below. >>> >>> - I copy your full reply mail contents to a new file (diff.patch). >> >> If you copy, you loose the special characters. I do a "Save as". >> >>> >>> - Remove all '> ' in vi editor (1,% s/^> //g) (so get the original >>>patch contents). >>> >>> - ./script/checkpatch.pl diff.patch, it has no any complains. >> >> If I run "file" on the saved file, I have: >> >> $ file orig.eml >> orig.eml: SMTP mail, ASCII text, with CRLF line terminators >> >> I can convert it with "tr": >> >> $ tr "\r" "\n" < orig.eml > new.eml >> >> $ file new.eml >> new.eml: SMTP mail, ASCII text >> >> $ ./scripts/checkpatch.pl new.eml >> total: 0 errors, 0 warnings, 54 lines checked >> >> new.eml has no obvious style problems and is ready for submission. >> >> Laurent >> > > OK, thank you very much. I shall config my email client again to notice > about it. You should not use your email client to send patches, you should use "git send-email": http://wiki.qemu.org/Contribute/SubmitAPatch Laurent
Re: [Qemu-devel] [PATCH] linux-user/syscall.c: Notice about lock bitmask translation for fcntl
On 12/19/15 06:15, Laurent Vivier wrote: > > Le 18/12/2015 23:12, Chen Gang a écrit : >> [...] >> >> OK, thank you very much. I shall config my email client again to notice >> about it. > > You should not use your email client to send patches, you should use > "git send-email": > > http://wiki.qemu.org/Contribute/SubmitAPatch > OK, thanks. -- Chen Gang Open, share, and attitude like air, water, and life which God blessed
Re: [Qemu-devel] [PATCH] linux-user/syscall.c: Notice about lock bitmask translation for fcntl
On 2015年12月18日 18:47, Chen Gang wrote: > > On 2015年12月18日 17:41, Laurent Vivier wrote: >> >> Le 18/12/2015 07:51, Chen Gang a écrit : [...] >>> >>> +++ b/linux-user/mmap.c >>> @@ -567,6 +567,10 @@ abi_long target_mmap(abi_ulong start, abi_ulong len, >>> int prot, >>> printf("\n"); >>> #endif >>> tb_invalidate_phys_range(start, start + len); >>> +if ((prot & PROT_WRITE) && (flags & MAP_ANONYMOUS) >>> +&& ((flags & MAP_PRIVATE) || (fd == -1))) { >>> +memset(g2h(start), 0, len); >>> +} >> >> IMHO, their kernel needs a fix, mmap(2): >> >> MAP_ANONYMOUS >> The mapping is not backed by any file; its contents are initial‐ >> ized to zero. >> Oh, sorry, after check again, it is not kernel's issue: mmap() will always zero the ANONYMOUS memory for kernel 3.8 in sw_64 arch. It is still our qemu's issue in mmap_frag (do not zero ANONYMOUS memory fragments), so I sent patch v2 for it, please help check. Thanks. > > OK, Thanks. > > -- Chen Gang (陈刚) Open, share, and attitude like air, water, and life which God blessed