From: Michal Wajdeczko <michal.wajdeczko@intel.com>
To: "Lucas De Marchi" <lucas.demarchi@intel.com>,
"Michał Winiarski" <michal@hardline.pl>
Cc: intel-xe@lists.freedesktop.org, maarten.lankhorst@intel.com
Subject: Re: [Intel-xe] [PATCH 1/7] drm/xe: Add basic unit tests for rtp
Date: Sun, 2 Apr 2023 13:17:50 +0200 [thread overview]
Message-ID: <cb9c13f0-fbbf-415b-35a8-0c00bfe1864a@intel.com> (raw)
In-Reply-To: <20230402013449.orx5njgiy4uyjcbj@ldmartin-desk2.lan>
On 02.04.2023 03:34, Lucas De Marchi wrote:
> On Sat, Apr 01, 2023 at 08:26:24PM +0200, Michał Winiarski wrote:
>> On Sat, Apr 01, 2023 at 01:54:59AM -0700, Lucas De Marchi wrote:
>>> On Fri, Mar 31, 2023 at 08:34:21AM -0600, Lucas De Marchi wrote:
>>> > On Mon, Mar 27, 2023 at 07:56:01PM +0200, Michał Winiarski wrote:
>>> > > On Tue, Mar 21, 2023 at 03:05:21PM -0700, Lucas De Marchi wrote:
>>> > > > +EXPORT_SYMBOL(xe_rtp_process_incompat_types);
>>> > > > diff --git a/drivers/gpu/drm/xe/tests/xe_rtp_test.c
>>> b/drivers/gpu/drm/xe/tests/xe_rtp_test.c
>>> > > > new file mode 100644
>>> > > > index 000000000000..4a12aad3f759
>>> > > > --- /dev/null
>>> > > > +++ b/drivers/gpu/drm/xe/tests/xe_rtp_test.c
>>> > >
>>> > > There's no need to have this as a separate file.
>>> > > We can move the contents of tests/xe_rtp.c into
>>> tests/xe_rtp_test.c and
>>> > > include tests/xe_rtp_test.c directly in xe_rtp.c
>>> >
>>> > this is not how the tests are currently structured.
>>> >
>>> > xe_rtp.c includes tests/xe_rtp.c. The latter can be seen as "an
>>> > extension of the that file, exporting whatever entrypoint is needed
>>> > for the real test". They are then part of the xe.ko module.
>>> >
>>> > tests/xe_rtp_test.c is the one in the separate test module, and
>>> contains
>>> > the integration with kunit.
>>>
>>> but it's possible to keep everythin in the separate module and not need
>>> the include of tests/xe_rtp.c. I did that on v2.
>>>
>>> Lucas De Marchi
>>
>> From my perspective - the way that the test is implemented carries an
>> additional information.
>> 1) Test is a separate module:
>> Means that we're testing the API exported by the module (that's used by
>> other modules).
>> 2) Test is a file that's a part of a module:
>> Means that we're testing non-static API used internally by the module.
>> 3) Test is a file that's included at the end of a file:
>> Means that we're testing static functions.
>>
>> Forcing everything to be a module doesn't really serve any purpose.
>> It just makes things harder to follow, as it removes this useful
>> additional bit of information.
>
> I strongly disagree here. Basing the test location on how much a
> function is exposed is a recipe for having to move the tests from one
> place to another. There are always refactors that make function change
> from non-static -> static, static -> non-static, and to a smaller degree
> exporting it.
>
> In the end the code will just be inconsistent with the rules you
> outlined.
>
> Separating everything to a separate module means the test code doesn't
> bloat the xe.ko module. I do think we should group all the tests into a
> single xe_test.ko, but that is a different topic.
>
> See v2 of this patch series where I move *all* of the rtp tests to the
> separate module and simply use EXPORT_SYMBOL_IF_KUNIT() to export the 2
but having to export static functions simply don't scale, it's fine if
all you test needs is 2 functions, but to have full coverage we might
end with exporting all static functions (and to some extend bloating
xe.ko anyway, both in code and binary)
there is already BKM for testing static functions [1]
so why are we trying to force different (and IMO worst) model ?
[1]
https://docs.kernel.org/dev-tools/kunit/usage.html#testing-static-functions
> functions I need (In this v1 I was using
> EXPORT_SYMBOL_NS_GPL(..., XE_KUNIT) to make sure the tests were in a
> separate namespace, but then I noticed kunit itself has a recommended
> way by using its macro).
>
> This makes the rule very simple to be followed:
>
> 1) Place everything you can in the separate test module
but why? as Michal pointed out, this works best for testing already
exported API functions, to test internal static functions, this would be
unnecessary complicated solution
> 2) Place it in end of the file with the #include otherwise
this should be our primary BKM for mock/fake/sw/self/kunit/unit(*) test.
(*) pick one
note that in addition to easy maintenance (it doesn't require writing,
building, distributing and loading separate modules), this single test
file already has access to all required compilation unit static
functions that we want to test.
also from IGT point of view, this would mean that in case of
adding/removing some subtests all we need is just update test filter
rather then updating list of modules to load/unload.
and I wouldn't count this final #include as .ko bloating factor as it
would be primary used in UML build, where we don't care, and for the
target builds this could be easily compiled out.
thanks,
Michal
>
> Lucas De Marchi
next prev parent reply other threads:[~2023-04-02 11:18 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-21 22:05 [Intel-xe] [PATCH 0/7] Unit tests for rtp and GT wa/tuning Lucas De Marchi
2023-03-21 22:05 ` [Intel-xe] [PATCH 1/7] drm/xe: Add basic unit tests for rtp Lucas De Marchi
2023-03-27 17:56 ` Michał Winiarski
2023-03-31 13:43 ` Lucas De Marchi
2023-04-01 8:59 ` Lucas De Marchi
2023-04-01 18:54 ` Michał Winiarski
2023-04-02 1:24 ` Lucas De Marchi
2023-04-02 10:51 ` Michal Wajdeczko
2023-03-31 14:34 ` Lucas De Marchi
2023-04-01 8:54 ` Lucas De Marchi
2023-04-01 18:26 ` Michał Winiarski
2023-04-02 1:34 ` Lucas De Marchi
2023-04-02 11:17 ` Michal Wajdeczko [this message]
2023-04-02 21:54 ` Lucas De Marchi
2023-04-03 7:38 ` Michal Wajdeczko
2023-04-03 13:02 ` Lucas De Marchi
2023-03-21 22:05 ` [Intel-xe] [PATCH 2/7] drm/xe: Extract function to initialize xe->info Lucas De Marchi
2023-03-21 22:05 ` [Intel-xe] [PATCH 3/7] drm/xe: Move test infra out of xe_pci.[ch] Lucas De Marchi
2023-03-21 22:05 ` [Intel-xe] [PATCH 4/7] drm/xe: Use XE_KUNIT for symbol namespace Lucas De Marchi
2023-03-21 22:05 ` [Intel-xe] [PATCH 5/7] drm/xe: Generalize fake device creation Lucas De Marchi
2023-03-21 22:05 ` [Intel-xe] [PATCH 6/7] drm/xe/reg_sr: Save errors for kunit integration Lucas De Marchi
2023-03-27 18:29 ` Michał Winiarski
2023-03-31 14:43 ` Lucas De Marchi
2023-03-21 22:05 ` [Intel-xe] [PATCH 7/7] drm/xe: Add test for GT workarounds and tunings Lucas De Marchi
2023-03-21 22:08 ` [Intel-xe] ✓ CI.Patch_applied: success for Unit tests for rtp and GT wa/tuning Patchwork
2023-03-31 15:14 ` Lucas De Marchi
2023-04-03 6:08 ` Mauro Carvalho Chehab
2023-03-21 22:09 ` [Intel-xe] ✓ CI.KUnit: " Patchwork
2023-03-21 22:13 ` [Intel-xe] ✓ CI.Build: " Patchwork
2023-03-21 22:25 ` [Intel-xe] ○ CI.BAT: info " Patchwork
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cb9c13f0-fbbf-415b-35a8-0c00bfe1864a@intel.com \
--to=michal.wajdeczko@intel.com \
--cc=intel-xe@lists.freedesktop.org \
--cc=lucas.demarchi@intel.com \
--cc=maarten.lankhorst@intel.com \
--cc=michal@hardline.pl \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.