]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
x86/mce/mcelog: Use xchg() to get and clear the flags
authorQiuxu Zhuo <qiuxu.zhuo@intel.com>
Fri, 25 Oct 2024 02:45:53 +0000 (10:45 +0800)
committerBorislav Petkov (AMD) <bp@alien8.de>
Mon, 28 Oct 2024 13:07:47 +0000 (14:07 +0100)
Using xchg() to atomically get and clear the MCE log buffer flags,
streamlines the code and reduces the text size by 20 bytes.

  $ size dev-mcelog.o.*

       text    data     bss     dec     hex filename
       3013     360     160    3533     dcd dev-mcelog.o.old
       2993     360     160    3513     db9 dev-mcelog.o.new

No functional changes intended.

Signed-off-by: Qiuxu Zhuo <qiuxu.zhuo@intel.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Reviewed-by: Tony Luck <tony.luck@intel.com>
Reviewed-by: Nikolay Borisov <nik.borisov@suse.com>
Reviewed-by: Sohil Mehta <sohil.mehta@intel.com>
Link: https://lore.kernel.org/r/20241025024602.24318-2-qiuxu.zhuo@intel.com
arch/x86/kernel/cpu/mce/dev-mcelog.c

index af44fd5dbd7c3938dfba382851d1d555ca810861..8d023239ce18e907a4757c47ee03c50323e1cd62 100644 (file)
@@ -264,15 +264,8 @@ static long mce_chrdev_ioctl(struct file *f, unsigned int cmd,
                return put_user(sizeof(struct mce), p);
        case MCE_GET_LOG_LEN:
                return put_user(mcelog->len, p);
-       case MCE_GETCLEAR_FLAGS: {
-               unsigned flags;
-
-               do {
-                       flags = mcelog->flags;
-               } while (cmpxchg(&mcelog->flags, flags, 0) != flags);
-
-               return put_user(flags, p);
-       }
+       case MCE_GETCLEAR_FLAGS:
+               return put_user(xchg(&mcelog->flags, 0), p);
        default:
                return -ENOTTY;
        }