aboutsummaryrefslogblamecommitdiffstats
path: root/REPORTING-BUGS
blob: ab0c56630a8cb5924813a196b1b2be763f51d5b6 (plain) (tree)
1
2
3
4
5
6
7
8
9
10
11










                                                                         
                                                                        





                                                                        


                                                                         
                                                    




                                                                          


                                                                            







                                                                           
                                                              
 
                                     

                                                  


                                           

                                                                       
                                                  
                                                               
                          







                                                                          





                                                                 
[Some of this is taken from Frohwalt Egerer's original linux-kernel FAQ]

     What follows is a suggested procedure for reporting Linux bugs. You
aren't obliged to use the bug reporting format, it is provided as a guide
to the kind of information that can be useful to developers - no more.

     If the failure includes an "OOPS:" type message in your log or on
screen please read "Documentation/oops-tracing.txt" before posting your
bug report. This explains what you should do with the "Oops" information
to make it useful to the recipient.

      Send the output to the maintainer of the kernel area that seems to
be involved with the problem, and cc the relevant mailing list. Don't
worry too much about getting the wrong person. If you are unsure send it
to the person responsible for the code relevant to what you were doing.
If it occurs repeatably try and describe how to recreate it. That is
worth even more than the oops itself.  The list of maintainers and
mailing lists is in the MAINTAINERS file in this directory.

      If it is a security bug, please copy the Security Contact listed
in the MAINTAINERS file.  They can help coordinate bugfix and disclosure.
See Documentation/SecurityBugs for more information.

      If you are totally stumped as to whom to send the report, send it to
linux-kernel@vger.kernel.org. (For more information on the linux-kernel
mailing list see http://www.tux.org/lkml/).

This is a suggested format for a bug report sent to the Linux kernel mailing
list. Having a standardized bug report form makes it easier for you not to
overlook things, and easier for the developers to find the pieces of
information they're really interested in. Don't feel you have to follow it.

      First run the ver_linux script included as scripts/ver_linux, which
reports the version of some important subsystems.  Run this script with
the command "sh scripts/ver_linux".

Use that information to fill in all fields of the bug report form, and
post it to the mailing list with a subject of "PROBLEM: <one line
summary from [1.]>" for easy identification by the developers.

[1.] One line summary of the problem:
[2.] Full description of the problem/report:
[3.] Keywords (i.e., modules, networking, kernel):
[4.] Kernel information
[4.1.] Kernel version (from /proc/version):
[4.2.] Kernel .config file:
[5.] Most recent kernel version which did not have the bug:
[6.] Output of Oops.. message (if applicable) with symbolic information
     resolved (see Documentation/oops-tracing.txt)
[7.] A small shell script or example program which triggers the
     problem (if possible)
[8.] Environment
[8.1.] Software (add the output of the ver_linux script here)
[8.2.] Processor information (from /proc/cpuinfo):
[8.3.] Module information (from /proc/modules):
[8.4.] Loaded driver and hardware information (/proc/ioports, /proc/iomem)
[8.5.] PCI information ('lspci -vvv' as root)
[8.6.] SCSI information (from /proc/scsi/scsi)
[8.7.] Other information that might be relevant to the problem
       (please look in /proc and include all information that you
       think to be relevant):
[X.] Other notes, patches, fixes, workarounds:


Thank you
} } } printk("-- per-TC State --\n"); for (tc = 0; tc < ntc; tc++) { settc(tc); if (read_tc_c0_tcbind() == read_c0_tcbind()) { /* Are we dumping ourself? */ haltval = 0; /* Then we're not halted, and mustn't be */ tcstatval = flags; /* And pre-dump TCStatus is flags */ printk(" TC %d (current TC with VPE EPC above)\n", tc); } else { haltval = read_tc_c0_tchalt(); write_tc_c0_tchalt(1); tcstatval = read_tc_c0_tcstatus(); printk(" TC %d\n", tc); } printk(" TCStatus : %08lx\n", tcstatval); printk(" TCBind : %08lx\n", read_tc_c0_tcbind()); printk(" TCRestart : %08lx %pS\n", read_tc_c0_tcrestart(), (void *) read_tc_c0_tcrestart()); printk(" TCHalt : %08lx\n", haltval); printk(" TCContext : %08lx\n", read_tc_c0_tccontext()); if (!haltval) write_tc_c0_tchalt(0); } #ifdef CONFIG_MIPS_MT_SMTC smtc_soft_dump(); #endif /* CONFIG_MIPT_MT_SMTC */ printk("===========================\n"); evpe(vpflags); local_irq_restore(flags); } static int mt_opt_norps; static int mt_opt_rpsctl = -1; static int mt_opt_nblsu = -1; static int mt_opt_forceconfig7; static int mt_opt_config7 = -1; static int __init rps_disable(char *s) { mt_opt_norps = 1; return 1; } __setup("norps", rps_disable); static int __init rpsctl_set(char *str) { get_option(&str, &mt_opt_rpsctl); return 1; } __setup("rpsctl=", rpsctl_set); static int __init nblsu_set(char *str) { get_option(&str, &mt_opt_nblsu); return 1; } __setup("nblsu=", nblsu_set); static int __init config7_set(char *str) { get_option(&str, &mt_opt_config7); mt_opt_forceconfig7 = 1; return 1; } __setup("config7=", config7_set); /* Experimental cache flush control parameters that should go away some day */ int mt_protiflush; int mt_protdflush; int mt_n_iflushes = 1; int mt_n_dflushes = 1; static int __init set_protiflush(char *s) { mt_protiflush = 1; return 1; } __setup("protiflush", set_protiflush); static int __init set_protdflush(char *s) { mt_protdflush = 1; return 1; } __setup("protdflush", set_protdflush); static int __init niflush(char *s) { get_option(&s, &mt_n_iflushes); return 1; } __setup("niflush=", niflush); static int __init ndflush(char *s) { get_option(&s, &mt_n_dflushes); return 1; } __setup("ndflush=", ndflush); static unsigned int itc_base; static int __init set_itc_base(char *str) { get_option(&str, &itc_base); return 1; } __setup("itcbase=", set_itc_base); void mips_mt_set_cpuoptions(void) { unsigned int oconfig7 = read_c0_config7(); unsigned int nconfig7 = oconfig7; if (mt_opt_norps) { printk("\"norps\" option deprectated: use \"rpsctl=\"\n"); } if (mt_opt_rpsctl >= 0) { printk("34K return prediction stack override set to %d.\n", mt_opt_rpsctl); if (mt_opt_rpsctl) nconfig7 |= (1 << 2); else nconfig7 &= ~(1 << 2); } if (mt_opt_nblsu >= 0) { printk("34K ALU/LSU sync override set to %d.\n", mt_opt_nblsu); if (mt_opt_nblsu) nconfig7 |= (1 << 5); else nconfig7 &= ~(1 << 5); } if (mt_opt_forceconfig7) { printk("CP0.Config7 forced to 0x%08x.\n", mt_opt_config7); nconfig7 = mt_opt_config7; } if (oconfig7 != nconfig7) { __asm__ __volatile("sync"); write_c0_config7(nconfig7); ehb(); printk("Config7: 0x%08x\n", read_c0_config7()); } /* Report Cache management debug options */ if (mt_protiflush) printk("I-cache flushes single-threaded\n"); if (mt_protdflush) printk("D-cache flushes single-threaded\n"); if (mt_n_iflushes != 1) printk("I-Cache Flushes Repeated %d times\n", mt_n_iflushes); if (mt_n_dflushes != 1) printk("D-Cache Flushes Repeated %d times\n", mt_n_dflushes); if (itc_base != 0) { /* * Configure ITC mapping. This code is very * specific to the 34K core family, which uses * a special mode bit ("ITC") in the ErrCtl * register to enable access to ITC control * registers via cache "tag" operations. */ unsigned long ectlval; unsigned long itcblkgrn; /* ErrCtl register is known as "ecc" to Linux */ ectlval = read_c0_ecc(); write_c0_ecc(ectlval | (0x1 << 26)); ehb(); #define INDEX_0 (0x80000000) #define INDEX_8 (0x80000008) /* Read "cache tag" for Dcache pseudo-index 8 */ cache_op(Index_Load_Tag_D, INDEX_8); ehb(); itcblkgrn = read_c0_dtaglo(); itcblkgrn &= 0xfffe0000; /* Set for 128 byte pitch of ITC cells */ itcblkgrn |= 0x00000c00; /* Stage in Tag register */ write_c0_dtaglo(itcblkgrn); ehb(); /* Write out to ITU with CACHE op */ cache_op(Index_Store_Tag_D, INDEX_8); /* Now set base address, and turn ITC on with 0x1 bit */ write_c0_dtaglo((itc_base & 0xfffffc00) | 0x1 ); ehb(); /* Write out to ITU with CACHE op */ cache_op(Index_Store_Tag_D, INDEX_0); write_c0_ecc(ectlval); ehb(); printk("Mapped %ld ITC cells starting at 0x%08x\n", ((itcblkgrn & 0x7fe00000) >> 20), itc_base); } } /* * Function to protect cache flushes from concurrent execution * depends on MP software model chosen. */ void mt_cflush_lockdown(void) { #ifdef CONFIG_MIPS_MT_SMTC void smtc_cflush_lockdown(void); smtc_cflush_lockdown(); #endif /* CONFIG_MIPS_MT_SMTC */ /* FILL IN VSMP and AP/SP VERSIONS HERE */ } void mt_cflush_release(void) { #ifdef CONFIG_MIPS_MT_SMTC void smtc_cflush_release(void); smtc_cflush_release(); #endif /* CONFIG_MIPS_MT_SMTC */ /* FILL IN VSMP and AP/SP VERSIONS HERE */ } struct class *mt_class; static int __init mt_init(void) { struct class *mtc; mtc = class_create(THIS_MODULE, "mt"); if (IS_ERR(mtc)) return PTR_ERR(mtc); mt_class = mtc; return 0; } subsys_initcall(mt_init);