All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jan Kiszka <jan.kiszka@siemens.com>
To: Fino Meng <fino.meng@linux.intel.com>
Cc: xenomai@xenomai.org
Subject: Re: build scripts for the WIP xenomai porting to kernel 5.4
Date: Thu, 22 Oct 2020 08:27:10 +0200	[thread overview]
Message-ID: <88232cd0-0713-4e45-bad2-e22acdeb7632@siemens.com> (raw)
In-Reply-To: <20201021114329.GA4344@linux.intel.com>

On 21.10.20 13:43, Fino Meng wrote:
> On Wed, Oct 21, 2020 at 08:36:04AM +0200, Jan Kiszka wrote:
>> On 18.10.20 23:41, Jan Kiszka via Xenomai wrote:
>>> On 16.10.20 05:36, Fino Meng wrote:
>>>> On Thu, Oct 15, 2020 at 04:20:11PM +0200, Jan Kiszka wrote:
>>>>> On 14.10.20 15:25, Fino Meng wrote:
>>>>>> hi team,
>>>>>>
>>>>>> I just updated the scripts to build the WIP version xenomai porting to
>>>>>> kernel 5.4, just follow the steps:
>>>>>>
>>>>>> git clone https://github.com/finomeng/xenomai-mirror.git /tmp/xenomai-mirror.next-5.4
>>>>>> cd /tmp/xenomai-mirror.next-5.4
>>>>>> git checkout -t origin/wip/next-5.4-porting
>>>>>>
>>>>>> git clone https://github.com/intel/linux-stable-xenomai /tmp/kernel
>>>>>> cd /tmp/kernel
>>>>>> git checkout -t review/5.4.59/stable/ipipe-x86
>>>>>>
>>>>>> ./patching-xenomai2kernel.sh
>>>>>>
>>>>>> cp config_xenomai.kernel_debug .config
>>>>>> make olddefconfig
>>>>>> ./build-debpkg.sh
>>>>>>
>>>>>>
>>>>>> I didn't put it togethter with ISAR/Debian yet. I test it with a PC with Debian 10 installed.
>>>>>>
>>>>>> if no error, linux-image-*.deb and linux-headers-*.deb should generated outside kernel folder,
>>>>>> copy them to your target test device with already installed a Debian/Ubuntu,
>>>>>> install the deb with "dpkg -i", update-grub should be called during install linux-image-*.deb
>>>>>> reboot and select to boot the new kernel in grub's menu
>>>>>>
>>>>>> the build steps also written in patching-xenomai2kernel.sh and build-debpkg.sh
>>>>>>
>>>>>> switchtest will fail in current version, for example: "./switchtest rtk_fp_ufpp0"
>>>>>> will print:
>>>>>>
>>>>>> r0: 2147483648 != 1000
>>>>>> r1: 2147483648 != 1000
>>>>>> r2: 2147483648 != 1000
>>>>>> r3: 2147483648 != 1000
>>>>>> r4: 2147483648 != 1000
>>>>>> r5: 2147483648 != 1000
>>>>>> r6: 2147483648 != 1000
>>>>>> r7: 2147483648 != 1000
>>>>>> ymm0: 2676586395008836901/0 != 1000/1000
>>>>>> ymm1: 71776119061217280/0 != 1000/1000
>>>>>> ymm2: 0/0 != 1000/1000
>>>>>> ymm3: 1000/0 != 1000/1000
>>>>>> ymm4: 1000/0 != 1000/1000
>>>>>> ymm5: 1000/0 != 1000/1000
>>>>>> ymm6: 1000/0 != 1000/1000
>>>>>> ymm7: 1000/0 != 1000/1000
>>>>>> Error after context switch from task 1(rtk_fp_ufpp0-1) to task 0(sleeper_ufps0-0),
>>>>>> FPU registers were set to 0 (maybe task sleeper_ufps0-0)
>>>>>>
>>>>>> if meet more questions just write to me, thanks!
>>>>>>
>>>>>> BR fino
>>>>>>
>>>>>
>>>>> I can reproduce in KVM and poked around a bit, though without finding
>>>>> the needle yet. Likely, there are multiple aspects. The change in
>>>>> upstream to FPU switching on user-return is a hot lead, but it takes a
>>>>> bit to fully grasp that and map it on our scenarios with Xenomai.
>>>>>
>>>>> Jan
>>>>
>>>> it seems that, switch_fpu_prepare() and switch_fpu_finish() are
>>>> for kernel thread context switch (in __switch_to() )and switch_fpu_return() is needed
>>>> before return to userspace( in prepare_exit_to_usermode()).
>>>>
>>>
>>> Yes, we need explicit switch_fpu_return() (likely open-coded, to skip
>>> the PF_KTHREAD check) at the end of xnarch_switch_to, at least as long
>>> as we do not add that to all fast (primary-mode) return-to-user paths.
>>>
>>> But it's more complex. The removal of fpu_initialized changed the
>>> condition under which __switch_to() does FPU saving and restoring: All
>>> kernel threads, also ours, are excluded. That needs to be compensated.
>>>
>>> But I'm still facing corruptions - continuing to debug.
>>>
>>
>> Quick update:
>>
>> I made some progress with changes like below, but I'm still facing 
>> issues, not with weird AVX register corruptions. They confuse me because 
>> classic FPU registers are updated and saved/restored the same way, but 
>> they are currently unaffected.
>>
>> Jan
> 
> in my current understand, 
> a userspace Xenomai/Cobalt process's context switch always need FPU
> state save/restore; but how about the other case?
> 
> in vanilla kernel, I see if a pure kernel thread want to use FPU, need
> manually call kernel_fpu_begin() and kernel_fpu_end(), like a critical
> area.

Xenomai kernel threads can use the FPU, and that without
kernel_fpu_begin/end. That this works is also tested by switchtest, and
there were several issues, possibly there are still more.

One step further: My weird avx register corruption is understand. It was
the local instrumentation. xnftrace_printf likely uses xmm regs
internally, and I had such an output after setting up the test pattern.
Fixing that, I still have a corruption, but not a "normal one" again,
ie. of the legacy FPU regs.

Jan

-- 
Siemens AG, T RDA IOT
Corporate Competence Center Embedded Linux


  reply	other threads:[~2020-10-22  6:27 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-10-14 13:25 build scripts for the WIP xenomai porting to kernel 5.4 Fino Meng
2020-10-15 14:20 ` Jan Kiszka
2020-10-15 14:30   ` Jan Kiszka
2020-10-16  3:36   ` Fino Meng
2020-10-18 21:41     ` Jan Kiszka
2020-10-21  6:36       ` Jan Kiszka
2020-10-21 11:43         ` Fino Meng
2020-10-22  6:27           ` Jan Kiszka [this message]
2020-10-22  7:26             ` Jan Kiszka
2020-10-22  7:38               ` Fino Meng
2020-10-22 11:49               ` Fino Meng
2020-10-22 12:15                 ` Jan Kiszka
2020-10-22 13:25                   ` Fino Meng
2020-10-22 15:22                     ` Jan Kiszka
2020-10-22 16:02                       ` Jan Kiszka
2020-10-23  9:04                       ` Fino Meng
2020-10-23 12:29                         ` Jan Kiszka
2020-10-24  3:59                           ` Fino Meng
2020-10-26  7:35                         ` Jan Kiszka
2020-10-26  8:12                           ` Fino Meng
2020-10-26  8:20                             ` Jan Kiszka
2020-10-26  8:25                               ` Jan Kiszka
2020-10-26  8:26                               ` Fino Meng
2020-10-26  8:38                                 ` Jan Kiszka
2020-10-26  9:15                                   ` Fino Meng
2020-10-26  9:20                                     ` Jan Kiszka
2020-10-27  5:23                                       ` Fino Meng
2020-10-27  6:01                                         ` Jan Kiszka
2020-10-27  6:44                                           ` Fino Meng
2020-10-27  6:50                                             ` Jan Kiszka

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=88232cd0-0713-4e45-bad2-e22acdeb7632@siemens.com \
    --to=jan.kiszka@siemens.com \
    --cc=fino.meng@linux.intel.com \
    --cc=xenomai@xenomai.org \
    /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.