Re: [PATCH 12/12] pm80xx : Modified the logic to collect fatal dump.

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

 



Hi Deepak,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on mkp-scsi/for-next]
[cannot apply to v5.4-rc5 next-20191031]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Deepak-Ukey/pm80xx-Updates-for-the-driver-version-0-1-39/20191102-082024
base:   https://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git for-next
config: mips-allmodconfig (attached as .config)
compiler: mips-linux-gcc (GCC) 7.4.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        GCC_VERSION=7.4.0 make.cross ARCH=mips 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@xxxxxxxxx>

All warnings (new ones prefixed by >>):

   In file included from drivers/scsi/pm8001/pm80xx_hwi.c:42:0:
   drivers/scsi/pm8001/pm80xx_hwi.c: In function 'pm80xx_get_fatal_dump':
>> include/linux/kern_levels.h:5:18: warning: format '%lx' expects argument of type 'long unsigned int', but argument 5 has type 'int' [-Wformat=]
    #define KERN_SOH "\001"  /* ASCII Start Of Header */
                     ^
   drivers/scsi/pm8001/pm8001_sas.h:78:4: note: in definition of macro 'PM8001_CHECK_LOGGING'
       CMD;    \
       ^~~
>> drivers/scsi/pm8001/pm80xx_hwi.c:239:4: note: in expansion of macro 'PM8001_IO_DBG'
       PM8001_IO_DBG(pm8001_ha,
       ^~~~~~~~~~~~~
   include/linux/kern_levels.h:14:19: note: in expansion of macro 'KERN_SOH'
    #define KERN_INFO KERN_SOH "6" /* informational */
                      ^~~~~~~~
   include/linux/printk.h:311:9: note: in expansion of macro 'KERN_INFO'
     printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
            ^~~~~~~~~
>> drivers/scsi/pm8001/pm8001_sas.h:72:39: note: in expansion of macro 'pr_info'
    #define pm8001_printk(format, arg...) pr_info("%s:: %s  %d:" \
                                          ^~~~~~~
>> drivers/scsi/pm8001/pm80xx_hwi.c:240:4: note: in expansion of macro 'pm8001_printk'
       pm8001_printk("get_fatal_spcv: return1 0x%lx\n",
       ^~~~~~~~~~~~~
   drivers/scsi/pm8001/pm80xx_hwi.c:240:47: note: format string is defined here
       pm8001_printk("get_fatal_spcv: return1 0x%lx\n",
                                                ~~^
                                                %x
   In file included from drivers/scsi/pm8001/pm80xx_hwi.c:42:0:
>> include/linux/kern_levels.h:5:18: warning: format '%lx' expects argument of type 'long unsigned int', but argument 5 has type 'int' [-Wformat=]
    #define KERN_SOH "\001"  /* ASCII Start Of Header */
                     ^
   drivers/scsi/pm8001/pm8001_sas.h:78:4: note: in definition of macro 'PM8001_CHECK_LOGGING'
       CMD;    \
       ^~~
   drivers/scsi/pm8001/pm80xx_hwi.c:261:4: note: in expansion of macro 'PM8001_IO_DBG'
       PM8001_IO_DBG(pm8001_ha,
       ^~~~~~~~~~~~~
   include/linux/kern_levels.h:14:19: note: in expansion of macro 'KERN_SOH'
    #define KERN_INFO KERN_SOH "6" /* informational */
                      ^~~~~~~~
   include/linux/printk.h:311:9: note: in expansion of macro 'KERN_INFO'
     printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
            ^~~~~~~~~
>> drivers/scsi/pm8001/pm8001_sas.h:72:39: note: in expansion of macro 'pr_info'
    #define pm8001_printk(format, arg...) pr_info("%s:: %s  %d:" \
                                          ^~~~~~~
   drivers/scsi/pm8001/pm80xx_hwi.c:262:4: note: in expansion of macro 'pm8001_printk'
       pm8001_printk("get_fatal_spcv: return2 0x%lx\n",
       ^~~~~~~~~~~~~
   drivers/scsi/pm8001/pm80xx_hwi.c:262:47: note: format string is defined here
       pm8001_printk("get_fatal_spcv: return2 0x%lx\n",
                                                ~~^
                                                %x
   In file included from drivers/scsi/pm8001/pm80xx_hwi.c:42:0:
>> include/linux/kern_levels.h:5:18: warning: format '%lx' expects argument of type 'long unsigned int', but argument 5 has type 'int' [-Wformat=]
    #define KERN_SOH "\001"  /* ASCII Start Of Header */
                     ^
   drivers/scsi/pm8001/pm8001_sas.h:78:4: note: in definition of macro 'PM8001_CHECK_LOGGING'
       CMD;    \
       ^~~
   drivers/scsi/pm8001/pm80xx_hwi.c:287:3: note: in expansion of macro 'PM8001_IO_DBG'
      PM8001_IO_DBG(pm8001_ha,
      ^~~~~~~~~~~~~
   include/linux/kern_levels.h:14:19: note: in expansion of macro 'KERN_SOH'
    #define KERN_INFO KERN_SOH "6" /* informational */
                      ^~~~~~~~
   include/linux/printk.h:311:9: note: in expansion of macro 'KERN_INFO'
     printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
            ^~~~~~~~~
>> drivers/scsi/pm8001/pm8001_sas.h:72:39: note: in expansion of macro 'pr_info'
    #define pm8001_printk(format, arg...) pr_info("%s:: %s  %d:" \
                                          ^~~~~~~
   drivers/scsi/pm8001/pm80xx_hwi.c:288:3: note: in expansion of macro 'pm8001_printk'
      pm8001_printk("get_fatal_spcv: return3 0x%lx\n",
      ^~~~~~~~~~~~~
   drivers/scsi/pm8001/pm80xx_hwi.c:288:46: note: format string is defined here
      pm8001_printk("get_fatal_spcv: return3 0x%lx\n",
                                               ~~^
                                               %x
   In file included from drivers/scsi/pm8001/pm80xx_hwi.c:42:0:
>> include/linux/kern_levels.h:5:18: warning: format '%lx' expects argument of type 'long unsigned int', but argument 5 has type 'int' [-Wformat=]
    #define KERN_SOH "\001"  /* ASCII Start Of Header */
                     ^
   drivers/scsi/pm8001/pm8001_sas.h:78:4: note: in definition of macro 'PM8001_CHECK_LOGGING'
       CMD;    \
       ^~~
   drivers/scsi/pm8001/pm80xx_hwi.c:385:2: note: in expansion of macro 'PM8001_IO_DBG'
     PM8001_IO_DBG(pm8001_ha,
     ^~~~~~~~~~~~~
   include/linux/kern_levels.h:14:19: note: in expansion of macro 'KERN_SOH'
    #define KERN_INFO KERN_SOH "6" /* informational */
                      ^~~~~~~~
   include/linux/printk.h:311:9: note: in expansion of macro 'KERN_INFO'
     printk(KERN_INFO pr_fmt(fmt), ##__VA_ARGS__)
            ^~~~~~~~~
>> drivers/scsi/pm8001/pm8001_sas.h:72:39: note: in expansion of macro 'pr_info'
    #define pm8001_printk(format, arg...) pr_info("%s:: %s  %d:" \
                                          ^~~~~~~
   drivers/scsi/pm8001/pm80xx_hwi.c:386:3: note: in expansion of macro 'pm8001_printk'
      pm8001_printk("get_fatal_spcv: return4 0x%lx\n",
      ^~~~~~~~~~~~~
   drivers/scsi/pm8001/pm80xx_hwi.c:386:46: note: format string is defined here
      pm8001_printk("get_fatal_spcv: return4 0x%lx\n",
                                               ~~^
                                               %x

vim +/PM8001_IO_DBG +239 drivers/scsi/pm8001/pm80xx_hwi.c

  > 42	 #include "pm8001_sas.h"
    43	 #include "pm80xx_hwi.h"
    44	 #include "pm8001_chips.h"
    45	 #include "pm8001_ctl.h"
    46	
    47	#define SMP_DIRECT 1
    48	#define SMP_INDIRECT 2
    49	
    50	
    51	int pm80xx_bar4_shift(struct pm8001_hba_info *pm8001_ha, u32 shift_value)
    52	{
    53		u32 reg_val;
    54		unsigned long start;
    55		pm8001_cw32(pm8001_ha, 0, MEMBASE_II_SHIFT_REGISTER, shift_value);
    56		/* confirm the setting is written */
    57		start = jiffies + HZ; /* 1 sec */
    58		do {
    59			reg_val = pm8001_cr32(pm8001_ha, 0, MEMBASE_II_SHIFT_REGISTER);
    60		} while ((reg_val != shift_value) && time_before(jiffies, start));
    61		if (reg_val != shift_value) {
    62			PM8001_FAIL_DBG(pm8001_ha,
    63				pm8001_printk("TIMEOUT:MEMBASE_II_SHIFT_REGISTER"
    64				" = 0x%x\n", reg_val));
    65			return -1;
    66		}
    67		return 0;
    68	}
    69	
    70	void pm80xx_pci_mem_copy(struct pm8001_hba_info  *pm8001_ha, u32 soffset,
    71					const void *destination,
    72					u32 dw_count, u32 bus_base_number)
    73	{
    74		u32 index, value, offset;
    75		u32 *destination1;
    76		destination1 = (u32 *)destination;
    77	
    78		for (index = 0; index < dw_count; index += 4, destination1++) {
    79			offset = (soffset + index);
    80			if (offset < (64 * 1024)) {
    81				value = pm8001_cr32(pm8001_ha, bus_base_number, offset);
    82				*destination1 =  cpu_to_le32(value);
    83			}
    84		}
    85		return;
    86	}
    87	
    88	ssize_t pm80xx_get_fatal_dump(struct device *cdev,
    89		struct device_attribute *attr, char *buf)
    90	{
    91		struct Scsi_Host *shost = class_to_shost(cdev);
    92		struct sas_ha_struct *sha = SHOST_TO_SAS_HA(shost);
    93		struct pm8001_hba_info *pm8001_ha = sha->lldd_ha;
    94		void __iomem *fatal_table_address = pm8001_ha->fatal_tbl_addr;
    95		u32 accum_len , reg_val, index, *temp;
    96		u32 status = 1;
    97		unsigned long start;
    98		u8 *direct_data;
    99		char *fatal_error_data = buf;
   100		u32 length_to_read;
   101	
   102		pm8001_ha->forensic_info.data_buf.direct_data = buf;
   103		if (pm8001_ha->chip_id == chip_8001) {
   104			pm8001_ha->forensic_info.data_buf.direct_data +=
   105				sprintf(pm8001_ha->forensic_info.data_buf.direct_data,
   106				"Not supported for SPC controller");
   107			return (char *)pm8001_ha->forensic_info.data_buf.direct_data -
   108				(char *)buf;
   109		}
   110		/* initialize variables for very first call from host application */
   111		if (pm8001_ha->forensic_info.data_buf.direct_offset == 0) {
   112			PM8001_IO_DBG(pm8001_ha,
   113			pm8001_printk("forensic_info TYPE_NON_FATAL..............\n"));
   114			direct_data = (u8 *)fatal_error_data;
   115			pm8001_ha->forensic_info.data_type = TYPE_NON_FATAL;
   116			pm8001_ha->forensic_info.data_buf.direct_len = SYSFS_OFFSET;
   117			pm8001_ha->forensic_info.data_buf.direct_offset = 0;
   118			pm8001_ha->forensic_info.data_buf.read_len = 0;
   119			pm8001_ha->forensic_preserved_accumulated_transfer = 0;
   120	
   121			/* Write signature to fatal dump table */
   122			pm8001_mw32(fatal_table_address,
   123					MPI_FATAL_EDUMP_TABLE_SIGNATURE, 0x1234abcd);
   124	
   125			pm8001_ha->forensic_info.data_buf.direct_data = direct_data;
   126			PM8001_IO_DBG(pm8001_ha,
   127				pm8001_printk("ossaHwCB: status1 %d\n", status));
   128			PM8001_IO_DBG(pm8001_ha,
   129				pm8001_printk("ossaHwCB: read_len 0x%x\n",
   130				pm8001_ha->forensic_info.data_buf.read_len));
   131			PM8001_IO_DBG(pm8001_ha,
   132				pm8001_printk("ossaHwCB: direct_len 0x%x\n",
   133				pm8001_ha->forensic_info.data_buf.direct_len));
   134			PM8001_IO_DBG(pm8001_ha,
   135				pm8001_printk("ossaHwCB: direct_offset 0x%x\n",
   136				pm8001_ha->forensic_info.data_buf.direct_offset));
   137		}
   138		if (pm8001_ha->forensic_info.data_buf.direct_offset == 0) {
   139			/* start to get data */
   140			/* Program the MEMBASE II Shifting Register with 0x00.*/
   141			pm8001_cw32(pm8001_ha, 0, MEMBASE_II_SHIFT_REGISTER,
   142					pm8001_ha->fatal_forensic_shift_offset);
   143			pm8001_ha->forensic_last_offset = 0;
   144			pm8001_ha->forensic_fatal_step = 0;
   145			pm8001_ha->fatal_bar_loc = 0;
   146		}
   147	
   148		/* Read until accum_len is retrived */
   149		accum_len = pm8001_mr32(fatal_table_address,
   150					MPI_FATAL_EDUMP_TABLE_ACCUM_LEN);
   151		/* Determine length of data between previously stored transfer length
   152		 * and current accumulated transfer length
   153		 */
   154		length_to_read =
   155			accum_len - pm8001_ha->forensic_preserved_accumulated_transfer;
   156		PM8001_IO_DBG(pm8001_ha,
   157			pm8001_printk("get_fatal_spcv: accum_len 0x%x\n", accum_len));
   158		PM8001_IO_DBG(pm8001_ha,
   159			pm8001_printk("get_fatal_spcv: length_to_read 0x%x\n",
   160			length_to_read));
   161		PM8001_IO_DBG(pm8001_ha,
   162			pm8001_printk("get_fatal_spcv: last_offset 0x%x\n",
   163			pm8001_ha->forensic_last_offset));
   164		PM8001_IO_DBG(pm8001_ha,
   165			pm8001_printk("get_fatal_spcv: read_len 0x%x\n",
   166			pm8001_ha->forensic_info.data_buf.read_len));
   167		PM8001_IO_DBG(pm8001_ha,
   168			pm8001_printk("get_fatal_spcv:: direct_len 0x%x\n",
   169			pm8001_ha->forensic_info.data_buf.direct_len));
   170		PM8001_IO_DBG(pm8001_ha,
   171			pm8001_printk("get_fatal_spcv:: direct_offset 0x%x\n",
   172			pm8001_ha->forensic_info.data_buf.direct_offset));
   173	
   174		/* If accumulated length failed to read correctly fail the attempt.*/
   175		if (accum_len == 0xFFFFFFFF) {
   176			PM8001_IO_DBG(pm8001_ha,
   177				pm8001_printk("Possible PCI issue 0x%x not expected\n",
   178				accum_len));
   179			return status;
   180		}
   181		/* If accumulated length is zero fail the attempt */
   182		if (accum_len == 0) {
   183			pm8001_ha->forensic_info.data_buf.direct_data +=
   184				sprintf(pm8001_ha->forensic_info.data_buf.direct_data,
   185				"%08x ", 0xFFFFFFFF);
   186			return (char *)pm8001_ha->forensic_info.data_buf.direct_data -
   187				(char *)buf;
   188		}
   189		/* Accumulated length is good so start capturing the first data */
   190		temp = (u32 *)pm8001_ha->memoryMap.region[FORENSIC_MEM].virt_ptr;
   191		if (pm8001_ha->forensic_fatal_step == 0) {
   192	moreData:
   193			/* If data to read is less than SYSFS_OFFSET then reduce the
   194			 * length of dataLen
   195			 */
   196			if (pm8001_ha->forensic_last_offset + SYSFS_OFFSET
   197					> length_to_read) {
   198				pm8001_ha->forensic_info.data_buf.direct_len =
   199					length_to_read -
   200					pm8001_ha->forensic_last_offset;
   201			} else {
   202				pm8001_ha->forensic_info.data_buf.direct_len =
   203					SYSFS_OFFSET;
   204			}
   205			if (pm8001_ha->forensic_info.data_buf.direct_data) {
   206				/* Data is in bar, copy to host memory */
   207				pm80xx_pci_mem_copy(pm8001_ha,
   208				pm8001_ha->fatal_bar_loc,
   209				pm8001_ha->memoryMap.region[FORENSIC_MEM].virt_ptr,
   210				pm8001_ha->forensic_info.data_buf.direct_len, 1);
   211			}
   212			pm8001_ha->fatal_bar_loc +=
   213				pm8001_ha->forensic_info.data_buf.direct_len;
   214			pm8001_ha->forensic_info.data_buf.direct_offset +=
   215				pm8001_ha->forensic_info.data_buf.direct_len;
   216			pm8001_ha->forensic_last_offset	+=
   217				pm8001_ha->forensic_info.data_buf.direct_len;
   218			pm8001_ha->forensic_info.data_buf.read_len =
   219				pm8001_ha->forensic_info.data_buf.direct_len;
   220	
   221			if (pm8001_ha->forensic_last_offset  >= length_to_read) {
   222				pm8001_ha->forensic_info.data_buf.direct_data +=
   223				sprintf(pm8001_ha->forensic_info.data_buf.direct_data,
   224					"%08x ", 3);
   225				for (index = 0; index <
   226					(pm8001_ha->forensic_info.data_buf.direct_len
   227					 / 4); index++) {
   228					pm8001_ha->forensic_info.data_buf.direct_data +=
   229					sprintf(
   230					pm8001_ha->forensic_info.data_buf.direct_data,
   231					"%08x ", *(temp + index));
   232				}
   233	
   234				pm8001_ha->fatal_bar_loc = 0;
   235				pm8001_ha->forensic_fatal_step = 1;
   236				pm8001_ha->fatal_forensic_shift_offset = 0;
   237				pm8001_ha->forensic_last_offset	= 0;
   238				status = 0;
 > 239				PM8001_IO_DBG(pm8001_ha,
 > 240				pm8001_printk("get_fatal_spcv: return1 0x%lx\n",
   241				((char *)pm8001_ha->forensic_info.data_buf.direct_data
   242				- (char *)buf)));
   243				return (char *)pm8001_ha->
   244					forensic_info.data_buf.direct_data -
   245					(char *)buf;
   246			}
   247			if (pm8001_ha->fatal_bar_loc < (64 * 1024)) {
   248				pm8001_ha->forensic_info.data_buf.direct_data +=
   249					sprintf(pm8001_ha->
   250						forensic_info.data_buf.direct_data,
   251						"%08x ", 2);
   252				for (index = 0; index <
   253					(pm8001_ha->forensic_info.data_buf.direct_len
   254					 / 4); index++) {
   255					pm8001_ha->forensic_info.data_buf.direct_data
   256						+= sprintf(pm8001_ha->
   257						forensic_info.data_buf.direct_data,
   258						"%08x ", *(temp + index));
   259				}
   260				status = 0;
   261				PM8001_IO_DBG(pm8001_ha,
   262				pm8001_printk("get_fatal_spcv: return2 0x%lx\n",
   263				((char *)pm8001_ha->forensic_info.data_buf.direct_data
   264				- (char *)buf)));
   265				return (char *)pm8001_ha->
   266					forensic_info.data_buf.direct_data -
   267					(char *)buf;
   268			}
   269	
   270			/* Increment the MEMBASE II Shifting Register value by 0x100.*/
   271			pm8001_ha->forensic_info.data_buf.direct_data +=
   272				sprintf(pm8001_ha->forensic_info.data_buf.direct_data,
   273					"%08x ", 2);
   274			for (index = 0; index <
   275				(pm8001_ha->forensic_info.data_buf.direct_len
   276				 / 4) ; index++) {
   277				pm8001_ha->forensic_info.data_buf.direct_data +=
   278					sprintf(pm8001_ha->
   279					forensic_info.data_buf.direct_data,
   280					"%08x ", *(temp + index));
   281			}
   282			pm8001_ha->fatal_forensic_shift_offset += 0x100;
   283			pm8001_cw32(pm8001_ha, 0, MEMBASE_II_SHIFT_REGISTER,
   284				pm8001_ha->fatal_forensic_shift_offset);
   285			pm8001_ha->fatal_bar_loc = 0;
   286			status = 0;
   287			PM8001_IO_DBG(pm8001_ha,
   288			pm8001_printk("get_fatal_spcv: return3 0x%lx\n",
   289			((char *)pm8001_ha->forensic_info.data_buf.direct_data
   290			- (char *)buf)));
   291			return (char *)pm8001_ha->forensic_info.data_buf.direct_data -
   292				(char *)buf;
   293		}
   294		if (pm8001_ha->forensic_fatal_step == 1) {
   295			/* store previous accumulated length before triggering next
   296			 * accumulated length update
   297			 */
   298			pm8001_ha->forensic_preserved_accumulated_transfer =
   299				pm8001_mr32(fatal_table_address,
   300				MPI_FATAL_EDUMP_TABLE_ACCUM_LEN);
   301	
   302			/* continue capturing the fatal log until Dump status is 0x3 */
   303			if (pm8001_mr32(fatal_table_address,
   304				MPI_FATAL_EDUMP_TABLE_STATUS) <
   305				MPI_FATAL_EDUMP_TABLE_STAT_NF_SUCCESS_DONE) {
   306	
   307				/* reset fddstat bit by writing to zero*/
   308				pm8001_mw32(fatal_table_address,
   309						MPI_FATAL_EDUMP_TABLE_STATUS, 0x0);
   310	
   311				/* set dump control value to '1' so that new data will
   312				 * be transferred to shared memory
   313				 */
   314				pm8001_mw32(fatal_table_address,
   315					MPI_FATAL_EDUMP_TABLE_HANDSHAKE,
   316					MPI_FATAL_EDUMP_HANDSHAKE_RDY);
   317	
   318				/*Poll FDDHSHK  until clear */
   319				start = jiffies + (2 * HZ); /* 2 sec */
   320	
   321				do {
   322					reg_val = pm8001_mr32(fatal_table_address,
   323						MPI_FATAL_EDUMP_TABLE_HANDSHAKE);
   324				} while ((reg_val) && time_before(jiffies, start));
   325	
   326				if (reg_val != 0) {
   327					PM8001_FAIL_DBG(pm8001_ha, pm8001_printk(
   328					"TIMEOUT:MPI_FATAL_EDUMP_TABLE_HDSHAKE 0x%x\n",
   329					reg_val));
   330				       /* Fail the dump if a timeout occurs */
   331					pm8001_ha->forensic_info.data_buf.direct_data +=
   332					sprintf(
   333					pm8001_ha->forensic_info.data_buf.direct_data,
   334					"%08x ", 0xFFFFFFFF);
   335					return((char *)
   336					pm8001_ha->forensic_info.data_buf.direct_data
   337					- (char *)buf);
   338				}
   339				/* Poll status register until set to 2 or
   340				 * 3 for up to 2 seconds
   341				 */
   342				start = jiffies + (2 * HZ); /* 2 sec */
   343	
   344				do {
   345					reg_val = pm8001_mr32(fatal_table_address,
   346						MPI_FATAL_EDUMP_TABLE_STATUS);
   347				} while (((reg_val != 2) || (reg_val != 3)) &&
   348						time_before(jiffies, start));
   349	
   350				if (reg_val < 2) {
   351					PM8001_FAIL_DBG(pm8001_ha, pm8001_printk(
   352					"TIMEOUT:MPI_FATAL_EDUMP_TABLE_STATUS = 0x%x\n",
   353					reg_val));
   354					/* Fail the dump if a timeout occurs */
   355					pm8001_ha->forensic_info.data_buf.direct_data +=
   356					sprintf(
   357					pm8001_ha->forensic_info.data_buf.direct_data,
   358					"%08x ", 0xFFFFFFFF);
   359					pm8001_cw32(pm8001_ha, 0,
   360						MEMBASE_II_SHIFT_REGISTER,
   361						pm8001_ha->fatal_forensic_shift_offset);
   362				}
   363				/* Read the next block of the debug data.*/
   364				length_to_read = pm8001_mr32(fatal_table_address,
   365				MPI_FATAL_EDUMP_TABLE_ACCUM_LEN) -
   366				pm8001_ha->forensic_preserved_accumulated_transfer;
   367				if (length_to_read != 0x0) {
   368					pm8001_ha->forensic_fatal_step = 0;
   369					goto moreData;
   370				} else {
   371					pm8001_ha->forensic_info.data_buf.direct_data +=
   372					sprintf(
   373					pm8001_ha->forensic_info.data_buf.direct_data,
   374					"%08x ", 4);
   375					pm8001_ha->forensic_info.data_buf.read_len
   376									= 0xFFFFFFFF;
   377					pm8001_ha->forensic_info.data_buf.direct_len
   378									=  0;
   379					pm8001_ha->forensic_info.data_buf.direct_offset
   380									= 0;
   381					pm8001_ha->forensic_info.data_buf.read_len = 0;
   382				}
   383			}
   384		}
   385		PM8001_IO_DBG(pm8001_ha,
   386			pm8001_printk("get_fatal_spcv: return4 0x%lx\n",
   387			((char *)pm8001_ha->forensic_info.data_buf.direct_data -
   388			 (char *)buf)));
   389		return (char *)pm8001_ha->forensic_info.data_buf.direct_data -
   390			(char *)buf;
   391	}
   392	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Attachment: .config.gz
Description: application/gzip


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [SCSI Target Devel]     [Linux SCSI Target Infrastructure]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Samba]     [Device Mapper]

  Powered by Linux