All of lore.kernel.org
 help / color / mirror / Atom feed
From: Greg KH <gregkh@linuxfoundation.org>
To: David Kershner <david.kershner@unisys.com>,
	Song Chen <chensong_2000@189.cn>
Cc: linux-kernel@vger.kernel.org, jkc@redhat.com, sparmaintainer@unisys.com
Subject: Re: [PATCH] staging: unisys: visornic: enhance visornic to use channel_interrupt
Date: Wed, 27 Jan 2021 13:01:48 +0100	[thread overview]
Message-ID: <YBFWLAZGlp7zJ8bX@kroah.com> (raw)
In-Reply-To: <1610439940-5590-1-git-send-email-chensong_2000@189.cn>

On Tue, Jan 12, 2021 at 04:25:40PM +0800, Song Chen wrote:
> visornic uses timer to check the response queue and drain
> it if needed periodically. On the other hand, visorbus
> provides periodic work to serve such request, therefore,
> timer should be replaced by channel_interrupt.
> 
> Signed-off-by: Song Chen <chensong_2000@189.cn>
> ---
>  drivers/staging/unisys/visornic/visornic_main.c | 32 +++++++++----------------
>  1 file changed, 11 insertions(+), 21 deletions(-)
> 
> diff --git a/drivers/staging/unisys/visornic/visornic_main.c b/drivers/staging/unisys/visornic/visornic_main.c
> index 0433536..09d86156 100644
> --- a/drivers/staging/unisys/visornic/visornic_main.c
> +++ b/drivers/staging/unisys/visornic/visornic_main.c
> @@ -122,7 +122,6 @@ struct chanstat {
>   * @n_rcv_packets_not_accepted:     # bogs rcv packets.
>   * @queuefullmsg_logged:
>   * @struct chstat:
> - * @struct irq_poll_timer:
>   * @struct napi:
>   * @struct cmdrsp:
>   */
> @@ -183,7 +182,6 @@ struct visornic_devdata {
>  
>  	int queuefullmsg_logged;
>  	struct chanstat chstat;
> -	struct timer_list irq_poll_timer;
>  	struct napi_struct napi;
>  	struct uiscmdrsp cmdrsp[SIZEOF_CMDRSP];
>  };
> @@ -341,7 +339,7 @@ static void visornic_serverdown_complete(struct visornic_devdata *devdata)
>  	struct net_device *netdev = devdata->netdev;
>  
>  	/* Stop polling for interrupts */
> -	del_timer_sync(&devdata->irq_poll_timer);
> +	visorbus_disable_channel_interrupts(devdata->dev);
>  
>  	rtnl_lock();
>  	dev_close(netdev);
> @@ -1749,17 +1747,17 @@ static int visornic_poll(struct napi_struct *napi, int budget)
>  	return rx_count;
>  }
>  
> -/* poll_for_irq	- checks the status of the response queue
> - * @t: pointer to the 'struct timer_list' from which we can retrieve the
> - *     the visornic devdata struct.
> +/* visornic_channel_interrupt	- checks the status of the response queue
>   *
>   * Main function of the vnic_incoming thread. Periodically check the response
>   * queue and drain it if needed.
>   */
> -static void poll_for_irq(struct timer_list *t)
> +static void visornic_channel_interrupt(struct visor_device *dev)
>  {
> -	struct visornic_devdata *devdata = from_timer(devdata, t,
> -						      irq_poll_timer);
> +	struct visornic_devdata *devdata = dev_get_drvdata(&dev->device);
> +
> +	if (!devdata)
> +		return;
>  
>  	if (!visorchannel_signalempty(
>  				   devdata->dev->visorchannel,
> @@ -1768,7 +1766,6 @@ static void poll_for_irq(struct timer_list *t)
>  
>  	atomic_set(&devdata->interrupt_rcvd, 0);
>  
> -	mod_timer(&devdata->irq_poll_timer, msecs_to_jiffies(2));
>  }
>  
>  /* visornic_probe - probe function for visornic devices
> @@ -1890,13 +1887,6 @@ static int visornic_probe(struct visor_device *dev)
>  	/* Let's start our threads to get responses */
>  	netif_napi_add(netdev, &devdata->napi, visornic_poll, NAPI_WEIGHT);
>  
> -	timer_setup(&devdata->irq_poll_timer, poll_for_irq, 0);
> -	/* Note: This time has to start running before the while
> -	 * loop below because the napi routine is responsible for
> -	 * setting enab_dis_acked
> -	 */
> -	mod_timer(&devdata->irq_poll_timer, msecs_to_jiffies(2));
> -
>  	channel_offset = offsetof(struct visor_io_channel,
>  				  channel_header.features);
>  	err = visorbus_read_channel(dev, channel_offset, &features, 8);
> @@ -1949,7 +1939,7 @@ static int visornic_probe(struct visor_device *dev)
>  	unregister_netdev(netdev);
>  
>  cleanup_napi_add:
> -	del_timer_sync(&devdata->irq_poll_timer);
> +	visorbus_disable_channel_interrupts(dev);
>  	netif_napi_del(&devdata->napi);
>  
>  cleanup_xmit_cmdrsp:
> @@ -2017,7 +2007,7 @@ static void visornic_remove(struct visor_device *dev)
>  	/* this will call visornic_close() */
>  	unregister_netdev(netdev);
>  
> -	del_timer_sync(&devdata->irq_poll_timer);
> +	visorbus_disable_channel_interrupts(devdata->dev);
>  	netif_napi_del(&devdata->napi);
>  
>  	dev_set_drvdata(&dev->device, NULL);
> @@ -2091,7 +2081,7 @@ static int visornic_resume(struct visor_device *dev,
>  	 * we can start using the device again.
>  	 * TODO: State transitions
>  	 */
> -	mod_timer(&devdata->irq_poll_timer, msecs_to_jiffies(2));
> +	visorbus_enable_channel_interrupts(dev);
>  
>  	rtnl_lock();
>  	dev_open(netdev, NULL);
> @@ -2113,7 +2103,7 @@ static struct visor_driver visornic_driver = {
>  	.remove = visornic_remove,
>  	.pause = visornic_pause,
>  	.resume = visornic_resume,
> -	.channel_interrupt = NULL,
> +	.channel_interrupt = visornic_channel_interrupt,
>  };
>  
>  /* visornic_init - init function
> -- 
> 2.7.4
> 

David, have you reviewed this?

thanks,

greg k-h

      reply	other threads:[~2021-01-27 12:05 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-12  8:25 [PATCH] staging: unisys: visornic: enhance visornic to use channel_interrupt Song Chen
2021-01-27 12:01 ` Greg KH [this message]

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=YBFWLAZGlp7zJ8bX@kroah.com \
    --to=gregkh@linuxfoundation.org \
    --cc=chensong_2000@189.cn \
    --cc=david.kershner@unisys.com \
    --cc=jkc@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=sparmaintainer@unisys.com \
    /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.