Commit 69141bb8 authored by Prarit Bhargava's avatar Prarit Bhargava Committed by Greg Kroah-Hartman
Browse files

staging: unisys: visorchannel some general function cleanups



Just some cleanups for visorchannel.c, and removal of
safe_sig_queue_validate() which is dead code.

Signed-off-by: default avatarPrarit Bhargava <prarit@redhat.com>
Signed-off-by: default avatarBenjamin Romer <benjamin.romer@unisys.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 10c69bb7
Loading
Loading
Loading
Loading
+41 −69
Original line number Diff line number Diff line
@@ -211,13 +211,12 @@ int
visorchannel_read(struct visorchannel *channel, ulong offset,
		  void *local, ulong nbytes)
{
	int rc = visor_memregion_read(channel->memregion, offset,
				      local, nbytes);
	if ((rc >= 0) && (offset == 0) &&
	    (nbytes >= sizeof(struct channel_header))) {
		memcpy(&channel->chan_hdr, local,
		       sizeof(struct channel_header));
	}
	int rc;
	size_t size = sizeof(struct channel_header);

	rc = visor_memregion_read(channel->memregion, offset, local, nbytes);
	if (rc && !offset && (nbytes >= size))
		memcpy(&channel->chan_hdr, local, size);
	return rc;
}
EXPORT_SYMBOL_GPL(visorchannel_read);
@@ -226,9 +225,10 @@ int
visorchannel_write(struct visorchannel *channel, ulong offset,
		   void *local, ulong nbytes)
{
	if (offset == 0 && nbytes >= sizeof(struct channel_header))
		memcpy(&channel->chan_hdr, local,
		       sizeof(struct channel_header));
	size_t size = sizeof(struct channel_header);

	if (!offset && nbytes >= size)
		memcpy(&channel->chan_hdr, local, size);
	return visor_memregion_write(channel->memregion, offset, local, nbytes);
}
EXPORT_SYMBOL_GPL(visorchannel_write);
@@ -237,38 +237,34 @@ int
visorchannel_clear(struct visorchannel *channel, ulong offset, u8 ch,
		   ulong nbytes)
{
	int rc = -1;
	int err;
	int bufsize = 65536;
	int written = 0;
	u8 *buf = vmalloc(bufsize);
	u8 *buf;

	buf = vmalloc(bufsize);
	if (!buf)
		goto cleanup;
		return -ENOMEM;

	memset(buf, ch, bufsize);
	while (nbytes > 0) {
		ulong thisbytes = bufsize;
		int x = -1;

		if (nbytes < thisbytes)
			thisbytes = nbytes;
		x = visor_memregion_write(channel->memregion, offset + written,
					  buf, thisbytes);
		if (x < 0) {
			rc = x;
		err = visor_memregion_write(channel->memregion,
					    offset + written, buf, thisbytes);
		if (err)
			goto cleanup;
		}

		written += thisbytes;
		nbytes -= thisbytes;
	}
	rc = 0;
	return 0;

cleanup:
	if (buf) {
	vfree(buf);
		buf = NULL;
	}
	return rc;
	return err;
}
EXPORT_SYMBOL_GPL(visorchannel_clear);

@@ -307,22 +303,19 @@ static BOOL
sig_read_header(struct visorchannel *channel, u32 queue,
		struct signal_queue_header *sig_hdr)
{
	BOOL rc = FALSE;
	int err;

	if (channel->chan_hdr.ch_space_offset < sizeof(struct channel_header))
		goto cleanup;
		return FALSE;

	/* Read the appropriate SIGNAL_QUEUE_HEADER into local memory. */

	if (visor_memregion_read(channel->memregion,
	err = visor_memregion_read(channel->memregion,
				   SIG_QUEUE_OFFSET(&channel->chan_hdr, queue),
				 sig_hdr,
				 sizeof(struct signal_queue_header)) < 0) {
		goto cleanup;
	}
	rc = TRUE;
cleanup:
	return rc;
				   sig_hdr, sizeof(struct signal_queue_header));
	if (err)
		return FALSE;

	return TRUE;
}

static BOOL
@@ -330,24 +323,23 @@ sig_do_data(struct visorchannel *channel, u32 queue,
	    struct signal_queue_header *sig_hdr, u32 slot, void *data,
	    BOOL is_write)
{
	BOOL rc = FALSE;
	int err;
	int signal_data_offset = SIG_DATA_OFFSET(&channel->chan_hdr, queue,
						 sig_hdr, slot);
	if (is_write) {
		if (visor_memregion_write(channel->memregion,
		err = visor_memregion_write(channel->memregion,
					    signal_data_offset,
					  data, sig_hdr->signal_size) < 0) {
			goto cleanup;
		}
					    data, sig_hdr->signal_size);
		if (err)
			return FALSE;
	} else {
		if (visor_memregion_read(channel->memregion, signal_data_offset,
					 data, sig_hdr->signal_size) < 0) {
			goto cleanup;
		}
		err = visor_memregion_read(channel->memregion,
					   signal_data_offset,
					   data, sig_hdr->signal_size);
		if (err)
			return FALSE;
	}
	rc = TRUE;
cleanup:
	return rc;
	return TRUE;
}

static inline BOOL
@@ -364,26 +356,6 @@ sig_write_data(struct visorchannel *channel, u32 queue,
	return sig_do_data(channel, queue, sig_hdr, slot, data, TRUE);
}

static inline unsigned char
safe_sig_queue_validate(struct signal_queue_header *psafe_sqh,
			struct signal_queue_header *punsafe_sqh,
			u32 *phead, u32 *ptail)
{
	if ((*phead >= psafe_sqh->max_slots) ||
	    (*ptail >= psafe_sqh->max_slots)) {
		/* Choose 0 or max, maybe based on current tail value */
		*phead = 0;
		*ptail = 0;

		/* Sync with client as necessary */
		punsafe_sqh->head = *phead;
		punsafe_sqh->tail = *ptail;

		return 0;
	}
	return 1;
}				/* end safe_sig_queue_validate */

static BOOL
signalremove_inner(struct visorchannel *channel, u32 queue, void *msg)
{