Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8c70a58c authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "diag: Atomic operations does not require spinlock"

parents 2ebe46cf 9573cbb3
Loading
Loading
Loading
Loading
+1 −5
Original line number Diff line number Diff line
@@ -241,17 +241,13 @@ static void diag_usb_notifier(void *priv, unsigned event,

	switch (event) {
	case USB_DIAG_CONNECT:
		spin_lock_irqsave(&usb_info->lock, flags);
		atomic_set(&usb_info->connected, 1);
		spin_unlock_irqrestore(&usb_info->lock, flags);
		pr_info("diag: USB channel %s connected\n", usb_info->name);
		queue_work(usb_info->usb_wq,
			   &usb_info->connect_work);
		break;
	case USB_DIAG_DISCONNECT:
		spin_lock_irqsave(&usb_info->lock, flags);
		atomic_set(&usb_info->connected, 0);
		spin_unlock_irqrestore(&usb_info->lock, flags);
		pr_info("diag: USB channel %s disconnected\n", usb_info->name);
		queue_work(usb_info->usb_wq,
			   &usb_info->disconnect_work);
@@ -259,8 +255,8 @@ static void diag_usb_notifier(void *priv, unsigned event,
	case USB_DIAG_READ_DONE:
		spin_lock_irqsave(&usb_info->lock, flags);
		usb_info->read_ptr = d_req;
		atomic_set(&usb_info->read_pending, 0);
		spin_unlock_irqrestore(&usb_info->lock, flags);
		atomic_set(&usb_info->read_pending, 0);
		queue_work(usb_info->usb_wq,
			   &usb_info->read_done_work);
		break;
+0 −14
Original line number Diff line number Diff line
@@ -385,12 +385,9 @@ static void diagfwd_dci_read_done(struct diagfwd_info *fwd_info,
static void diagfwd_reset_buffers(struct diagfwd_info *fwd_info,
				  unsigned char *buf)
{
	unsigned long flags;

	if (!fwd_info || !buf)
		return;

	spin_lock_irqsave(&fwd_info->buf_lock, flags);
	if (!driver->feature[fwd_info->peripheral].encode_hdlc) {
		if (fwd_info->buf_1 && fwd_info->buf_1->data == buf)
			atomic_set(&fwd_info->buf_1->in_busy, 0);
@@ -402,7 +399,6 @@ static void diagfwd_reset_buffers(struct diagfwd_info *fwd_info,
		else if (fwd_info->buf_2 && fwd_info->buf_2->data_raw == buf)
			atomic_set(&fwd_info->buf_2->in_busy, 0);
	}
	spin_unlock_irqrestore(&fwd_info->buf_lock, flags);
}

int diagfwd_peripheral_init(void)
@@ -691,8 +687,6 @@ int diagfwd_write(uint8_t peripheral, uint8_t type, void *buf, int len)

static void __diag_fwd_open(struct diagfwd_info *fwd_info)
{
	unsigned long flags;

	if (!fwd_info)
		return;

@@ -700,12 +694,10 @@ static void __diag_fwd_open(struct diagfwd_info *fwd_info)
	if (!fwd_info->inited)
		return;

	spin_lock_irqsave(&fwd_info->buf_lock, flags);
	if (fwd_info->buf_1)
		atomic_set(&fwd_info->buf_1->in_busy, 0);
	if (fwd_info->buf_2)
		atomic_set(&fwd_info->buf_2->in_busy, 0);
	spin_unlock_irqrestore(&fwd_info->buf_lock, flags);

	if (fwd_info->p_ops && fwd_info->p_ops->open)
		fwd_info->p_ops->open(fwd_info->ctxt);
@@ -745,7 +737,6 @@ void diagfwd_late_open(struct diagfwd_info *fwd_info)

void diagfwd_close(uint8_t peripheral, uint8_t type)
{
	unsigned long flags;
	struct diagfwd_info *fwd_info = NULL;

	if (peripheral >= NUM_PERIPHERALS || type >= NUM_TYPES)
@@ -759,7 +750,6 @@ void diagfwd_close(uint8_t peripheral, uint8_t type)
	if (fwd_info->p_ops && fwd_info->p_ops->close)
		fwd_info->p_ops->close(fwd_info->ctxt);

	spin_lock_irqsave(&fwd_info->buf_lock, flags);
	if (fwd_info->buf_1)
		atomic_set(&fwd_info->buf_1->in_busy, 1);
	/*
@@ -768,7 +758,6 @@ void diagfwd_close(uint8_t peripheral, uint8_t type)
	 */
	if (fwd_info->buf_2)
		atomic_set(&fwd_info->buf_2->in_busy, 1);
	spin_unlock_irqrestore(&fwd_info->buf_lock, flags);
}

int diagfwd_channel_open(struct diagfwd_info *fwd_info)
@@ -851,20 +840,17 @@ int diagfwd_channel_read_done(struct diagfwd_info *fwd_info,
void diagfwd_write_done(uint8_t peripheral, uint8_t type, int ctxt)
{
	struct diagfwd_info *fwd_info = NULL;
	unsigned long flags;

	if (peripheral >= NUM_PERIPHERALS || type >= NUM_TYPES)
		return;

	fwd_info = &peripheral_info[type][peripheral];
	spin_lock_irqsave(&fwd_info->buf_lock, flags);
	if (ctxt == 1 && fwd_info->buf_1)
		atomic_set(&fwd_info->buf_1->in_busy, 0);
	else if (ctxt == 2 && fwd_info->buf_2)
		atomic_set(&fwd_info->buf_2->in_busy, 0);
	else
		pr_err("diag: In %s, invalid ctxt %d\n", __func__, ctxt);
	spin_unlock_irqrestore(&fwd_info->buf_lock, flags);

	diagfwd_queue_read(fwd_info);
}