This converts from seq_buf to printbuf. We're using printbuf in external
buffer mode, so it's a direct conversion, aside from some trivial
refactoring in cpu_show_meltdown() to make the code more consistent.

Signed-off-by: Kent Overstreet <kent.overstr...@gmail.com>
Cc: linuxppc-dev@lists.ozlabs.org
---
 arch/powerpc/kernel/process.c             | 16 +++--
 arch/powerpc/kernel/security.c            | 75 ++++++++++-------------
 arch/powerpc/platforms/pseries/papr_scm.c | 34 +++++-----
 3 files changed, 57 insertions(+), 68 deletions(-)

diff --git a/arch/powerpc/kernel/process.c b/arch/powerpc/kernel/process.c
index 984813a4d5..f6f7804516 100644
--- a/arch/powerpc/kernel/process.c
+++ b/arch/powerpc/kernel/process.c
@@ -39,7 +39,7 @@
 #include <linux/uaccess.h>
 #include <linux/elf-randomize.h>
 #include <linux/pkeys.h>
-#include <linux/seq_buf.h>
+#include <linux/printbuf.h>
 
 #include <asm/interrupt.h>
 #include <asm/io.h>
@@ -1399,32 +1399,30 @@ void show_user_instructions(struct pt_regs *regs)
 {
        unsigned long pc;
        int n = NR_INSN_TO_PRINT;
-       struct seq_buf s;
        char buf[96]; /* enough for 8 times 9 + 2 chars */
+       struct printbuf s = PRINTBUF_EXTERN(buf, sizeof(buf));
 
        pc = regs->nip - (NR_INSN_TO_PRINT * 3 / 4 * sizeof(int));
 
-       seq_buf_init(&s, buf, sizeof(buf));
-
        while (n) {
                int i;
 
-               seq_buf_clear(&s);
+               printbuf_reset(&s);
 
                for (i = 0; i < 8 && n; i++, n--, pc += sizeof(int)) {
                        int instr;
 
                        if (copy_from_user_nofault(&instr, (void __user *)pc,
                                        sizeof(instr))) {
-                               seq_buf_printf(&s, "XXXXXXXX ");
+                               pr_buf(&s, "XXXXXXXX ");
                                continue;
                        }
-                       seq_buf_printf(&s, regs->nip == pc ? "<%08x> " : "%08x 
", instr);
+                       pr_buf(&s, regs->nip == pc ? "<%08x> " : "%08x ", 
instr);
                }
 
-               if (!seq_buf_has_overflowed(&s))
+               if (printbuf_remaining(&s))
                        pr_info("%s[%d]: code: %s\n", current->comm,
-                               current->pid, s.buffer);
+                               current->pid, s.buf);
        }
 }
 
diff --git a/arch/powerpc/kernel/security.c b/arch/powerpc/kernel/security.c
index e159d4093d..5c9bad138c 100644
--- a/arch/powerpc/kernel/security.c
+++ b/arch/powerpc/kernel/security.c
@@ -10,7 +10,7 @@
 #include <linux/memblock.h>
 #include <linux/nospec.h>
 #include <linux/prctl.h>
-#include <linux/seq_buf.h>
+#include <linux/printbuf.h>
 #include <linux/debugfs.h>
 
 #include <asm/asm-prototypes.h>
@@ -144,31 +144,28 @@ void __init setup_spectre_v2(void)
 #ifdef CONFIG_PPC_BOOK3S_64
 ssize_t cpu_show_meltdown(struct device *dev, struct device_attribute *attr, 
char *buf)
 {
+       struct printbuf s = PRINTBUF_EXTERN(buf, PAGE_SIZE);
        bool thread_priv;
 
        thread_priv = security_ftr_enabled(SEC_FTR_L1D_THREAD_PRIV);
 
        if (rfi_flush) {
-               struct seq_buf s;
-               seq_buf_init(&s, buf, PAGE_SIZE - 1);
 
-               seq_buf_printf(&s, "Mitigation: RFI Flush");
+               pr_buf(&s, "Mitigation: RFI Flush");
                if (thread_priv)
-                       seq_buf_printf(&s, ", L1D private per thread");
-
-               seq_buf_printf(&s, "\n");
-
-               return s.len;
+                       pr_buf(&s, ", L1D private per thread");
+
+               pr_buf(&s, "\n");
+       } else if (thread_priv) {
+               pr_buf(&s, "Vulnerable: L1D private per thread\n");
+       } else if (!security_ftr_enabled(SEC_FTR_L1D_FLUSH_HV) &&
+                  !security_ftr_enabled(SEC_FTR_L1D_FLUSH_PR)) {
+               pr_buf(&s, "Not affected\n");
+       } else {
+               pr_buf(&s, "Vulnerable\n");
        }
 
-       if (thread_priv)
-               return sprintf(buf, "Vulnerable: L1D private per thread\n");
-
-       if (!security_ftr_enabled(SEC_FTR_L1D_FLUSH_HV) &&
-           !security_ftr_enabled(SEC_FTR_L1D_FLUSH_PR))
-               return sprintf(buf, "Not affected\n");
-
-       return sprintf(buf, "Vulnerable\n");
+       return printbuf_written(&s);
 }
 
 ssize_t cpu_show_l1tf(struct device *dev, struct device_attribute *attr, char 
*buf)
@@ -179,70 +176,66 @@ ssize_t cpu_show_l1tf(struct device *dev, struct 
device_attribute *attr, char *b
 
 ssize_t cpu_show_spectre_v1(struct device *dev, struct device_attribute *attr, 
char *buf)
 {
-       struct seq_buf s;
-
-       seq_buf_init(&s, buf, PAGE_SIZE - 1);
+       struct printbuf s = PRINTBUF_EXTERN(buf, PAGE_SIZE);
 
        if (security_ftr_enabled(SEC_FTR_BNDS_CHK_SPEC_BAR)) {
                if (barrier_nospec_enabled)
-                       seq_buf_printf(&s, "Mitigation: __user pointer 
sanitization");
+                       pr_buf(&s, "Mitigation: __user pointer sanitization");
                else
-                       seq_buf_printf(&s, "Vulnerable");
+                       pr_buf(&s, "Vulnerable");
 
                if (security_ftr_enabled(SEC_FTR_SPEC_BAR_ORI31))
-                       seq_buf_printf(&s, ", ori31 speculation barrier 
enabled");
+                       pr_buf(&s, ", ori31 speculation barrier enabled");
 
-               seq_buf_printf(&s, "\n");
+               pr_buf(&s, "\n");
        } else
-               seq_buf_printf(&s, "Not affected\n");
+               pr_buf(&s, "Not affected\n");
 
-       return s.len;
+       return printbuf_written(&s);
 }
 
 ssize_t cpu_show_spectre_v2(struct device *dev, struct device_attribute *attr, 
char *buf)
 {
-       struct seq_buf s;
+       struct printbuf s = PRINTBUF_EXTERN(buf, PAGE_SIZE);
        bool bcs, ccd;
 
-       seq_buf_init(&s, buf, PAGE_SIZE - 1);
-
        bcs = security_ftr_enabled(SEC_FTR_BCCTRL_SERIALISED);
        ccd = security_ftr_enabled(SEC_FTR_COUNT_CACHE_DISABLED);
 
        if (bcs || ccd) {
-               seq_buf_printf(&s, "Mitigation: ");
+               pr_buf(&s, "Mitigation: ");
 
                if (bcs)
-                       seq_buf_printf(&s, "Indirect branch serialisation 
(kernel only)");
+                       pr_buf(&s, "Indirect branch serialisation (kernel 
only)");
 
                if (bcs && ccd)
-                       seq_buf_printf(&s, ", ");
+                       pr_buf(&s, ", ");
 
                if (ccd)
-                       seq_buf_printf(&s, "Indirect branch cache disabled");
+                       pr_buf(&s, "Indirect branch cache disabled");
 
        } else if (count_cache_flush_type != BRANCH_CACHE_FLUSH_NONE) {
-               seq_buf_printf(&s, "Mitigation: Software count cache flush");
+               pr_buf(&s, "Mitigation: Software count cache flush");
 
                if (count_cache_flush_type == BRANCH_CACHE_FLUSH_HW)
-                       seq_buf_printf(&s, " (hardware accelerated)");
+                       pr_buf(&s, " (hardware accelerated)");
 
        } else if (btb_flush_enabled) {
-               seq_buf_printf(&s, "Mitigation: Branch predictor state flush");
+               pr_buf(&s, "Mitigation: Branch predictor state flush");
        } else {
-               seq_buf_printf(&s, "Vulnerable");
+               pr_buf(&s, "Vulnerable");
        }
 
        if (bcs || ccd || count_cache_flush_type != BRANCH_CACHE_FLUSH_NONE) {
                if (link_stack_flush_type != BRANCH_CACHE_FLUSH_NONE)
-                       seq_buf_printf(&s, ", Software link stack flush");
+                       pr_buf(&s, ", Software link stack flush");
                if (link_stack_flush_type == BRANCH_CACHE_FLUSH_HW)
-                       seq_buf_printf(&s, " (hardware accelerated)");
+                       pr_buf(&s, " (hardware accelerated)");
        }
 
-       seq_buf_printf(&s, "\n");
+       pr_buf(&s, "\n");
 
-       return s.len;
+       return printbuf_written(&s);
 }
 
 #ifdef CONFIG_PPC_BOOK3S_64
diff --git a/arch/powerpc/platforms/pseries/papr_scm.c 
b/arch/powerpc/platforms/pseries/papr_scm.c
index f48e87ac89..e55a9af397 100644
--- a/arch/powerpc/platforms/pseries/papr_scm.c
+++ b/arch/powerpc/platforms/pseries/papr_scm.c
@@ -12,7 +12,7 @@
 #include <linux/libnvdimm.h>
 #include <linux/platform_device.h>
 #include <linux/delay.h>
-#include <linux/seq_buf.h>
+#include <linux/printbuf.h>
 #include <linux/nd.h>
 
 #include <asm/plpar_wrappers.h>
@@ -843,7 +843,7 @@ static ssize_t perf_stats_show(struct device *dev,
 {
        int index;
        ssize_t rc;
-       struct seq_buf s;
+       struct printbuf s = PRINTBUF_EXTERN(buf, PAGE_SIZE);
        struct papr_scm_perf_stat *stat;
        struct papr_scm_perf_stats *stats;
        struct nvdimm *dimm = to_nvdimm(dev);
@@ -866,18 +866,17 @@ static ssize_t perf_stats_show(struct device *dev,
         * values. Since stat_id is essentially a char string of
         * 8 bytes, simply use the string format specifier to print it.
         */
-       seq_buf_init(&s, buf, PAGE_SIZE);
        for (index = 0, stat = stats->scm_statistic;
             index < be32_to_cpu(stats->num_statistics);
             ++index, ++stat) {
-               seq_buf_printf(&s, "%.8s = 0x%016llX\n",
-                              stat->stat_id,
-                              be64_to_cpu(stat->stat_val));
+               pr_buf(&s, "%.8s = 0x%016llX\n",
+                      stat->stat_id,
+                      be64_to_cpu(stat->stat_val));
        }
 
 free_stats:
        kfree(stats);
-       return rc ? rc : (ssize_t)seq_buf_used(&s);
+       return rc ?: printbuf_written(&s);
 }
 static DEVICE_ATTR_ADMIN_RO(perf_stats);
 
@@ -886,7 +885,7 @@ static ssize_t flags_show(struct device *dev,
 {
        struct nvdimm *dimm = to_nvdimm(dev);
        struct papr_scm_priv *p = nvdimm_provider_data(dimm);
-       struct seq_buf s;
+       struct printbuf s = PRINTBUF_EXTERN(buf, PAGE_SIZE);
        u64 health;
        int rc;
 
@@ -897,29 +896,28 @@ static ssize_t flags_show(struct device *dev,
        /* Copy health_bitmap locally, check masks & update out buffer */
        health = READ_ONCE(p->health_bitmap);
 
-       seq_buf_init(&s, buf, PAGE_SIZE);
        if (health & PAPR_PMEM_UNARMED_MASK)
-               seq_buf_printf(&s, "not_armed ");
+               pr_buf(&s, "not_armed ");
 
        if (health & PAPR_PMEM_BAD_SHUTDOWN_MASK)
-               seq_buf_printf(&s, "flush_fail ");
+               pr_buf(&s, "flush_fail ");
 
        if (health & PAPR_PMEM_BAD_RESTORE_MASK)
-               seq_buf_printf(&s, "restore_fail ");
+               pr_buf(&s, "restore_fail ");
 
        if (health & PAPR_PMEM_ENCRYPTED)
-               seq_buf_printf(&s, "encrypted ");
+               pr_buf(&s, "encrypted ");
 
        if (health & PAPR_PMEM_SMART_EVENT_MASK)
-               seq_buf_printf(&s, "smart_notify ");
+               pr_buf(&s, "smart_notify ");
 
        if (health & PAPR_PMEM_SCRUBBED_AND_LOCKED)
-               seq_buf_printf(&s, "scrubbed locked ");
+               pr_buf(&s, "scrubbed locked ");
 
-       if (seq_buf_used(&s))
-               seq_buf_printf(&s, "\n");
+       if (printbuf_written(&s))
+               pr_buf(&s, "\n");
 
-       return seq_buf_used(&s);
+       return printbuf_written(&s);
 }
 DEVICE_ATTR_RO(flags);
 
-- 
2.36.0

Reply via email to