Merge branch 'timecounter-next'
[cascardo/linux.git] / lib / bitmap.c
index 969ae8f..324ea9e 100644 (file)
@@ -12,6 +12,8 @@
 #include <linux/bitmap.h>
 #include <linux/bitops.h>
 #include <linux/bug.h>
+
+#include <asm/page.h>
 #include <asm/uaccess.h>
 
 /*
@@ -585,6 +587,33 @@ int bitmap_scnlistprintf(char *buf, unsigned int buflen,
 }
 EXPORT_SYMBOL(bitmap_scnlistprintf);
 
+/**
+ * bitmap_print_to_pagebuf - convert bitmap to list or hex format ASCII string
+ * @list: indicates whether the bitmap must be list
+ * @buf: page aligned buffer into which string is placed
+ * @maskp: pointer to bitmap to convert
+ * @nmaskbits: size of bitmap, in bits
+ *
+ * Output format is a comma-separated list of decimal numbers and
+ * ranges if list is specified or hex digits grouped into comma-separated
+ * sets of 8 digits/set. Returns the number of characters written to buf.
+ */
+int bitmap_print_to_pagebuf(bool list, char *buf, const unsigned long *maskp,
+                           int nmaskbits)
+{
+       ptrdiff_t len = PTR_ALIGN(buf + PAGE_SIZE - 1, PAGE_SIZE) - buf - 2;
+       int n = 0;
+
+       if (len > 1) {
+               n = list ? bitmap_scnlistprintf(buf, len, maskp, nmaskbits) :
+                          bitmap_scnprintf(buf, len, maskp, nmaskbits);
+               buf[n++] = '\n';
+               buf[n] = '\0';
+       }
+       return n;
+}
+EXPORT_SYMBOL(bitmap_print_to_pagebuf);
+
 /**
  * __bitmap_parselist - convert list format ASCII string to bitmap
  * @buf: read nul-terminated user string from this buffer