FreeBSD Bugzilla – Attachment 224686 Details for
Bug 255591
[linuxlator] qbittorrent kernel panics machine
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
workaround patch
futex-workaround.patch (text/plain), 1.97 KB, created by
pitwuu
on 2021-05-05 11:31:28 UTC
(
hide
)
Description:
workaround patch
Filename:
MIME Type:
Creator:
pitwuu
Created:
2021-05-05 11:31:28 UTC
Size:
1.97 KB
patch
obsolete
>diff --git a/sys/compat/linux/linux_futex.c b/sys/compat/linux/linux_futex.c >index 43ac318d2b51..6c115f566e19 100644 >--- a/sys/compat/linux/linux_futex.c >+++ b/sys/compat/linux/linux_futex.c >@@ -680,19 +680,67 @@ futex_atomic_op(struct thread *td, int encoded_op, uint32_t *uaddr) > > switch (op) { > case FUTEX_OP_SET: >- ret = futex_xchgl(oparg, uaddr, &oldval); >+// ret = futex_xchgl(oparg, uaddr, &oldval); >+ >+ ret = fueword32(uaddr, &oldval); >+ if (ret != 0) >+ return (ret); >+ oldval = atomic_swap_int(&oldval, oparg); >+ ret = suword32(uaddr, oldval); >+ if (ret != 0) >+ return (ret); >+ > break; > case FUTEX_OP_ADD: >- ret = futex_addl(oparg, uaddr, &oldval); >+// ret = futex_addl(oparg, uaddr, &oldval); >+ >+ ret = fueword32(uaddr, &oldval); >+ if (ret != 0) >+ return (ret); >+ oldval = atomic_fetchadd_int(&oldval, oparg); >+ ret = suword32(uaddr, oldval); >+ if (ret != 0) >+ return (ret); >+ > break; > case FUTEX_OP_OR: >- ret = futex_orl(oparg, uaddr, &oldval); >+// ret = futex_orl(oparg, uaddr, &oldval); >+ >+ ret = fueword32(uaddr, &oldval); >+ if (ret != 0) >+ return (ret); >+ while (!atomic_fcmpset_int(&oldval, &oldval, oldval | oparg)) >+ ; >+ ret = suword32(uaddr, oldval); >+ if (ret != 0) >+ return (ret); >+ > break; > case FUTEX_OP_ANDN: >- ret = futex_andl(~oparg, uaddr, &oldval); >+// ret = futex_andl(~oparg, uaddr, &oldval); >+ >+ ret = fueword32(uaddr, &oldval); >+ if (ret != 0) >+ return (ret); >+ while (!atomic_fcmpset_int(&oldval, &oldval, oldval & (~oparg))) >+ ; >+ ret = suword32(uaddr, oldval); >+ if (ret != 0) >+ return (ret); >+ > break; > case FUTEX_OP_XOR: >- ret = futex_xorl(oparg, uaddr, &oldval); >+// ret = futex_xorl(oparg, uaddr, &oldval); >+ >+ ret = fueword32(uaddr, &oldval); >+ if (ret != 0) >+ return (ret); >+ while (!atomic_fcmpset_int(&oldval, &oldval, oldval ^ oparg)) >+ ; >+ ret = suword32(uaddr, oldval); >+ if (ret != 0) >+ return (ret); >+ > break; > default: > LIN_SDT_PROBE1(futex, futex_atomic_op, unimplemented_op, op);
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 255591
:
224664
| 224686 |
224945