mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-28 04:17:47 +00:00
staging: unisys: visorchannel: Add peek function
According to unisys, the s_par hypervisor has a bug in which it never triggers an interrupt. That makes the visornic effectively a 2ms poll loop. In order to just have the rx thread shceduling a napi poll every 2ms, lets instead give it the chance to check the response queue for data before we schedule. This helper provides that functionality Signed-off-by: Neil Horman <nhorman@redhat.com> Signed-off-by: Benjamin Romer <benjamin.romer@unisys.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
fd93b80592
commit
fdc792cd1b
@ -201,6 +201,8 @@ bool visorchannel_signalremove(struct visorchannel *channel, u32 queue,
|
||||
void *msg);
|
||||
bool visorchannel_signalinsert(struct visorchannel *channel, u32 queue,
|
||||
void *msg);
|
||||
bool visorchannel_signalempty(struct visorchannel *channel, u32 queue);
|
||||
|
||||
int visorchannel_signalqueue_slots_avail(struct visorchannel *channel,
|
||||
u32 queue);
|
||||
int visorchannel_signalqueue_max_slots(struct visorchannel *channel, u32 queue);
|
||||
|
@ -430,6 +430,27 @@ visorchannel_signalremove(struct visorchannel *channel, u32 queue, void *msg)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(visorchannel_signalremove);
|
||||
|
||||
bool
|
||||
visorchannel_signalempty(struct visorchannel *channel, u32 queue)
|
||||
{
|
||||
unsigned long flags = 0;
|
||||
struct signal_queue_header sig_hdr;
|
||||
bool rc = false;
|
||||
|
||||
if (channel->needs_lock)
|
||||
spin_lock_irqsave(&channel->remove_lock, flags);
|
||||
|
||||
if (!sig_read_header(channel, queue, &sig_hdr))
|
||||
rc = true;
|
||||
if (sig_hdr.head == sig_hdr.tail)
|
||||
rc = true;
|
||||
if (channel->needs_lock)
|
||||
spin_unlock_irqrestore(&channel->remove_lock, flags);
|
||||
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(visorchannel_signalempty);
|
||||
|
||||
static bool
|
||||
signalinsert_inner(struct visorchannel *channel, u32 queue, void *msg)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user