mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: kernel test robot <lkp@intel.com>
To: Viresh Kumar <viresh.kumar@linaro.org>
Cc: kbuild-all@lists.01.org, linux-kernel@vger.kernel.org,
	Jassi Brar <jaswinder.singh@linaro.org>,
	Tushar Khandelwal <tushar.khandelwal@arm.com>
Subject: drivers/mailbox/arm_mhuv2.c:506:24: sparse: sparse: incorrect type in argument 1 (different address spaces)
Date: Mon, 28 Dec 2020 20:52:48 +0800	[thread overview]
Message-ID: <202012282043.lQs7uMPf-lkp@intel.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 9061 bytes --]

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head:   5c8fe583cce542aa0b84adc939ce85293de36e5e
commit: 5a6338cce9f4133c478d3b10b300f96dd644379a mailbox: arm_mhuv2: Add driver
date:   3 weeks ago
config: arm64-randconfig-s031-20201221 (attached as .config)
compiler: aarch64-linux-gcc (GCC) 9.3.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # apt-get install sparse
        # sparse version: v0.6.3-184-g1b896707-dirty
        # https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=5a6338cce9f4133c478d3b10b300f96dd644379a
        git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout 5a6338cce9f4133c478d3b10b300f96dd644379a
        # save the attached .config to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-9.3.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=arm64 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>


"sparse warnings: (new ones prefixed by >>)"
>> drivers/mailbox/arm_mhuv2.c:506:24: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const volatile [noderef] __iomem *addr @@     got unsigned int [usertype] * @@
   drivers/mailbox/arm_mhuv2.c:506:24: sparse:     expected void const volatile [noderef] __iomem *addr
   drivers/mailbox/arm_mhuv2.c:506:24: sparse:     got unsigned int [usertype] *
>> drivers/mailbox/arm_mhuv2.c:506:24: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const volatile [noderef] __iomem *addr @@     got unsigned int [usertype] * @@
   drivers/mailbox/arm_mhuv2.c:506:24: sparse:     expected void const volatile [noderef] __iomem *addr
   drivers/mailbox/arm_mhuv2.c:506:24: sparse:     got unsigned int [usertype] *
>> drivers/mailbox/arm_mhuv2.c:506:24: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const volatile [noderef] __iomem *addr @@     got unsigned int [usertype] * @@
   drivers/mailbox/arm_mhuv2.c:506:24: sparse:     expected void const volatile [noderef] __iomem *addr
   drivers/mailbox/arm_mhuv2.c:506:24: sparse:     got unsigned int [usertype] *
>> drivers/mailbox/arm_mhuv2.c:506:24: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const volatile [noderef] __iomem *addr @@     got unsigned int [usertype] * @@
   drivers/mailbox/arm_mhuv2.c:506:24: sparse:     expected void const volatile [noderef] __iomem *addr
   drivers/mailbox/arm_mhuv2.c:506:24: sparse:     got unsigned int [usertype] *
>> drivers/mailbox/arm_mhuv2.c:506:24: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const volatile [noderef] __iomem *addr @@     got unsigned int [usertype] * @@
   drivers/mailbox/arm_mhuv2.c:506:24: sparse:     expected void const volatile [noderef] __iomem *addr
   drivers/mailbox/arm_mhuv2.c:506:24: sparse:     got unsigned int [usertype] *
>> drivers/mailbox/arm_mhuv2.c:506:24: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const volatile [noderef] __iomem *addr @@     got unsigned int [usertype] * @@
   drivers/mailbox/arm_mhuv2.c:506:24: sparse:     expected void const volatile [noderef] __iomem *addr
   drivers/mailbox/arm_mhuv2.c:506:24: sparse:     got unsigned int [usertype] *
>> drivers/mailbox/arm_mhuv2.c:547:42: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected unsigned int [usertype] *reg @@     got unsigned int [noderef] __iomem * @@
   drivers/mailbox/arm_mhuv2.c:547:42: sparse:     expected unsigned int [usertype] *reg
   drivers/mailbox/arm_mhuv2.c:547:42: sparse:     got unsigned int [noderef] __iomem *
   drivers/mailbox/arm_mhuv2.c:625:42: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected unsigned int [usertype] *reg @@     got unsigned int [noderef] __iomem * @@
   drivers/mailbox/arm_mhuv2.c:625:42: sparse:     expected unsigned int [usertype] *reg
   drivers/mailbox/arm_mhuv2.c:625:42: sparse:     got unsigned int [noderef] __iomem *
>> drivers/mailbox/arm_mhuv2.c:972:24: sparse: sparse: dereference of noderef expression
   drivers/mailbox/arm_mhuv2.c:973:22: sparse: sparse: dereference of noderef expression
   drivers/mailbox/arm_mhuv2.c:993:25: sparse: sparse: dereference of noderef expression
   drivers/mailbox/arm_mhuv2.c:1026:24: sparse: sparse: dereference of noderef expression
   drivers/mailbox/arm_mhuv2.c:1027:22: sparse: sparse: dereference of noderef expression
   drivers/mailbox/arm_mhuv2.c:1048:17: sparse: sparse: dereference of noderef expression

vim +506 drivers/mailbox/arm_mhuv2.c

   498	
   499	static struct mbox_chan *get_irq_chan_comb(struct mhuv2 *mhu, u32 *reg)
   500	{
   501		struct mbox_chan *chans = mhu->mbox.chans;
   502		int channel = 0, i, offset = 0, windows, protocol, ch_wn;
   503		u32 stat;
   504	
   505		for (i = 0; i < MHUV2_CMB_INT_ST_REG_CNT; i++) {
 > 506			stat = readl_relaxed(reg + i);
   507			if (!stat)
   508				continue;
   509	
   510			ch_wn = i * MHUV2_STAT_BITS + __builtin_ctz(stat);
   511	
   512			for (i = 0; i < mhu->length; i += 2) {
   513				protocol = mhu->protocols[i];
   514				windows = mhu->protocols[i + 1];
   515	
   516				if (ch_wn >= offset + windows) {
   517					if (protocol == DOORBELL)
   518						channel += MHUV2_STAT_BITS * windows;
   519					else
   520						channel++;
   521	
   522					offset += windows;
   523					continue;
   524				}
   525	
   526				/* Return first chan of the window in doorbell mode */
   527				if (protocol == DOORBELL)
   528					channel += MHUV2_STAT_BITS * (ch_wn - offset);
   529	
   530				return &chans[channel];
   531			}
   532		}
   533	
   534		return ERR_PTR(-EIO);
   535	}
   536	
   537	static irqreturn_t mhuv2_sender_interrupt(int irq, void *data)
   538	{
   539		struct mhuv2 *mhu = data;
   540		struct device *dev = mhu->mbox.dev;
   541		struct mhuv2_mbox_chan_priv *priv;
   542		struct mbox_chan *chan;
   543		unsigned long flags;
   544		int i, found = 0;
   545		u32 stat;
   546	
 > 547		chan = get_irq_chan_comb(mhu, mhu->send->chcomb_int_st);
   548		if (IS_ERR(chan)) {
   549			dev_warn(dev, "Failed to find channel for the Tx interrupt\n");
   550			return IRQ_NONE;
   551		}
   552		priv = chan->con_priv;
   553	
   554		if (!IS_PROTOCOL_DOORBELL(priv)) {
   555			writel_relaxed(1, &mhu->send->ch_wn[priv->ch_wn_idx + priv->windows - 1].int_clr);
   556	
   557			if (chan->cl) {
   558				mbox_chan_txdone(chan, 0);
   559				return IRQ_HANDLED;
   560			}
   561	
   562			dev_warn(dev, "Tx interrupt Received on channel (%u) not currently attached to a mailbox client\n",
   563				 priv->ch_wn_idx);
   564			return IRQ_NONE;
   565		}
   566	
   567		/* Clear the interrupt first, so we don't miss any doorbell later */
   568		writel_relaxed(1, &mhu->send->ch_wn[priv->ch_wn_idx].int_clr);
   569	
   570		/*
   571		 * In Doorbell mode, make sure no new transitions happen while the
   572		 * interrupt handler is trying to find the finished doorbell tx
   573		 * operations, else we may think few of the transfers were complete
   574		 * before they actually were.
   575		 */
   576		spin_lock_irqsave(&mhu->doorbell_pending_lock, flags);
   577	
   578		/*
   579		 * In case of doorbell mode, the first channel of the window is returned
   580		 * by get_irq_chan_comb(). Find all the pending channels here.
   581		 */
   582		stat = readl_relaxed(&mhu->send->ch_wn[priv->ch_wn_idx].stat);
   583	
   584		for (i = 0; i < MHUV2_STAT_BITS; i++) {
   585			priv = chan[i].con_priv;
   586	
   587			/* Find cases where pending was 1, but stat's bit is cleared */
   588			if (priv->pending ^ ((stat >> i) & 0x1)) {
   589				BUG_ON(!priv->pending);
   590	
   591				if (!chan->cl) {
   592					dev_warn(dev, "Tx interrupt received on doorbell (%u : %u) channel not currently attached to a mailbox client\n",
   593						 priv->ch_wn_idx, i);
   594					continue;
   595				}
   596	
   597				mbox_chan_txdone(&chan[i], 0);
   598				priv->pending = 0;
   599				found++;
   600			}
   601		}
   602	
   603		spin_unlock_irqrestore(&mhu->doorbell_pending_lock, flags);
   604	
   605		if (!found) {
   606			/*
   607			 * We may have already processed the doorbell in the previous
   608			 * iteration if the interrupt came right after we cleared it but
   609			 * before we read the stat register.
   610			 */
   611			dev_dbg(dev, "Couldn't find the doorbell (%u) for the Tx interrupt interrupt\n",
   612				priv->ch_wn_idx);
   613			return IRQ_NONE;
   614		}
   615	
   616		return IRQ_HANDLED;
   617	}
   618	

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 31565 bytes --]

                 reply	other threads:[~2020-12-28 12:54 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=202012282043.lQs7uMPf-lkp@intel.com \
    --to=lkp@intel.com \
    --cc=jaswinder.singh@linaro.org \
    --cc=kbuild-all@lists.01.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=tushar.khandelwal@arm.com \
    --cc=viresh.kumar@linaro.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®