What is the concept of bust_spinlocks()
In do_kernel_fault() function of ARM 64, we can see the following code

https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/arch/arm64/mm/fault.c?id=refs/tags/v3.19#n85

static void __do_kernel_fault(struct mm_struct *mm, unsigned long addr,
                              unsigned int esr, struct pt_regs *regs){
        /*       * Are we prepared to handle this kernel fault?  */
        if (fixup_exception(regs))
                return;

        /*       * No handler, we'll have to terminate things with extreme
prejudice.       */*    bust_spinlocks(1);*
        pr_alert("Unable to handle kernel %s at virtual address %08lx\n",
                 (addr < PAGE_SIZE) ? "NULL pointer dereference" :
                 "paging request", addr);

        show_pte(mm, addr);
        die("Oops", regs, esr);
        bust_spinlocks(0);
        do_exit(SIGKILL);}


I have looked into its definition. It is as follows:

void __attribute__((weak)) bust_spinlocks(int yes){
        if (yes) {
                ++oops_in_progress;
        } else {#ifdef CONFIG_VT
                unblank_screen();#endif
                console_unblank();
                if (--oops_in_progress == 0)
                        wake_up_klogd();
        }}

So basically when i am saying bust_spinlocks(1), it is just
incrementing the oops)_in_progress variable. How is it serving the
purposr of a lock here?

Best Regards,

Manty
_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@kernelnewbies.org
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

Reply via email to