From: kernel test robot <lkp@intel.com>
To: Viresh Kumar <viresh.kumar@linaro.org>
Cc: oe-kbuild-all@lists.linux.dev
Subject: [vireshk:virtio/msg 2/10] drivers/virtio/virtio_msg_mmio.c:57:37: sparse: sparse: restricted __le32 degrades to integer
Date: Sat, 26 Oct 2024 18:31:39 +0800 [thread overview]
Message-ID: <202410261806.fAEVVD8t-lkp@intel.com> (raw)
tree: https://git.kernel.org/pub/scm/linux/kernel/git/vireshk/linux.git virtio/msg
head: 1ee7d4424b5fb877c9020b7426879470c2d47125
commit: bea6928905ca9df686467ece8a8d226a11eeda75 [2/10] virtio: Add support for MMIO based channel bus
config: powerpc64-randconfig-r123-20241026 (https://download.01.org/0day-ci/archive/20241026/202410261806.fAEVVD8t-lkp@intel.com/config)
compiler: powerpc64-linux-gcc (GCC) 14.1.0
reproduce: (https://download.01.org/0day-ci/archive/20241026/202410261806.fAEVVD8t-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/202410261806.fAEVVD8t-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
>> drivers/virtio/virtio_msg_mmio.c:57:37: sparse: sparse: restricted __le32 degrades to integer
>> drivers/virtio/virtio_msg_mmio.c:76:27: sparse: sparse: incorrect type in initializer (different address spaces) @@ expected unsigned long long [usertype] *addr @@ got void [noderef] __iomem *base @@
drivers/virtio/virtio_msg_mmio.c:76:27: sparse: expected unsigned long long [usertype] *addr
drivers/virtio/virtio_msg_mmio.c:76:27: sparse: got void [noderef] __iomem *base
>> drivers/virtio/virtio_msg_mmio.c:79:42: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *addr @@ got unsigned long long [usertype] * @@
drivers/virtio/virtio_msg_mmio.c:79:42: sparse: expected void volatile [noderef] __iomem *addr
drivers/virtio/virtio_msg_mmio.c:79:42: sparse: got unsigned long long [usertype] *
>> drivers/virtio/virtio_msg_mmio.c:87:42: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *addr @@ got unsigned long long [usertype] * @@
drivers/virtio/virtio_msg_mmio.c:87:42: sparse: expected void const volatile [noderef] __iomem *addr
drivers/virtio/virtio_msg_mmio.c:87:42: sparse: got unsigned long long [usertype] *
>> drivers/virtio/virtio_msg_mmio.c:163:25: sparse: sparse: symbol 'virtio_msg_mmio_pm_ops' was not declared. Should it be static?
vim +57 drivers/virtio/virtio_msg_mmio.c
35
36 #define to_virtio_msg_mmio_device(_vmdev) \
37 container_of(_vmdev, struct virtio_msg_mmio_device, vmdev)
38
39 static irqreturn_t vm_interrupt(int irq, void *opaque)
40 {
41 struct virtio_msg_mmio_device *vmmdev = opaque;
42 struct virtio_msg_vq *info;
43 struct virtio_msg msg;
44 bool handled = false;
45
46 /* We don't have any msg here, lets create one to make it work */
47 memset(&msg, 0, sizeof(msg));
48 msg.id = VIRTIO_MSG_EVENT_USED;
49 msg.event_used.index = 0;
50
51 /* Call the interrupt handler for each virtqueue */
52 list_for_each_entry(info, &vmmdev->vmdev.virtqueues, node) {
53 if (!virtio_msg_receive(&vmmdev->vmdev, &msg)) {
54 handled = true;
55 break;
56 }
> 57 msg.event_used.index++;
58 }
59
60 /* Interrupt should belong to one of the virtqueues at least */
61 if (!handled) {
62 pr_err("%s: Failed to find virtqueue for message", __func__);
63 return IRQ_NONE;
64 }
65
66 return IRQ_HANDLED;
67 }
68
69 static int virtio_msg_mmio_send(struct virtio_msg_device *vmdev,
70 struct virtio_msg *request,
71 struct virtio_msg *response)
72 {
73 struct virtio_msg_mmio_device *vmmdev = to_virtio_msg_mmio_device(vmdev);
74 int i, len = sizeof(*request) / sizeof(u64);
75 u64 *data = (u64 *) request;
> 76 u64 *addr = vmmdev->base;
77
78 for (i = 0; i < len; i++)
> 79 writeq(*(data + i), addr + i);
80
81 if (!response)
82 return 0;
83
84 data = (u64 *) response;
85
86 for (i = 0; i < len; i++)
> 87 *(data + i) = readq(addr + i);
88
89 return 0;
90 }
91
92 static const char *virtio_msg_mmio_bus_name(struct virtio_msg_device *vmdev)
93 {
94 struct virtio_msg_mmio_device *vmmdev = to_virtio_msg_mmio_device(vmdev);
95
96 return vmmdev->pdev->name;
97 }
98
99 static void virtio_msg_mmio_synchronize_cbs(struct virtio_msg_device *vmdev)
100 {
101 struct virtio_msg_mmio_device *vmmdev = to_virtio_msg_mmio_device(vmdev);
102
103 synchronize_irq(platform_get_irq(vmmdev->pdev, 0));
104 }
105
106 static void virtio_msg_mmio_release(struct virtio_msg_device *vmdev)
107 {
108 struct virtio_msg_mmio_device *vmmdev = to_virtio_msg_mmio_device(vmdev);
109
110 kfree(vmmdev);
111 }
112
113 static int virtio_msg_mmio_vqs_prepare(struct virtio_msg_device *vmdev)
114 {
115 struct virtio_msg_mmio_device *vmmdev = to_virtio_msg_mmio_device(vmdev);
116 int ret, irq = platform_get_irq(vmmdev->pdev, 0);
117
118 if (irq < 0)
119 return irq;
120
121 ret = request_irq(irq, vm_interrupt, IRQF_SHARED, dev_name(&vmdev->vdev.dev),
122 vmmdev);
123 if (ret)
124 return ret;
125
126 if (of_property_read_bool(vmmdev->pdev->dev.of_node, "wakeup-source"))
127 enable_irq_wake(irq);
128
129 return 0;
130 }
131
132 static void virtio_msg_mmio_vqs_release(struct virtio_msg_device *vmdev)
133 {
134 struct virtio_msg_mmio_device *vmmdev = to_virtio_msg_mmio_device(vmdev);
135
136 free_irq(platform_get_irq(vmmdev->pdev, 0), vmmdev);
137 }
138
139 static struct virtio_msg_ops vmm_ops = {
140 .send = virtio_msg_mmio_send,
141 .bus_name = virtio_msg_mmio_bus_name,
142 .synchronize_cbs = virtio_msg_mmio_synchronize_cbs,
143 .release = virtio_msg_mmio_release,
144 .prepare_vqs = virtio_msg_mmio_vqs_prepare,
145 .release_vqs = virtio_msg_mmio_vqs_release,
146 };
147
148 #ifdef CONFIG_PM_SLEEP
149 static int virtio_msg_mmio_freeze(struct device *dev)
150 {
151 struct virtio_msg_mmio_device *vmmdev = dev_get_drvdata(dev);
152
153 return virtio_msg_freeze(&vmmdev->vmdev);
154 }
155
156 static int virtio_msg_mmio_restore(struct device *dev)
157 {
158 struct virtio_msg_mmio_device *vmmdev = dev_get_drvdata(dev);
159
160 return virtio_msg_restore(&vmmdev->vmdev);
161 }
162
> 163 const struct dev_pm_ops virtio_msg_mmio_pm_ops = {
164 SET_SYSTEM_SLEEP_PM_OPS(virtio_msg_mmio_freeze, virtio_msg_mmio_restore)
165 };
166 #endif
167
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
reply other threads:[~2024-10-26 10:31 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=202410261806.fAEVVD8t-lkp@intel.com \
--to=lkp@intel.com \
--cc=oe-kbuild-all@lists.linux.dev \
--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 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.