Re: [PATCH RFC] m68k: skip kernel premption if interrupts were disabled

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Finn,

see below (hopefully not whitespace-damaged).

The set_fc warning is specific to 040 but the bad kernel buserror (null pointer) causing it isn't. But testing on 030 would be a good idea if you have one with enough RAM. Haven't tried to boot my Falcon with a preempt enabled kernel yet.

Cheers,

    Michael


diff --git a/arch/m68k/mm/motorola.c b/arch/m68k/mm/motorola.c
index 4d4d390a2df2..96cdcacb94ea 100644
--- a/arch/m68k/mm/motorola.c
+++ b/arch/m68k/mm/motorola.c
@@ -15,6 +15,7 @@
 #include <linux/mm.h>
 #include <linux/swap.h>
 #include <linux/kernel.h>
+#include <linux/preempt.h>
 #include <linux/string.h>
 #include <linux/types.h>
 #include <linux/init.h>
@@ -195,6 +196,8 @@ int free_pointer_table(void *table, int type)
        unsigned long page = ptable & PAGE_MASK;
        unsigned int mask = 1U << ((ptable - page)/ptable_size(type));

+       preempt_disable();
+
        dp = PD_PTABLE(page);
        if (PD_MARKBITS (dp) & mask) {
                pr_err("saved from last preempt: nr %x sr %lx %x pc %lx sp %lx\n",
@@ -213,6 +216,7 @@ int free_pointer_table(void *table, int type)
                if (type == TABLE_PTE)
                        pagetable_pte_dtor(virt_to_ptdesc((void *)page));
                free_page (page);
+               sched_preempt_enable_no_resched();
                return 1;
        } else if (ptable_list[type].next != dp) {
                /*
@@ -221,6 +225,7 @@ int free_pointer_table(void *table, int type)
                 */
                list_move(dp, &ptable_list[type]);
        }
+       sched_preempt_enable_no_resched();
        return 0;
 }


On 26/03/24 11:28, Finn Thain wrote:
On Mon, 25 Mar 2024, Michael Schmitz wrote:

Unfortunately, when I add preempt_disable()/
sched_preempt_enable_noresched() in free_pointer_table(), I don't get
that particular panic() anymore,
I'd like to try that patch. Would you send it please?

but the bad kernel buserror with the warning from set_fc() that you
reported...
I think those set_fc() calls are confined to 68040 fault handling. Maybe
we should try running stress tests on a 68030?




[Index of Archives]     [Video for Linux]     [Yosemite News]     [Linux S/390]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux