All of lore.kernel.org
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Hari Bathini <hbathini@linux.vnet.ibm.com>
Cc: oe-kbuild-all@lists.linux.dev, linux-kernel@vger.kernel.org,
	Michael Ellerman <mpe@ellerman.id.au>
Subject: arch/powerpc/platforms/powernv/opal-core.c:96:24: sparse: sparse: incorrect type in assignment (different base types)
Date: Wed, 20 Dec 2023 01:26:53 +0800	[thread overview]
Message-ID: <202312200144.z1CH6ZPc-lkp@intel.com> (raw)

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   2cf4f94d8e8646803f8fb0facf134b0cd7fb691a
commit: 6f713d18144ce86c9f01cdf64222d6339e26129e powerpc/opalcore: export /sys/firmware/opal/core for analysing opal crashes
date:   4 years, 3 months ago
config: powerpc64-randconfig-r113-20231118 (https://download.01.org/0day-ci/archive/20231220/202312200144.z1CH6ZPc-lkp@intel.com/config)
compiler: powerpc64-linux-gcc (GCC) 13.2.0
reproduce: (https://download.01.org/0day-ci/archive/20231220/202312200144.z1CH6ZPc-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202312200144.z1CH6ZPc-lkp@intel.com/

sparse warnings: (new ones prefixed by >>)
>> arch/powerpc/platforms/powernv/opal-core.c:96:24: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned int [usertype] n_namesz @@     got restricted __be32 [usertype] @@
   arch/powerpc/platforms/powernv/opal-core.c:96:24: sparse:     expected unsigned int [usertype] n_namesz
   arch/powerpc/platforms/powernv/opal-core.c:96:24: sparse:     got restricted __be32 [usertype]
>> arch/powerpc/platforms/powernv/opal-core.c:97:24: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned int [usertype] n_descsz @@     got restricted __be32 [usertype] @@
   arch/powerpc/platforms/powernv/opal-core.c:97:24: sparse:     expected unsigned int [usertype] n_descsz
   arch/powerpc/platforms/powernv/opal-core.c:97:24: sparse:     got restricted __be32 [usertype]
>> arch/powerpc/platforms/powernv/opal-core.c:98:24: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned int [usertype] n_type @@     got restricted __be32 [usertype] @@
   arch/powerpc/platforms/powernv/opal-core.c:98:24: sparse:     expected unsigned int [usertype] n_type
   arch/powerpc/platforms/powernv/opal-core.c:98:24: sparse:     got restricted __be32 [usertype]
>> arch/powerpc/platforms/powernv/opal-core.c:119:27: sparse: sparse: incorrect type in assignment (different base types) @@     expected int [usertype] pr_pid @@     got restricted __be32 [usertype] @@
   arch/powerpc/platforms/powernv/opal-core.c:119:27: sparse:     expected int [usertype] pr_pid
   arch/powerpc/platforms/powernv/opal-core.c:119:27: sparse:     got restricted __be32 [usertype]
>> arch/powerpc/platforms/powernv/opal-core.c:120:27: sparse: sparse: incorrect type in assignment (different base types) @@     expected int [usertype] pr_ppid @@     got restricted __be32 [usertype] @@
   arch/powerpc/platforms/powernv/opal-core.c:120:27: sparse:     expected int [usertype] pr_ppid
   arch/powerpc/platforms/powernv/opal-core.c:120:27: sparse:     got restricted __be32 [usertype]
>> arch/powerpc/platforms/powernv/opal-core.c:130:37: sparse: sparse: incorrect type in assignment (different base types) @@     expected short pr_cursig @@     got restricted __be16 [usertype] @@
   arch/powerpc/platforms/powernv/opal-core.c:130:37: sparse:     expected short pr_cursig
   arch/powerpc/platforms/powernv/opal-core.c:130:37: sparse:     got restricted __be16 [usertype]
>> arch/powerpc/platforms/powernv/opal-core.c:143:21: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned long long [usertype] @@     got restricted __be64 [usertype] @@
   arch/powerpc/platforms/powernv/opal-core.c:143:21: sparse:     expected unsigned long long [usertype]
   arch/powerpc/platforms/powernv/opal-core.c:143:21: sparse:     got restricted __be64 [usertype]
   arch/powerpc/platforms/powernv/opal-core.c:144:21: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned long long [usertype] @@     got restricted __be64 [usertype] @@
   arch/powerpc/platforms/powernv/opal-core.c:144:21: sparse:     expected unsigned long long [usertype]
   arch/powerpc/platforms/powernv/opal-core.c:144:21: sparse:     got restricted __be64 [usertype]
   arch/powerpc/platforms/powernv/opal-core.c:147:21: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned long long [usertype] @@     got restricted __be64 [usertype] @@
   arch/powerpc/platforms/powernv/opal-core.c:147:21: sparse:     expected unsigned long long [usertype]
   arch/powerpc/platforms/powernv/opal-core.c:147:21: sparse:     got restricted __be64 [usertype]
>> arch/powerpc/platforms/powernv/opal-core.c:274:17: sparse: sparse: cast to restricted __be64
>> arch/powerpc/platforms/powernv/opal-core.c:274:17: sparse: sparse: cast to restricted __be64
>> arch/powerpc/platforms/powernv/opal-core.c:360:21: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned short [usertype] e_type @@     got restricted __be16 [usertype] @@
   arch/powerpc/platforms/powernv/opal-core.c:360:21: sparse:     expected unsigned short [usertype] e_type
   arch/powerpc/platforms/powernv/opal-core.c:360:21: sparse:     got restricted __be16 [usertype]
>> arch/powerpc/platforms/powernv/opal-core.c:361:24: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned short [usertype] e_machine @@     got restricted __be16 [usertype] @@
   arch/powerpc/platforms/powernv/opal-core.c:361:24: sparse:     expected unsigned short [usertype] e_machine
   arch/powerpc/platforms/powernv/opal-core.c:361:24: sparse:     got restricted __be16 [usertype]
>> arch/powerpc/platforms/powernv/opal-core.c:362:24: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned int [usertype] e_version @@     got restricted __be32 [usertype] @@
   arch/powerpc/platforms/powernv/opal-core.c:362:24: sparse:     expected unsigned int [usertype] e_version
   arch/powerpc/platforms/powernv/opal-core.c:362:24: sparse:     got restricted __be32 [usertype]
>> arch/powerpc/platforms/powernv/opal-core.c:364:22: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned long long [usertype] e_phoff @@     got restricted __be64 [usertype] @@
   arch/powerpc/platforms/powernv/opal-core.c:364:22: sparse:     expected unsigned long long [usertype] e_phoff
   arch/powerpc/platforms/powernv/opal-core.c:364:22: sparse:     got restricted __be64 [usertype]
>> arch/powerpc/platforms/powernv/opal-core.c:368:23: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned short [usertype] e_ehsize @@     got restricted __be16 [usertype] @@
   arch/powerpc/platforms/powernv/opal-core.c:368:23: sparse:     expected unsigned short [usertype] e_ehsize
   arch/powerpc/platforms/powernv/opal-core.c:368:23: sparse:     got restricted __be16 [usertype]
>> arch/powerpc/platforms/powernv/opal-core.c:369:26: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned short [usertype] e_phentsize @@     got restricted __be16 [usertype] @@
   arch/powerpc/platforms/powernv/opal-core.c:369:26: sparse:     expected unsigned short [usertype] e_phentsize
   arch/powerpc/platforms/powernv/opal-core.c:369:26: sparse:     got restricted __be16 [usertype]
>> arch/powerpc/platforms/powernv/opal-core.c:377:25: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned int [usertype] p_type @@     got restricted __be32 [usertype] @@
   arch/powerpc/platforms/powernv/opal-core.c:377:25: sparse:     expected unsigned int [usertype] p_type
   arch/powerpc/platforms/powernv/opal-core.c:377:25: sparse:     got restricted __be32 [usertype]
>> arch/powerpc/platforms/powernv/opal-core.c:381:25: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned long long [usertype] p_offset @@     got restricted __be64 [usertype] @@
   arch/powerpc/platforms/powernv/opal-core.c:381:25: sparse:     expected unsigned long long [usertype] p_offset
   arch/powerpc/platforms/powernv/opal-core.c:381:25: sparse:     got restricted __be64 [usertype]
>> arch/powerpc/platforms/powernv/opal-core.c:382:41: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned long long [usertype] p_memsz @@     got restricted __be64 [usertype] @@
   arch/powerpc/platforms/powernv/opal-core.c:382:41: sparse:     expected unsigned long long [usertype] p_memsz
   arch/powerpc/platforms/powernv/opal-core.c:382:41: sparse:     got restricted __be64 [usertype]
   arch/powerpc/platforms/powernv/opal-core.c:391:33: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned int [usertype] p_type @@     got restricted __be32 [usertype] @@
   arch/powerpc/platforms/powernv/opal-core.c:391:33: sparse:     expected unsigned int [usertype] p_type
   arch/powerpc/platforms/powernv/opal-core.c:391:33: sparse:     got restricted __be32 [usertype]
>> arch/powerpc/platforms/powernv/opal-core.c:392:33: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned int [usertype] p_flags @@     got restricted __be32 [usertype] @@
   arch/powerpc/platforms/powernv/opal-core.c:392:33: sparse:     expected unsigned int [usertype] p_flags
   arch/powerpc/platforms/powernv/opal-core.c:392:33: sparse:     got restricted __be32 [usertype]
>> arch/powerpc/platforms/powernv/opal-core.c:403:33: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned long long [usertype] p_paddr @@     got restricted __be64 [usertype] @@
   arch/powerpc/platforms/powernv/opal-core.c:403:33: sparse:     expected unsigned long long [usertype] p_paddr
   arch/powerpc/platforms/powernv/opal-core.c:403:33: sparse:     got restricted __be64 [usertype]
>> arch/powerpc/platforms/powernv/opal-core.c:404:33: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned long long [usertype] p_vaddr @@     got restricted __be64 [usertype] @@
   arch/powerpc/platforms/powernv/opal-core.c:404:33: sparse:     expected unsigned long long [usertype] p_vaddr
   arch/powerpc/platforms/powernv/opal-core.c:404:33: sparse:     got restricted __be64 [usertype]
   arch/powerpc/platforms/powernv/opal-core.c:405:50: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned long long [usertype] p_memsz @@     got restricted __be64 [usertype] @@
   arch/powerpc/platforms/powernv/opal-core.c:405:50: sparse:     expected unsigned long long [usertype] p_memsz
   arch/powerpc/platforms/powernv/opal-core.c:405:50: sparse:     got restricted __be64 [usertype]
   arch/powerpc/platforms/powernv/opal-core.c:407:33: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned long long [usertype] p_offset @@     got restricted __be64 [usertype] @@
   arch/powerpc/platforms/powernv/opal-core.c:407:33: sparse:     expected unsigned long long [usertype] p_offset
   arch/powerpc/platforms/powernv/opal-core.c:407:33: sparse:     got restricted __be64 [usertype]
>> arch/powerpc/platforms/powernv/opal-core.c:414:22: sparse: sparse: incorrect type in assignment (different base types) @@     expected unsigned short [usertype] e_phnum @@     got restricted __be16 [usertype] @@
   arch/powerpc/platforms/powernv/opal-core.c:414:22: sparse:     expected unsigned short [usertype] e_phnum
   arch/powerpc/platforms/powernv/opal-core.c:414:22: sparse:     got restricted __be16 [usertype]
   arch/powerpc/platforms/powernv/opal-core.c:479:16: sparse: sparse: cast to restricted __be64
   arch/powerpc/platforms/powernv/opal-core.c:490:16: sparse: sparse: cast to restricted __be64
   arch/powerpc/platforms/powernv/opal-core.c: note: in included file:
   arch/powerpc/platforms/powernv/opal-fadump.h:134:33: sparse: sparse: restricted __be64 degrades to integer

vim +96 arch/powerpc/platforms/powernv/opal-core.c

    88	
    89	static Elf64_Word *append_elf64_note(Elf64_Word *buf, char *name,
    90					     u32 type, void *data,
    91					     size_t data_len)
    92	{
    93		Elf64_Nhdr *note = (Elf64_Nhdr *)buf;
    94		Elf64_Word namesz = strlen(name) + 1;
    95	
  > 96		note->n_namesz = cpu_to_be32(namesz);
  > 97		note->n_descsz = cpu_to_be32(data_len);
  > 98		note->n_type   = cpu_to_be32(type);
    99		buf += DIV_ROUND_UP(sizeof(*note), sizeof(Elf64_Word));
   100		memcpy(buf, name, namesz);
   101		buf += DIV_ROUND_UP(namesz, sizeof(Elf64_Word));
   102		memcpy(buf, data, data_len);
   103		buf += DIV_ROUND_UP(data_len, sizeof(Elf64_Word));
   104	
   105		return buf;
   106	}
   107	
   108	static void fill_prstatus(struct elf_prstatus *prstatus, int pir,
   109				  struct pt_regs *regs)
   110	{
   111		memset(prstatus, 0, sizeof(struct elf_prstatus));
   112		elf_core_copy_kernel_regs(&(prstatus->pr_reg), regs);
   113	
   114		/*
   115		 * Overload PID with PIR value.
   116		 * As a PIR value could also be '0', add an offset of '100'
   117		 * to every PIR to avoid misinterpretations in GDB.
   118		 */
 > 119		prstatus->pr_pid  = cpu_to_be32(100 + pir);
 > 120		prstatus->pr_ppid = cpu_to_be32(1);
   121	
   122		/*
   123		 * Indicate SIGUSR1 for crash initiated from kernel.
   124		 * SIGTERM otherwise.
   125		 */
   126		if (pir == oc_conf->crashing_cpu) {
   127			short sig;
   128	
   129			sig = kernel_initiated ? SIGUSR1 : SIGTERM;
 > 130			prstatus->pr_cursig = cpu_to_be16(sig);
   131		}
   132	}
   133	
   134	static Elf64_Word *auxv_to_elf64_notes(Elf64_Word *buf,
   135					       u64 opal_boot_entry)
   136	{
   137		Elf64_Off *bufp = (Elf64_Off *)oc_conf->auxv_buf;
   138		int idx = 0;
   139	
   140		memset(bufp, 0, AUXV_DESC_SZ);
   141	
   142		/* Entry point of OPAL */
 > 143		bufp[idx++] = cpu_to_be64(AT_ENTRY);
   144		bufp[idx++] = cpu_to_be64(opal_boot_entry);
   145	
   146		/* end of vector */
   147		bufp[idx++] = cpu_to_be64(AT_NULL);
   148	
   149		buf = append_elf64_note(buf, CRASH_CORE_NOTE_NAME, NT_AUXV,
   150					oc_conf->auxv_buf, AUXV_DESC_SZ);
   151		return buf;
   152	}
   153	
   154	/*
   155	 * Read from the ELF header and then the crash dump.
   156	 * Returns number of bytes read on success, -errno on failure.
   157	 */
   158	static ssize_t read_opalcore(struct file *file, struct kobject *kobj,
   159				     struct bin_attribute *bin_attr, char *to,
   160				     loff_t pos, size_t count)
   161	{
   162		struct opalcore *m;
   163		ssize_t tsz, avail;
   164		loff_t tpos = pos;
   165	
   166		if (pos >= oc_conf->opalcore_size)
   167			return 0;
   168	
   169		/* Adjust count if it goes beyond opalcore size */
   170		avail = oc_conf->opalcore_size - pos;
   171		if (count > avail)
   172			count = avail;
   173	
   174		if (count == 0)
   175			return 0;
   176	
   177		/* Read ELF core header and/or PT_NOTE segment */
   178		if (tpos < oc_conf->opalcorebuf_sz) {
   179			tsz = min_t(size_t, oc_conf->opalcorebuf_sz - tpos, count);
   180			memcpy(to, oc_conf->opalcorebuf + tpos, tsz);
   181			to += tsz;
   182			tpos += tsz;
   183			count -= tsz;
   184		}
   185	
   186		list_for_each_entry(m, &opalcore_list, list) {
   187			/* nothing more to read here */
   188			if (count == 0)
   189				break;
   190	
   191			if (tpos < m->offset + m->size) {
   192				void *addr;
   193	
   194				tsz = min_t(size_t, m->offset + m->size - tpos, count);
   195				addr = (void *)(m->paddr + tpos - m->offset);
   196				memcpy(to, __va(addr), tsz);
   197				to += tsz;
   198				tpos += tsz;
   199				count -= tsz;
   200			}
   201		}
   202	
   203		return (tpos - pos);
   204	}
   205	
   206	static struct bin_attribute opal_core_attr = {
   207		.attr = {.name = "core", .mode = 0400},
   208		.read = read_opalcore
   209	};
   210	
   211	/*
   212	 * Read CPU state dump data and convert it into ELF notes.
   213	 *
   214	 * Each register entry is of 16 bytes, A numerical identifier along with
   215	 * a GPR/SPR flag in the first 8 bytes and the register value in the next
   216	 * 8 bytes. For more details refer to F/W documentation.
   217	 */
   218	static Elf64_Word * __init opalcore_append_cpu_notes(Elf64_Word *buf)
   219	{
   220		u32 thread_pir, size_per_thread, regs_offset, regs_cnt, reg_esize;
   221		struct hdat_fadump_thread_hdr *thdr;
   222		struct elf_prstatus prstatus;
   223		Elf64_Word *first_cpu_note;
   224		struct pt_regs regs;
   225		char *bufp;
   226		int i;
   227	
   228		size_per_thread = oc_conf->cpu_state_entry_size;
   229		bufp = __va(oc_conf->cpu_state_destination_vaddr);
   230	
   231		/*
   232		 * Offset for register entries, entry size and registers count is
   233		 * duplicated in every thread header in keeping with HDAT format.
   234		 * Use these values from the first thread header.
   235		 */
   236		thdr = (struct hdat_fadump_thread_hdr *)bufp;
   237		regs_offset = (offsetof(struct hdat_fadump_thread_hdr, offset) +
   238			       be32_to_cpu(thdr->offset));
   239		reg_esize = be32_to_cpu(thdr->esize);
   240		regs_cnt  = be32_to_cpu(thdr->ecnt);
   241	
   242		pr_debug("--------CPU State Data------------\n");
   243		pr_debug("NumCpus     : %u\n", oc_conf->num_cpus);
   244		pr_debug("\tOffset: %u, Entry size: %u, Cnt: %u\n",
   245			 regs_offset, reg_esize, regs_cnt);
   246	
   247		/*
   248		 * Skip past the first CPU note. Fill this note with the
   249		 * crashing CPU's prstatus.
   250		 */
   251		first_cpu_note = buf;
   252		buf = append_elf64_note(buf, CRASH_CORE_NOTE_NAME, NT_PRSTATUS,
   253					&prstatus, sizeof(prstatus));
   254	
   255		for (i = 0; i < oc_conf->num_cpus; i++, bufp += size_per_thread) {
   256			thdr = (struct hdat_fadump_thread_hdr *)bufp;
   257			thread_pir = be32_to_cpu(thdr->pir);
   258	
   259			pr_debug("[%04d] PIR: 0x%x, core state: 0x%02x\n",
   260				 i, thread_pir, thdr->core_state);
   261	
   262			/*
   263			 * Register state data of MAX cores is provided by firmware,
   264			 * but some of this cores may not be active. So, while
   265			 * processing register state data, check core state and
   266			 * skip threads that belong to inactive cores.
   267			 */
   268			if (thdr->core_state == HDAT_FADUMP_CORE_INACTIVE)
   269				continue;
   270	
   271			opal_fadump_read_regs((bufp + regs_offset), regs_cnt,
   272					      reg_esize, false, &regs);
   273	
 > 274			pr_debug("PIR 0x%x - R1 : 0x%llx, NIP : 0x%llx\n", thread_pir,
   275				 be64_to_cpu(regs.gpr[1]), be64_to_cpu(regs.nip));
   276			fill_prstatus(&prstatus, thread_pir, &regs);
   277	
   278			if (thread_pir != oc_conf->crashing_cpu) {
   279				buf = append_elf64_note(buf, CRASH_CORE_NOTE_NAME,
   280							NT_PRSTATUS, &prstatus,
   281							sizeof(prstatus));
   282			} else {
   283				/*
   284				 * Add crashing CPU as the first NT_PRSTATUS note for
   285				 * GDB to process the core file appropriately.
   286				 */
   287				append_elf64_note(first_cpu_note, CRASH_CORE_NOTE_NAME,
   288						  NT_PRSTATUS, &prstatus,
   289						  sizeof(prstatus));
   290			}
   291		}
   292	
   293		return buf;
   294	}
   295	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

             reply	other threads:[~2023-12-19 17:27 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-12-19 17:26 kernel test robot [this message]
  -- strict thread matches above, loose matches on Subject: below --
2023-12-19  0:41 arch/powerpc/platforms/powernv/opal-core.c:96:24: sparse: sparse: incorrect type in assignment (different base types) kernel test robot

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=202312200144.z1CH6ZPc-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=hbathini@linux.vnet.ibm.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mpe@ellerman.id.au \
    --cc=oe-kbuild-all@lists.linux.dev \
    /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.