From: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
To: Huacai Chen <chenhc@lemote.com>
Cc: Jiaxun Yang <jiaxun.yang@flygoat.com>,
"open list:MIPS" <linux-mips@vger.kernel.org>,
Fuxin Zhang <zhangfx@lemote.com>,
Zhangjin Wu <wuzhangjin@gmail.com>
Subject: Re: [PATCH V3 1/2] MIPS: Loongson-3: Enable COP2 usage in kernel
Date: Tue, 11 Aug 2020 14:06:45 +0200 [thread overview]
Message-ID: <20200811120645.GA6199@alpha.franken.de> (raw)
In-Reply-To: <CAAhV-H7xJXX7V18ZUKw6RdEOtKUF49itrXY0PBNFAcSBbr4idQ@mail.gmail.com>
On Tue, Aug 11, 2020 at 02:45:05PM +0800, Huacai Chen wrote:
> Hi, Thomas and Jiaxun,
>
> On Tue, Aug 11, 2020 at 10:18 AM Jiaxun Yang <jiaxun.yang@flygoat.com> wrote:
> >
> >
> >
> > 在 2020/8/10 22:12, Thomas Bogendoerfer 写道:
> > > On Sun, Aug 09, 2020 at 10:53:13PM +0800, Jiaxun Yang wrote:
> > >> Thus we still need to enable CU2 with exception for user space, and we can
> > >> always enable CU2 in
> > >> kernel since kernel won't be compiled with hard-float. :-)
> > > I see, how about the patch below
> > That looks fine for me.
> > Is it good with you, Huacai?
>
> There are two problems:
> 1, zboot (arch/mips/boot/compressed/head.S) should be considered,
> because the initial value of Status may or may not contain CU2.
this comes with it's own memcpy/memset and stuff, I don't see a reason why
COP2 needs to be enabled there,
> 2, r4k_switch.S should set CU2 for the new process, otherwise it
> cannot use gslq/gssq while it in kernel (Because the new process
> doesn't contain CU2 in THERAD_STATUS.
which is correct for all user space process, otherwise the whole
cop2 exception thing wouldn't work. And if cop2 exception handling
has been run it's set in THREAD_STATUS.
> Though a process sets CU2 when it enters kernel, but it
> only sets CU2 in hardware, not in THREAD_STATUS).
A kernel thread will get THREAD_STATUS from current running kernel code,
at least that's how I read this code:
if (unlikely(p->flags & PF_KTHREAD)) {
/* kernel thread */
unsigned long status = p->thread.cp0_status;
memset(childregs, 0, sizeof(struct pt_regs));
ti->addr_limit = KERNEL_DS;
p->thread.reg16 = usp; /* fn */
p->thread.reg17 = kthread_arg;
p->thread.reg29 = childksp;
p->thread.reg31 = (unsigned long) ret_from_kernel_thread;
#if defined(CONFIG_CPU_R3000) || defined(CONFIG_CPU_TX39XX)
status = (status & ~(ST0_KUP | ST0_IEP | ST0_IEC)) |
((status & (ST0_KUC | ST0_IEC)) << 2);
#else
status |= ST0_EXL;
#endif
childregs->cp0_status = status;
return 0;
}
If there is still something missing, I want to find the root cause
and not paper over it in r4k_switch.S and IMHO break COP2 handling for
loongsoon completely.
Thomas.
--
Crap can work. Given enough thrust pigs will fly, but it's not necessarily a
good idea. [ RFC1925, 2.3 ]
next prev parent reply other threads:[~2020-08-11 12:07 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-05-02 4:55 [PATCH V3 1/2] MIPS: Loongson-3: Enable COP2 usage in kernel Huacai Chen
2020-05-02 4:55 ` [PATCH V3 2/2] MIPS: Loongson-3: Calculate ra properly when unwinding the stack Huacai Chen
2020-05-06 5:29 ` [PATCH V3 1/2] MIPS: Loongson-3: Enable COP2 usage in kernel Jiaxun Yang
2020-08-01 7:59 ` Huacai Chen
2020-08-05 12:10 ` Thomas Bogendoerfer
2020-08-05 13:51 ` Jiaxun Yang
2020-08-06 1:15 ` Huacai Chen
2020-08-07 13:13 ` Thomas Bogendoerfer
2020-08-07 13:25 ` Jiaxun Yang
2020-08-07 13:36 ` Thomas Bogendoerfer
2020-08-09 14:53 ` Jiaxun Yang
2020-08-10 14:12 ` Thomas Bogendoerfer
2020-08-11 2:16 ` Jiaxun Yang
2020-08-11 6:45 ` Huacai Chen
2020-08-11 12:06 ` Thomas Bogendoerfer [this message]
2020-08-14 9:44 ` Huacai Chen
2020-08-14 13:16 ` Jiaxun Yang
2020-08-26 12:46 ` Thomas Bogendoerfer
2020-08-27 3:48 ` Huacai Chen
2020-08-28 8:42 ` Thomas Bogendoerfer
2020-08-28 9:21 ` Huacai Chen
2020-08-28 9:33 ` Thomas Bogendoerfer
2020-08-28 9:52 ` Huacai Chen
2020-08-28 11:12 ` Thomas Bogendoerfer
2020-09-02 6:54 ` Huacai Chen
2020-09-03 8:43 ` Thomas Bogendoerfer
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=20200811120645.GA6199@alpha.franken.de \
--to=tsbogend@alpha.franken.de \
--cc=chenhc@lemote.com \
--cc=jiaxun.yang@flygoat.com \
--cc=linux-mips@vger.kernel.org \
--cc=wuzhangjin@gmail.com \
--cc=zhangfx@lemote.com \
/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.