kunit: remove va_format from kunit_assert
The concern is that having a lot of redundant fields in kunit_assert can blow up stack usage if the compiler doesn't optimize them away [1]. The comment on this field implies that it was meant to be initialized when the expect/assert was declared, but this only happens when we run kunit_do_failed_assertion(). We don't need to access it outside of that function, so move it out of the struct and make it a local variable there. This change also takes the chance to reduce the number of macros by inlining the now simplified KUNIT_INIT_ASSERT_STRUCT() macro. [1] https://groups.google.com/g/kunit-dev/c/i3fZXgvBrfA/m/VULQg1z6BAAJ Signed-off-by: Daniel Latypov <dlatypov@google.com> Reviewed-by: David Gow <davidgow@google.com> Reviewed-by: Brendan Higgins <brendanhiggins@google.com> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
This commit is contained in:
parent
95dcbc55fe
commit
6419abb80e
3 changed files with 36 additions and 46 deletions
|
|
@ -30,22 +30,23 @@ void kunit_assert_prologue(const struct kunit_loc *loc,
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(kunit_assert_prologue);
|
||||
|
||||
void kunit_assert_print_msg(const struct kunit_assert *assert,
|
||||
struct string_stream *stream)
|
||||
static void kunit_assert_print_msg(const struct va_format *message,
|
||||
struct string_stream *stream)
|
||||
{
|
||||
if (assert->message.fmt)
|
||||
string_stream_add(stream, "\n%pV", &assert->message);
|
||||
if (message->fmt)
|
||||
string_stream_add(stream, "\n%pV", message);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(kunit_assert_print_msg);
|
||||
|
||||
void kunit_fail_assert_format(const struct kunit_assert *assert,
|
||||
const struct va_format *message,
|
||||
struct string_stream *stream)
|
||||
{
|
||||
string_stream_add(stream, "%pV", &assert->message);
|
||||
string_stream_add(stream, "%pV", message);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(kunit_fail_assert_format);
|
||||
|
||||
void kunit_unary_assert_format(const struct kunit_assert *assert,
|
||||
const struct va_format *message,
|
||||
struct string_stream *stream)
|
||||
{
|
||||
struct kunit_unary_assert *unary_assert;
|
||||
|
|
@ -60,11 +61,12 @@ void kunit_unary_assert_format(const struct kunit_assert *assert,
|
|||
string_stream_add(stream,
|
||||
KUNIT_SUBTEST_INDENT "Expected %s to be false, but is true\n",
|
||||
unary_assert->condition);
|
||||
kunit_assert_print_msg(assert, stream);
|
||||
kunit_assert_print_msg(message, stream);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(kunit_unary_assert_format);
|
||||
|
||||
void kunit_ptr_not_err_assert_format(const struct kunit_assert *assert,
|
||||
const struct va_format *message,
|
||||
struct string_stream *stream)
|
||||
{
|
||||
struct kunit_ptr_not_err_assert *ptr_assert;
|
||||
|
|
@ -82,7 +84,7 @@ void kunit_ptr_not_err_assert_format(const struct kunit_assert *assert,
|
|||
ptr_assert->text,
|
||||
PTR_ERR(ptr_assert->value));
|
||||
}
|
||||
kunit_assert_print_msg(assert, stream);
|
||||
kunit_assert_print_msg(message, stream);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(kunit_ptr_not_err_assert_format);
|
||||
|
||||
|
|
@ -110,6 +112,7 @@ static bool is_literal(struct kunit *test, const char *text, long long value,
|
|||
}
|
||||
|
||||
void kunit_binary_assert_format(const struct kunit_assert *assert,
|
||||
const struct va_format *message,
|
||||
struct string_stream *stream)
|
||||
{
|
||||
struct kunit_binary_assert *binary_assert;
|
||||
|
|
@ -132,11 +135,12 @@ void kunit_binary_assert_format(const struct kunit_assert *assert,
|
|||
string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %lld",
|
||||
binary_assert->right_text,
|
||||
binary_assert->right_value);
|
||||
kunit_assert_print_msg(assert, stream);
|
||||
kunit_assert_print_msg(message, stream);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(kunit_binary_assert_format);
|
||||
|
||||
void kunit_binary_ptr_assert_format(const struct kunit_assert *assert,
|
||||
const struct va_format *message,
|
||||
struct string_stream *stream)
|
||||
{
|
||||
struct kunit_binary_ptr_assert *binary_assert;
|
||||
|
|
@ -155,7 +159,7 @@ void kunit_binary_ptr_assert_format(const struct kunit_assert *assert,
|
|||
string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == %px",
|
||||
binary_assert->right_text,
|
||||
binary_assert->right_value);
|
||||
kunit_assert_print_msg(assert, stream);
|
||||
kunit_assert_print_msg(message, stream);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(kunit_binary_ptr_assert_format);
|
||||
|
||||
|
|
@ -176,6 +180,7 @@ static bool is_str_literal(const char *text, const char *value)
|
|||
}
|
||||
|
||||
void kunit_binary_str_assert_format(const struct kunit_assert *assert,
|
||||
const struct va_format *message,
|
||||
struct string_stream *stream)
|
||||
{
|
||||
struct kunit_binary_str_assert *binary_assert;
|
||||
|
|
@ -196,6 +201,6 @@ void kunit_binary_str_assert_format(const struct kunit_assert *assert,
|
|||
string_stream_add(stream, KUNIT_SUBSUBTEST_INDENT "%s == \"%s\"",
|
||||
binary_assert->right_text,
|
||||
binary_assert->right_value);
|
||||
kunit_assert_print_msg(assert, stream);
|
||||
kunit_assert_print_msg(message, stream);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(kunit_binary_str_assert_format);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue