Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'i3c/fixes-for-5.0-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/i3c/linux

Pull i3c fixes from Boris Brezillon:

- Fix a deadlock in the designware driver

- Fix the error path in i3c_master_add_i3c_dev_locked()

* tag 'i3c/fixes-for-5.0-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/i3c/linux:
i3c: master: dw: fix deadlock
i3c: fix missing detach if failed to retrieve i3c dev

+13 -7
+1 -1
drivers/i3c/master.c
··· 1828 1828 1829 1829 ret = i3c_master_retrieve_dev_info(newdev); 1830 1830 if (ret) 1831 - goto err_free_dev; 1831 + goto err_detach_dev; 1832 1832 1833 1833 olddev = i3c_master_search_i3c_dev_duplicate(newdev); 1834 1834 if (olddev) {
+12 -6
drivers/i3c/master/dw-i3c-master.c
··· 419 419 spin_unlock_irqrestore(&master->xferqueue.lock, flags); 420 420 } 421 421 422 - static void dw_i3c_master_dequeue_xfer(struct dw_i3c_master *master, 423 - struct dw_i3c_xfer *xfer) 422 + static void dw_i3c_master_dequeue_xfer_locked(struct dw_i3c_master *master, 423 + struct dw_i3c_xfer *xfer) 424 424 { 425 - unsigned long flags; 426 - 427 - spin_lock_irqsave(&master->xferqueue.lock, flags); 428 425 if (master->xferqueue.cur == xfer) { 429 426 u32 status; 430 427 ··· 436 439 } else { 437 440 list_del_init(&xfer->node); 438 441 } 442 + } 443 + 444 + static void dw_i3c_master_dequeue_xfer(struct dw_i3c_master *master, 445 + struct dw_i3c_xfer *xfer) 446 + { 447 + unsigned long flags; 448 + 449 + spin_lock_irqsave(&master->xferqueue.lock, flags); 450 + dw_i3c_master_dequeue_xfer_locked(master, xfer); 439 451 spin_unlock_irqrestore(&master->xferqueue.lock, flags); 440 452 } 441 453 ··· 500 494 complete(&xfer->comp); 501 495 502 496 if (ret < 0) { 503 - dw_i3c_master_dequeue_xfer(master, xfer); 497 + dw_i3c_master_dequeue_xfer_locked(master, xfer); 504 498 writel(readl(master->regs + DEVICE_CTRL) | DEV_CTRL_RESUME, 505 499 master->regs + DEVICE_CTRL); 506 500 }