From: kbuild test robot <lkp@intel.com>
To: Chunming Zhou <david1.zhou@amd.com>
Cc: "Christian König" <ckoenig.leichtzumerken@gmail.com>,
dri-devel@lists.freedesktop.org, Tobias.Hector@amd.com,
amd-gfx@lists.freedesktop.org, jason@jlekstrand.net,
Christian.Koenig@amd.com, kbuild-all@01.org
Subject: Re: [PATCH 1/9] dma-buf: add new dma_fence_chain container v6
Date: Thu, 21 Mar 2019 08:24:16 +0800 [thread overview]
Message-ID: <201903210813.K5uuPgyD%lkp@intel.com> (raw)
In-Reply-To: <20190320054724.14636-1-david1.zhou@amd.com>
Hi Chunming,
I love your patch! Perhaps something to improve:
[auto build test WARNING on linus/master]
[also build test WARNING on v5.1-rc1 next-20190320]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
url: https://github.com/0day-ci/linux/commits/Chunming-Zhou/dma-buf-add-new-dma_fence_chain-container-v6/20190320-223607
reproduce:
# apt-get install sparse
make ARCH=x86_64 allmodconfig
make C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__'
sparse warnings: (new ones prefixed by >>)
>> drivers/dma-buf/dma-fence-chain.c:73:23: sparse: incorrect type in initializer (different address spaces) @@ expected struct dma_fence [noderef] <asn:4>*__old @@ got dma_fence [noderef] <asn:4>*__old @@
drivers/dma-buf/dma-fence-chain.c:73:23: expected struct dma_fence [noderef] <asn:4>*__old
drivers/dma-buf/dma-fence-chain.c:73:23: got struct dma_fence *[assigned] prev
>> drivers/dma-buf/dma-fence-chain.c:73:23: sparse: incorrect type in initializer (different address spaces) @@ expected struct dma_fence [noderef] <asn:4>*__new @@ got dma_fence [noderef] <asn:4>*__new @@
drivers/dma-buf/dma-fence-chain.c:73:23: expected struct dma_fence [noderef] <asn:4>*__new
drivers/dma-buf/dma-fence-chain.c:73:23: got struct dma_fence *[assigned] replacement
>> drivers/dma-buf/dma-fence-chain.c:73:21: sparse: incorrect type in assignment (different address spaces) @@ expected struct dma_fence *tmp @@ got struct dma_fence [noderef] <struct dma_fence *tmp @@
drivers/dma-buf/dma-fence-chain.c:73:21: expected struct dma_fence *tmp
drivers/dma-buf/dma-fence-chain.c:73:21: got struct dma_fence [noderef] <asn:4>*[assigned] __ret
>> drivers/dma-buf/dma-fence-chain.c:190:28: sparse: incorrect type in argument 1 (different address spaces) @@ expected struct dma_fence *fence @@ got struct dma_fence struct dma_fence *fence @@
drivers/dma-buf/dma-fence-chain.c:190:28: expected struct dma_fence *fence
drivers/dma-buf/dma-fence-chain.c:190:28: got struct dma_fence [noderef] <asn:4>*prev
>> drivers/dma-buf/dma-fence-chain.c:222:21: sparse: incorrect type in assignment (different address spaces) @@ expected struct dma_fence [noderef] <asn:4>*prev @@ got [noderef] <asn:4>*prev @@
drivers/dma-buf/dma-fence-chain.c:222:21: expected struct dma_fence [noderef] <asn:4>*prev
drivers/dma-buf/dma-fence-chain.c:222:21: got struct dma_fence *prev
drivers/dma-buf/dma-fence-chain.c:235:33: sparse: expression using sizeof(void)
drivers/dma-buf/dma-fence-chain.c:235:33: sparse: expression using sizeof(void)
vim +73 drivers/dma-buf/dma-fence-chain.c
38
39 /**
40 * dma_fence_chain_walk - chain walking function
41 * @fence: current chain node
42 *
43 * Walk the chain to the next node. Returns the next fence or NULL if we are at
44 * the end of the chain. Garbage collects chain nodes which are already
45 * signaled.
46 */
47 struct dma_fence *dma_fence_chain_walk(struct dma_fence *fence)
48 {
49 struct dma_fence_chain *chain, *prev_chain;
50 struct dma_fence *prev, *replacement, *tmp;
51
52 chain = to_dma_fence_chain(fence);
53 if (!chain) {
54 dma_fence_put(fence);
55 return NULL;
56 }
57
58 while ((prev = dma_fence_chain_get_prev(chain))) {
59
60 prev_chain = to_dma_fence_chain(prev);
61 if (prev_chain) {
62 if (!dma_fence_is_signaled(prev_chain->fence))
63 break;
64
65 replacement = dma_fence_chain_get_prev(prev_chain);
66 } else {
67 if (!dma_fence_is_signaled(prev))
68 break;
69
70 replacement = NULL;
71 }
72
> 73 tmp = cmpxchg(&chain->prev, prev, replacement);
74 if (tmp == prev)
75 dma_fence_put(tmp);
76 else
77 dma_fence_put(replacement);
78 dma_fence_put(prev);
79 }
80
81 dma_fence_put(fence);
82 return prev;
83 }
84 EXPORT_SYMBOL(dma_fence_chain_walk);
85
86 /**
87 * dma_fence_chain_find_seqno - find fence chain node by seqno
88 * @pfence: pointer to the chain node where to start
89 * @seqno: the sequence number to search for
90 *
91 * Advance the fence pointer to the chain node which will signal this sequence
92 * number. If no sequence number is provided then this is a no-op.
93 *
94 * Returns EINVAL if the fence is not a chain node or the sequence number has
95 * not yet advanced far enough.
96 */
97 int dma_fence_chain_find_seqno(struct dma_fence **pfence, uint64_t seqno)
98 {
99 struct dma_fence_chain *chain;
100
101 if (!seqno)
102 return 0;
103
104 chain = to_dma_fence_chain(*pfence);
105 if (!chain || chain->base.seqno < seqno)
106 return -EINVAL;
107
108 dma_fence_chain_for_each(*pfence, &chain->base) {
109 if ((*pfence)->context != chain->base.context ||
110 to_dma_fence_chain(*pfence)->prev_seqno < seqno)
111 break;
112 }
113 dma_fence_put(&chain->base);
114
115 return 0;
116 }
117 EXPORT_SYMBOL(dma_fence_chain_find_seqno);
118
119 static const char *dma_fence_chain_get_driver_name(struct dma_fence *fence)
120 {
121 return "dma_fence_chain";
122 }
123
124 static const char *dma_fence_chain_get_timeline_name(struct dma_fence *fence)
125 {
126 return "unbound";
127 }
128
129 static void dma_fence_chain_irq_work(struct irq_work *work)
130 {
131 struct dma_fence_chain *chain;
132
133 chain = container_of(work, typeof(*chain), work);
134
135 /* Try to rearm the callback */
136 if (!dma_fence_chain_enable_signaling(&chain->base))
137 /* Ok, we are done. No more unsignaled fences left */
138 dma_fence_signal(&chain->base);
139 dma_fence_put(&chain->base);
140 }
141
142 static void dma_fence_chain_cb(struct dma_fence *f, struct dma_fence_cb *cb)
143 {
144 struct dma_fence_chain *chain;
145
146 chain = container_of(cb, typeof(*chain), cb);
147 irq_work_queue(&chain->work);
148 dma_fence_put(f);
149 }
150
151 static bool dma_fence_chain_enable_signaling(struct dma_fence *fence)
152 {
153 struct dma_fence_chain *head = to_dma_fence_chain(fence);
154
155 dma_fence_get(&head->base);
156 dma_fence_chain_for_each(fence, &head->base) {
157 struct dma_fence_chain *chain = to_dma_fence_chain(fence);
158 struct dma_fence *f = chain ? chain->fence : fence;
159
160 dma_fence_get(f);
161 if (!dma_fence_add_callback(f, &head->cb, dma_fence_chain_cb)) {
162 dma_fence_put(fence);
163 return true;
164 }
165 dma_fence_put(f);
166 }
167 dma_fence_put(&head->base);
168 return false;
169 }
170
171 static bool dma_fence_chain_signaled(struct dma_fence *fence)
172 {
173 dma_fence_chain_for_each(fence, fence) {
174 struct dma_fence_chain *chain = to_dma_fence_chain(fence);
175 struct dma_fence *f = chain ? chain->fence : fence;
176
177 if (!dma_fence_is_signaled(f)) {
178 dma_fence_put(fence);
179 return false;
180 }
181 }
182
183 return true;
184 }
185
186 static void dma_fence_chain_release(struct dma_fence *fence)
187 {
188 struct dma_fence_chain *chain = to_dma_fence_chain(fence);
189
> 190 dma_fence_put(chain->prev);
191 dma_fence_put(chain->fence);
192 dma_fence_free(fence);
193 }
194
195 const struct dma_fence_ops dma_fence_chain_ops = {
196 .get_driver_name = dma_fence_chain_get_driver_name,
197 .get_timeline_name = dma_fence_chain_get_timeline_name,
198 .enable_signaling = dma_fence_chain_enable_signaling,
199 .signaled = dma_fence_chain_signaled,
200 .release = dma_fence_chain_release,
201 };
202 EXPORT_SYMBOL(dma_fence_chain_ops);
203
204 /**
205 * dma_fence_chain_init - initialize a fence chain
206 * @chain: the chain node to initialize
207 * @prev: the previous fence
208 * @fence: the current fence
209 *
210 * Initialize a new chain node and either start a new chain or add the node to
211 * the existing chain of the previous fence.
212 */
213 void dma_fence_chain_init(struct dma_fence_chain *chain,
214 struct dma_fence *prev,
215 struct dma_fence *fence,
216 uint64_t seqno)
217 {
218 struct dma_fence_chain *prev_chain = to_dma_fence_chain(prev);
219 uint64_t context;
220
221 spin_lock_init(&chain->lock);
> 222 chain->prev = prev;
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2019-03-21 0:24 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-20 5:47 [PATCH 1/9] dma-buf: add new dma_fence_chain container v6 Chunming Zhou
2019-03-20 5:47 ` [PATCH 5/9] drm/syncobj: use the timeline point in drm_syncobj_find_fence v4 Chunming Zhou
[not found] ` <20190320054724.14636-1-david1.zhou-5C7GfCeVMHo@public.gmane.org>
2019-03-20 5:47 ` [PATCH 2/9] drm/syncobj: add new drm_syncobj_add_point interface v4 Chunming Zhou
2019-03-20 5:47 ` [PATCH 3/9] drm/syncobj: add support for timeline point wait v8 Chunming Zhou
2019-03-20 5:47 ` [PATCH 4/9] drm/syncobj: add timeline payload query ioctl v6 Chunming Zhou
2019-03-20 5:47 ` [PATCH 6/9] drm/amdgpu: add timeline support in amdgpu CS v3 Chunming Zhou
2019-03-20 5:47 ` [PATCH 7/9] drm/syncobj: add transition iotcls between binary and timeline v2 Chunming Zhou
2019-03-20 5:47 ` [PATCH 8/9] drm/syncobj: add timeline signal ioctl for syncobj v4 Chunming Zhou
2019-03-20 5:47 ` [PATCH 9/9] drm/amdgpu: update version for timeline syncobj support in amdgpu Chunming Zhou
2019-03-21 0:24 ` kbuild test robot [this message]
[not found] ` <201903210813.K5uuPgyD%lkp-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
2019-03-21 6:34 ` [PATCH 1/9] dma-buf: add new dma_fence_chain container v6 zhoucm1
2019-03-21 11:30 ` Christian König
2019-03-21 14:13 ` Zhou, David(ChunMing)
[not found] ` <2q1nzdv6akhy5260mi-2nbzia-ttsfc8-dz76ft-4ifnnm-oz4kfp-uezs6vwoq2oq-wd0h34-v7m6m7-cd3muc-v4wzqd-yktmtp-2338r6riorqe-ez3yxk-8jr766yyjh0ob0v5e8-33h712k31w5b1ntkih.1553177522341-2ueSQiBKiTY7tOexoI0I+QC/G2K4zDHf@public.gmane.org>
2019-03-21 14:40 ` [PATCH " Christian König
[not found] ` <6bd1f7e6-965b-3bd5-e4e0-f3b04e0638fd-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2019-03-22 7:34 ` zhoucm1
[not found] ` <5cb29811-a383-f473-5443-25e9d968c516-5C7GfCeVMHo@public.gmane.org>
2019-03-22 15:44 ` Christian König
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=201903210813.K5uuPgyD%lkp@intel.com \
--to=lkp@intel.com \
--cc=Christian.Koenig@amd.com \
--cc=Tobias.Hector@amd.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=ckoenig.leichtzumerken@gmail.com \
--cc=david1.zhou@amd.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=jason@jlekstrand.net \
--cc=kbuild-all@01.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