break;
 
                /*
-                * BPF_STX XADD (atomic_add)
+                * BPF_STX ATOMIC (atomic ops)
                 */
-               case BPF_STX | BPF_XADD | BPF_W: /* *(u32 *)(dst + off) += src */
+               case BPF_STX | BPF_ATOMIC | BPF_W:
+                       if (imm != BPF_ADD) {
+                               pr_err_ratelimited("eBPF filter atomic op code %02x (@%d) unsupported\n",
+                                                  code, i);
+                               return -ENOTSUPP;
+                       }
+
+                       /* *(u32 *)(dst + off) += src */
+
                        bpf_set_seen_register(ctx, tmp_reg);
                        /* Get offset into TMP_REG */
                        EMIT(PPC_RAW_LI(tmp_reg, off));
                        PPC_BCC_SHORT(COND_NE, (ctx->idx - 3) * 4);
                        break;
 
-               case BPF_STX | BPF_XADD | BPF_DW: /* *(u64 *)(dst + off) += src */
+               case BPF_STX | BPF_ATOMIC | BPF_DW: /* *(u64 *)(dst + off) += src */
                        return -EOPNOTSUPP;
 
                /*