linux-kselftest.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v3] kunit: fix failure to build without printk
@ 2019-09-03 23:21 Brendan Higgins
  2019-09-03 23:35 ` Joe Perches
  0 siblings, 1 reply; 3+ messages in thread
From: Brendan Higgins @ 2019-09-03 23:21 UTC (permalink / raw)
  To: shuah
  Cc: kunit-dev, linux-kernel, linux-kselftest, frowand.list, sboyd,
	pmladek, sergey.senozhatsky, rostedt, Brendan Higgins,
	Randy Dunlap, Stephen Rothwell, Sergey Senozhatsky, Joe Perches,
	Tim.Bird

Previously KUnit assumed that printk would always be present, which is
not a valid assumption to make. Fix that by removing call to
vprintk_emit, and calling printk directly.

This fixes a build error[1] reported by Randy.

For context this change comes after much discussion. My first stab[2] at
this was just to make the KUnit logging code compile out; however, it
was agreed that if we were going to use vprintk_emit, then vprintk_emit
should provide a no-op stub, which lead to my second attempt[3]. In
response to me trying to stub out vprintk_emit, Sergey Senozhatsky
suggested a way for me to remove our usage of vprintk_emit, which led to
my third attempt at solving this[4].

In my previous version of this patch[4], I completely removed
vprintk_emit, as suggested by Sergey; however, there was a bit of debate
over whether Sergey's solution was the best. The debate arose due to
Sergey's version resulting in a checkpatch warning, which resulted in a
debate over correct printk usage. Joe Perches offered an alternative fix
which was somewhat less far reaching than what Sergey had suggested and
importantly relied on continuing to use %pV. Much of the debated
centered around whether %pV should be widely used, and whether Sergey's
version would result in object size bloat. Ultimately, we decided to go
with Sergey's version.

Reported-by: Randy Dunlap <rdunlap@infradead.org>
Link[1]: https://lore.kernel.org/linux-kselftest/c7229254-0d90-d90e-f3df-5b6d6fc0b51f@infradead.org/
Link[2]: https://lore.kernel.org/linux-kselftest/20190827174932.44177-1-brendanhiggins@google.com/
Link[3]: https://lore.kernel.org/linux-kselftest/20190827234835.234473-1-brendanhiggins@google.com/
Link[4]: https://lore.kernel.org/linux-kselftest/20190828093143.163302-1-brendanhiggins@google.com/
Cc: Stephen Rothwell <sfr@canb.auug.org.au>
Cc: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
Cc: Joe Perches <joe@perches.com>
Cc: Tim.Bird@sony.com
Signed-off-by: Brendan Higgins <brendanhiggins@google.com>
Acked-by: Randy Dunlap <rdunlap@infradead.org> # build-tested
Reviewed-by: Petr Mladek <pmladek@suse.com>
---

Sorry for the long commit message, but given the long discussion (and
some of the confusion that occurred in the discussion), it seemed
appropriate to summarize the discussion around this patch up to this
point (especially since one of the proposed patches was under a separate
patch subject).

No changes have been made to this patch since v2, other than the commit
log.

---
 include/kunit/test.h | 11 ++++-----
 kunit/test.c         | 57 +++++---------------------------------------
 2 files changed, 11 insertions(+), 57 deletions(-)

diff --git a/include/kunit/test.h b/include/kunit/test.h
index 8b7eb03d4971..efad2eacd6ba 100644
--- a/include/kunit/test.h
+++ b/include/kunit/test.h
@@ -339,9 +339,8 @@ static inline void *kunit_kzalloc(struct kunit *test, size_t size, gfp_t gfp)
 
 void kunit_cleanup(struct kunit *test);
 
-void __printf(3, 4) kunit_printk(const char *level,
-				 const struct kunit *test,
-				 const char *fmt, ...);
+#define kunit_print_level(KERN_LEVEL, test, fmt, ...) \
+	printk(KERN_LEVEL "\t# %s: " fmt, (test)->name, ##__VA_ARGS__)
 
 /**
  * kunit_info() - Prints an INFO level message associated with @test.
@@ -353,7 +352,7 @@ void __printf(3, 4) kunit_printk(const char *level,
  * Takes a variable number of format parameters just like printk().
  */
 #define kunit_info(test, fmt, ...) \
-	kunit_printk(KERN_INFO, test, fmt, ##__VA_ARGS__)
+	kunit_print_level(KERN_INFO, test, fmt, ##__VA_ARGS__)
 
 /**
  * kunit_warn() - Prints a WARN level message associated with @test.
@@ -364,7 +363,7 @@ void __printf(3, 4) kunit_printk(const char *level,
  * Prints a warning level message.
  */
 #define kunit_warn(test, fmt, ...) \
-	kunit_printk(KERN_WARNING, test, fmt, ##__VA_ARGS__)
+	kunit_print_level(KERN_WARNING, test, fmt, ##__VA_ARGS__)
 
 /**
  * kunit_err() - Prints an ERROR level message associated with @test.
@@ -375,7 +374,7 @@ void __printf(3, 4) kunit_printk(const char *level,
  * Prints an error level message.
  */
 #define kunit_err(test, fmt, ...) \
-	kunit_printk(KERN_ERR, test, fmt, ##__VA_ARGS__)
+	kunit_print_level(KERN_ERR, test, fmt, ##__VA_ARGS__)
 
 /**
  * KUNIT_SUCCEED() - A no-op expectation. Only exists for code clarity.
diff --git a/kunit/test.c b/kunit/test.c
index b2ca9b94c353..c83c0fa59cbd 100644
--- a/kunit/test.c
+++ b/kunit/test.c
@@ -16,36 +16,12 @@ static void kunit_set_failure(struct kunit *test)
 	WRITE_ONCE(test->success, false);
 }
 
-static int kunit_vprintk_emit(int level, const char *fmt, va_list args)
-{
-	return vprintk_emit(0, level, NULL, 0, fmt, args);
-}
-
-static int kunit_printk_emit(int level, const char *fmt, ...)
-{
-	va_list args;
-	int ret;
-
-	va_start(args, fmt);
-	ret = kunit_vprintk_emit(level, fmt, args);
-	va_end(args);
-
-	return ret;
-}
-
-static void kunit_vprintk(const struct kunit *test,
-			  const char *level,
-			  struct va_format *vaf)
-{
-	kunit_printk_emit(level[1] - '0', "\t# %s: %pV", test->name, vaf);
-}
-
 static void kunit_print_tap_version(void)
 {
 	static bool kunit_has_printed_tap_version;
 
 	if (!kunit_has_printed_tap_version) {
-		kunit_printk_emit(LOGLEVEL_INFO, "TAP version 14\n");
+		pr_info("TAP version 14\n");
 		kunit_has_printed_tap_version = true;
 	}
 }
@@ -64,10 +40,8 @@ static size_t kunit_test_cases_len(struct kunit_case *test_cases)
 static void kunit_print_subtest_start(struct kunit_suite *suite)
 {
 	kunit_print_tap_version();
-	kunit_printk_emit(LOGLEVEL_INFO, "\t# Subtest: %s\n", suite->name);
-	kunit_printk_emit(LOGLEVEL_INFO,
-			  "\t1..%zd\n",
-			  kunit_test_cases_len(suite->test_cases));
+	pr_info("\t# Subtest: %s\n", suite->name);
+	pr_info("\t1..%zd\n", kunit_test_cases_len(suite->test_cases));
 }
 
 static void kunit_print_ok_not_ok(bool should_indent,
@@ -87,9 +61,7 @@ static void kunit_print_ok_not_ok(bool should_indent,
 	else
 		ok_not_ok = "not ok";
 
-	kunit_printk_emit(LOGLEVEL_INFO,
-			  "%s%s %zd - %s\n",
-			  indent, ok_not_ok, test_number, description);
+	pr_info("%s%s %zd - %s\n", indent, ok_not_ok, test_number, description);
 }
 
 static bool kunit_suite_has_succeeded(struct kunit_suite *suite)
@@ -133,11 +105,11 @@ static void kunit_print_string_stream(struct kunit *test,
 		kunit_err(test,
 			  "Could not allocate buffer, dumping stream:\n");
 		list_for_each_entry(fragment, &stream->fragments, node) {
-			kunit_err(test, fragment->fragment);
+			kunit_err(test, "%s", fragment->fragment);
 		}
 		kunit_err(test, "\n");
 	} else {
-		kunit_err(test, buf);
+		kunit_err(test, "%s", buf);
 		kunit_kfree(test, buf);
 	}
 }
@@ -504,20 +476,3 @@ void kunit_cleanup(struct kunit *test)
 		kunit_resource_free(test, resource);
 	}
 }
-
-void kunit_printk(const char *level,
-		  const struct kunit *test,
-		  const char *fmt, ...)
-{
-	struct va_format vaf;
-	va_list args;
-
-	va_start(args, fmt);
-
-	vaf.fmt = fmt;
-	vaf.va = &args;
-
-	kunit_vprintk(test, level, &vaf);
-
-	va_end(args);
-}
-- 
2.23.0.187.g17f5b7556c-goog


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v3] kunit: fix failure to build without printk
  2019-09-03 23:21 [PATCH v3] kunit: fix failure to build without printk Brendan Higgins
@ 2019-09-03 23:35 ` Joe Perches
  2019-09-03 23:42   ` Brendan Higgins
  0 siblings, 1 reply; 3+ messages in thread
From: Joe Perches @ 2019-09-03 23:35 UTC (permalink / raw)
  To: Brendan Higgins, shuah
  Cc: kunit-dev, linux-kernel, linux-kselftest, frowand.list, sboyd,
	pmladek, sergey.senozhatsky, rostedt, Randy Dunlap,
	Stephen Rothwell, Sergey Senozhatsky, Tim.Bird

On Tue, 2019-09-03 at 16:21 -0700, Brendan Higgins wrote:
> Previously KUnit assumed that printk would always be present, which is
> not a valid assumption to make. Fix that by removing call to
> vprintk_emit, and calling printk directly.
> 
> This fixes a build error[1] reported by Randy.
> 
> For context this change comes after much discussion. My first stab[2] at
> this was just to make the KUnit logging code compile out; however, it
> was agreed that if we were going to use vprintk_emit, then vprintk_emit
> should provide a no-op stub, which lead to my second attempt[3]. In
> response to me trying to stub out vprintk_emit, Sergey Senozhatsky
> suggested a way for me to remove our usage of vprintk_emit, which led to
> my third attempt at solving this[4].
> 
> In my previous version of this patch[4], I completely removed
> vprintk_emit, as suggested by Sergey; however, there was a bit of debate
> over whether Sergey's solution was the best. The debate arose due to
> Sergey's version resulting in a checkpatch warning, which resulted in a
> debate over correct printk usage. Joe Perches offered an alternative fix
> which was somewhat less far reaching than what Sergey had suggested and
> importantly relied on continuing to use %pV. Much of the debated
> centered around whether %pV should be widely used, and whether Sergey's
> version would result in object size bloat. Ultimately, we decided to go
> with Sergey's version.
> 
> Reported-by: Randy Dunlap <rdunlap@infradead.org>
> Link[1]: https://lore.kernel.org/linux-kselftest/c7229254-0d90-d90e-f3df-5b6d6fc0b51f@infradead.org/
> Link[2]: https://lore.kernel.org/linux-kselftest/20190827174932.44177-1-brendanhiggins@google.com/
> Link[3]: https://lore.kernel.org/linux-kselftest/20190827234835.234473-1-brendanhiggins@google.com/
> Link[4]: https://lore.kernel.org/linux-kselftest/20190828093143.163302-1-brendanhiggins@google.com/
> Cc: Stephen Rothwell <sfr@canb.auug.org.au>
> Cc: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
> Cc: Joe Perches <joe@perches.com>
> Cc: Tim.Bird@sony.com
> Signed-off-by: Brendan Higgins <brendanhiggins@google.com>
> Acked-by: Randy Dunlap <rdunlap@infradead.org> # build-tested
> Reviewed-by: Petr Mladek <pmladek@suse.com>
> ---
> 
> Sorry for the long commit message, but given the long discussion (and
> some of the confusion that occurred in the discussion), it seemed
> appropriate to summarize the discussion around this patch up to this
> point (especially since one of the proposed patches was under a separate
> patch subject).
> 
> No changes have been made to this patch since v2, other than the commit
> log.
[]
> diff --git a/include/kunit/test.h b/include/kunit/test.h
[]
> @@ -339,9 +339,8 @@ static inline void *kunit_kzalloc(struct kunit *test, size_t size, gfp_t gfp)
>  
>  void kunit_cleanup(struct kunit *test);
>  
> -void __printf(3, 4) kunit_printk(const char *level,
> -				 const struct kunit *test,
> -				 const char *fmt, ...);
> +#define kunit_print_level(KERN_LEVEL, test, fmt, ...) \
> +	printk(KERN_LEVEL "\t# %s: " fmt, (test)->name, ##__VA_ARGS__)

Non trivial notes:

Please do not use KERN_LEVEL as a macro argument.
It would just be a source of possible confusion.

Please use level or lvl like nearly every other macro
that does this uses.

And there is nothing wrong with using kunit_printk and it's
not necessary to use an odd name like kunit_printk_level.

$ git grep -P 'define\s+\w+_printk\(.*\b(level|lvl)'
drivers/block/drbd/drbd_int.h:#define drbd_printk(level, obj, fmt, args...) \
drivers/edac/amd76x_edac.c:#define amd76x_printk(level, fmt, arg...) \
drivers/edac/amd76x_edac.c:#define amd76x_mc_printk(mci, level, fmt, arg...) \
drivers/edac/cpc925_edac.c:#define cpc925_printk(level, fmt, arg...) \
drivers/edac/cpc925_edac.c:#define cpc925_mc_printk(mci, level, fmt, arg...) \
drivers/edac/e752x_edac.c:#define e752x_printk(level, fmt, arg...) \
drivers/edac/e752x_edac.c:#define e752x_mc_printk(mci, level, fmt, arg...) \
drivers/edac/e7xxx_edac.c:#define e7xxx_printk(level, fmt, arg...) \
drivers/edac/e7xxx_edac.c:#define e7xxx_mc_printk(mci, level, fmt, arg...) \
drivers/edac/edac_mc.h:#define edac_printk(level, prefix, fmt, arg...) \
drivers/edac/edac_mc.h:#define edac_mc_printk(mci, level, fmt, arg...) \
drivers/edac/edac_mc.h:#define edac_mc_chipset_printk(mci, level, prefix, fmt, arg...) \
drivers/edac/edac_mc.h:#define edac_device_printk(ctl, level, fmt, arg...) \
drivers/edac/edac_mc.h:#define edac_pci_printk(ctl, level, fmt, arg...) \
drivers/edac/fsl_ddr_edac.h:#define fsl_mc_printk(mci, level, fmt, arg...) \
drivers/edac/i10nm_base.c:#define i10nm_printk(level, fmt, arg...)      \
drivers/edac/i5000_edac.c:#define i5000_printk(level, fmt, arg...) \
drivers/edac/i5000_edac.c:#define i5000_mc_printk(mci, level, fmt, arg...) \
drivers/edac/i5400_edac.c:#define i5400_printk(level, fmt, arg...) \
drivers/edac/i5400_edac.c:#define i5400_mc_printk(mci, level, fmt, arg...) \
drivers/edac/i7300_edac.c:#define i7300_printk(level, fmt, arg...) \
drivers/edac/i7300_edac.c:#define i7300_mc_printk(mci, level, fmt, arg...) \
drivers/edac/i7core_edac.c:#define i7core_printk(level, fmt, arg...)                    \
drivers/edac/i7core_edac.c:#define i7core_mc_printk(mci, level, fmt, arg...)            \
drivers/edac/i82860_edac.c:#define i82860_printk(level, fmt, arg...) \
drivers/edac/i82860_edac.c:#define i82860_mc_printk(mci, level, fmt, arg...) \
drivers/edac/i82875p_edac.c:#define i82875p_printk(level, fmt, arg...) \
drivers/edac/i82875p_edac.c:#define i82875p_mc_printk(mci, level, fmt, arg...) \
drivers/edac/i82975x_edac.c:#define i82975x_printk(level, fmt, arg...) \
drivers/edac/i82975x_edac.c:#define i82975x_mc_printk(mci, level, fmt, arg...) \
drivers/edac/ie31200_edac.c:#define ie31200_printk(level, fmt, arg...) \
drivers/edac/mpc85xx_edac.h:#define mpc85xx_printk(level, fmt, arg...) \
drivers/edac/mv64x60_edac.h:#define mv64x60_printk(level, fmt, arg...) \
drivers/edac/mv64x60_edac.h:#define mv64x60_mc_printk(mci, level, fmt, arg...) \
drivers/edac/pnd2_edac.c:#define pnd2_printk(level, fmt, arg...)                        \
drivers/edac/pnd2_edac.c:#define pnd2_mc_printk(mci, level, fmt, arg...)        \
drivers/edac/ppc4xx_edac.c:#define ppc4xx_edac_printk(level, fmt, arg...) \
drivers/edac/ppc4xx_edac.c:#define ppc4xx_edac_mc_printk(level, mci, fmt, arg...) \
drivers/edac/r82600_edac.c:#define r82600_printk(level, fmt, arg...) \
drivers/edac/r82600_edac.c:#define r82600_mc_printk(mci, level, fmt, arg...) \
drivers/edac/sb_edac.c:#define sbridge_printk(level, fmt, arg...)                       \
drivers/edac/sb_edac.c:#define sbridge_mc_printk(mci, level, fmt, arg...)               \
drivers/edac/skx_base.c:#define skx_printk(level, fmt, arg...)                  \
drivers/edac/skx_base.c:#define skx_mc_printk(mci, level, fmt, arg...)          \
drivers/edac/skx_common.h:#define skx_printk(level, fmt, arg...)                        \
drivers/edac/skx_common.h:#define skx_mc_printk(mci, level, fmt, arg...)                \
drivers/infiniband/hw/usnic/usnic_log.h:#define usnic_printk(lvl, args...) \
drivers/infiniband/ulp/ipoib/ipoib.h:#define ipoib_printk(level, priv, format, arg...)  \
drivers/input/mouse/psmouse.h:#define psmouse_printk(level, psmouse, format, ...)       \
drivers/media/tuners/mc44s803.c:#define mc_printk(level, format, arg...)        \
drivers/media/tuners/tda18271-priv.h:#define tda_printk(st, lvl, fmt, arg...)                   \
drivers/media/usb/uvc/uvcvideo.h:#define uvc_printk(level, msg...) \
drivers/net/ethernet/freescale/ucc_geth.c:#define ugeth_printk(level, format, arg...)  \
drivers/net/ethernet/netronome/nfp/nfpcore/nfp_cpp.h:#define nfp_printk(level, cpp, fmt, args...) \
drivers/net/phy/phylink.c:#define phylink_printk(level, pl, fmt, ...) \
drivers/scsi/ipr.h:#define ipr_res_printk(level, ioa_cfg, bus, target, lun, fmt, ...) \
drivers/scsi/ipr.h:#define ipr_ra_printk(level, ioa_cfg, ra, fmt, ...) \
drivers/scsi/qla4xxx/ql4_def.h:#define ql4_printk(level, ha, format, arg...) \
drivers/scsi/sym53c8xx_2/sym_hipd.c:#define sym_printk(lvl, tp, cp, fmt, v...) do { \
drivers/usb/atm/usbatm.h:#define atm_printk(level, instance, format, arg...)    \
include/linux/hid.h:#define hid_printk(level, hid, fmt, arg...)         \
include/linux/netdevice.h:#define netif_printk(priv, type, level, dev, fmt, args...)    \
include/linux/pci.h:#define pci_printk(level, pdev, fmt, arg...) \
include/media/v4l2-common.h:#define v4l_printk(level, name, adapter, addr, fmt, arg...) \
include/media/v4l2-common.h:#define v4l_client_printk(level, client, fmt, arg...)                           \
include/media/v4l2-common.h:#define v4l2_printk(level, dev, fmt, arg...) \
include/net/cfg80211.h:#define wiphy_printk(level, wiphy, format, args...)              \
include/sound/core.h:#define __snd_printk(level, file, line, format, ...) \
net/bridge/br_private.h:#define br_printk(level, br, format, args...)   \



^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH v3] kunit: fix failure to build without printk
  2019-09-03 23:35 ` Joe Perches
@ 2019-09-03 23:42   ` Brendan Higgins
  0 siblings, 0 replies; 3+ messages in thread
From: Brendan Higgins @ 2019-09-03 23:42 UTC (permalink / raw)
  To: Joe Perches
  Cc: shuah, kunit-dev, Linux Kernel Mailing List,
	open list:KERNEL SELFTEST FRAMEWORK, Frank Rowand, Stephen Boyd,
	Petr Mladek, sergey.senozhatsky, Steven Rostedt, Randy Dunlap,
	Stephen Rothwell, Sergey Senozhatsky, Bird, Timothy

On Tue, Sep 3, 2019 at 4:35 PM Joe Perches <joe@perches.com> wrote:
>
> On Tue, 2019-09-03 at 16:21 -0700, Brendan Higgins wrote:
> > Previously KUnit assumed that printk would always be present, which is
> > not a valid assumption to make. Fix that by removing call to
> > vprintk_emit, and calling printk directly.
> >
> > This fixes a build error[1] reported by Randy.
> >
> > For context this change comes after much discussion. My first stab[2] at
> > this was just to make the KUnit logging code compile out; however, it
> > was agreed that if we were going to use vprintk_emit, then vprintk_emit
> > should provide a no-op stub, which lead to my second attempt[3]. In
> > response to me trying to stub out vprintk_emit, Sergey Senozhatsky
> > suggested a way for me to remove our usage of vprintk_emit, which led to
> > my third attempt at solving this[4].
> >
> > In my previous version of this patch[4], I completely removed
> > vprintk_emit, as suggested by Sergey; however, there was a bit of debate
> > over whether Sergey's solution was the best. The debate arose due to
> > Sergey's version resulting in a checkpatch warning, which resulted in a
> > debate over correct printk usage. Joe Perches offered an alternative fix
> > which was somewhat less far reaching than what Sergey had suggested and
> > importantly relied on continuing to use %pV. Much of the debated
> > centered around whether %pV should be widely used, and whether Sergey's
> > version would result in object size bloat. Ultimately, we decided to go
> > with Sergey's version.
> >
> > Reported-by: Randy Dunlap <rdunlap@infradead.org>
> > Link[1]: https://lore.kernel.org/linux-kselftest/c7229254-0d90-d90e-f3df-5b6d6fc0b51f@infradead.org/
> > Link[2]: https://lore.kernel.org/linux-kselftest/20190827174932.44177-1-brendanhiggins@google.com/
> > Link[3]: https://lore.kernel.org/linux-kselftest/20190827234835.234473-1-brendanhiggins@google.com/
> > Link[4]: https://lore.kernel.org/linux-kselftest/20190828093143.163302-1-brendanhiggins@google.com/
> > Cc: Stephen Rothwell <sfr@canb.auug.org.au>
> > Cc: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
> > Cc: Joe Perches <joe@perches.com>
> > Cc: Tim.Bird@sony.com
> > Signed-off-by: Brendan Higgins <brendanhiggins@google.com>
> > Acked-by: Randy Dunlap <rdunlap@infradead.org> # build-tested
> > Reviewed-by: Petr Mladek <pmladek@suse.com>
> > ---
> >
> > Sorry for the long commit message, but given the long discussion (and
> > some of the confusion that occurred in the discussion), it seemed
> > appropriate to summarize the discussion around this patch up to this
> > point (especially since one of the proposed patches was under a separate
> > patch subject).
> >
> > No changes have been made to this patch since v2, other than the commit
> > log.
> []
> > diff --git a/include/kunit/test.h b/include/kunit/test.h
> []
> > @@ -339,9 +339,8 @@ static inline void *kunit_kzalloc(struct kunit *test, size_t size, gfp_t gfp)
> >
> >  void kunit_cleanup(struct kunit *test);
> >
> > -void __printf(3, 4) kunit_printk(const char *level,
> > -                              const struct kunit *test,
> > -                              const char *fmt, ...);
> > +#define kunit_print_level(KERN_LEVEL, test, fmt, ...) \
> > +     printk(KERN_LEVEL "\t# %s: " fmt, (test)->name, ##__VA_ARGS__)
>
> Non trivial notes:
>
> Please do not use KERN_LEVEL as a macro argument.
> It would just be a source of possible confusion.
>
> Please use level or lvl like nearly every other macro
> that does this uses.

Will do.

> And there is nothing wrong with using kunit_printk and it's
> not necessary to use an odd name like kunit_printk_level.

Sounds reasonable.

[...]

Thanks!

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2019-09-03 23:42 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-09-03 23:21 [PATCH v3] kunit: fix failure to build without printk Brendan Higgins
2019-09-03 23:35 ` Joe Perches
2019-09-03 23:42   ` Brendan Higgins

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).