|
@@ -363,17 +363,8 @@ static int signalinsert_inner(struct visorchannel *channel, u32 queue,
|
|
|
* for a data area in memory, but does NOT modify
|
|
|
* this data area
|
|
|
* @physaddr: physical address of start of channel
|
|
|
- * @channel_bytes: size of the channel in bytes; this may 0 if the channel has
|
|
|
- * already been initialized in memory (which is true for all
|
|
|
- * channels provided to guest environments by the s-Par
|
|
|
- * back-end), in which case the actual channel size will be
|
|
|
- * read from the channel header in memory
|
|
|
* @gfp: gfp_t to use when allocating memory for the data struct
|
|
|
- * @guid: GUID that identifies channel type; this may 0 if the channel
|
|
|
- * has already been initialized in memory (which is true for all
|
|
|
- * channels provided to guest environments by the s-Par
|
|
|
- * back-end), in which case the actual channel guid will be
|
|
|
- * read from the channel header in memory
|
|
|
+ * @guid: GUID that identifies channel type;
|
|
|
* @needs_lock: must specify true if you have multiple threads of execution
|
|
|
* that will be calling visorchannel methods of this
|
|
|
* visorchannel at the same time
|
|
@@ -381,11 +372,9 @@ static int signalinsert_inner(struct visorchannel *channel, u32 queue,
|
|
|
* Return: pointer to visorchannel that was created if successful,
|
|
|
* otherwise NULL
|
|
|
*/
|
|
|
-static struct visorchannel *visorchannel_create_guts(
|
|
|
- u64 physaddr,
|
|
|
- unsigned long channel_bytes,
|
|
|
- gfp_t gfp, const guid_t *guid,
|
|
|
- bool needs_lock)
|
|
|
+static struct visorchannel *visorchannel_create_guts(u64 physaddr, gfp_t gfp,
|
|
|
+ const guid_t *guid,
|
|
|
+ bool needs_lock)
|
|
|
{
|
|
|
struct visorchannel *channel;
|
|
|
int err;
|
|
@@ -423,35 +412,28 @@ static struct visorchannel *visorchannel_create_guts(
|
|
|
channel->physaddr = physaddr;
|
|
|
channel->nbytes = size;
|
|
|
|
|
|
- err = visorchannel_read(channel, 0, &channel->chan_hdr,
|
|
|
- sizeof(struct channel_header));
|
|
|
+ err = visorchannel_read(channel, 0, &channel->chan_hdr, size);
|
|
|
if (err)
|
|
|
goto err_destroy_channel;
|
|
|
-
|
|
|
- /* we had better be a CLIENT of this channel */
|
|
|
- if (channel_bytes == 0)
|
|
|
- channel_bytes = (ulong)channel->chan_hdr.size;
|
|
|
- if (guid_is_null(guid))
|
|
|
- guid = &channel->chan_hdr.chtype;
|
|
|
+ size = (ulong)channel->chan_hdr.size;
|
|
|
|
|
|
memunmap(channel->mapped);
|
|
|
if (channel->requested)
|
|
|
release_mem_region(channel->physaddr, channel->nbytes);
|
|
|
channel->mapped = NULL;
|
|
|
- channel->requested = request_mem_region(channel->physaddr,
|
|
|
- channel_bytes, VISOR_DRV_NAME);
|
|
|
+ channel->requested = request_mem_region(channel->physaddr, size,
|
|
|
+ VISOR_DRV_NAME);
|
|
|
if (!channel->requested && !guid_equal(guid, &visor_video_guid))
|
|
|
/* we only care about errors if this is not the video channel */
|
|
|
goto err_destroy_channel;
|
|
|
|
|
|
- channel->mapped = memremap(channel->physaddr, channel_bytes,
|
|
|
- MEMREMAP_WB);
|
|
|
+ channel->mapped = memremap(channel->physaddr, size, MEMREMAP_WB);
|
|
|
if (!channel->mapped) {
|
|
|
- release_mem_region(channel->physaddr, channel_bytes);
|
|
|
+ release_mem_region(channel->physaddr, size);
|
|
|
goto err_destroy_channel;
|
|
|
}
|
|
|
|
|
|
- channel->nbytes = channel_bytes;
|
|
|
+ channel->nbytes = size;
|
|
|
guid_copy(&channel->guid, guid);
|
|
|
return channel;
|
|
|
|
|
@@ -460,20 +442,16 @@ err_destroy_channel:
|
|
|
return NULL;
|
|
|
}
|
|
|
|
|
|
-struct visorchannel *visorchannel_create(u64 physaddr,
|
|
|
- unsigned long channel_bytes,
|
|
|
- gfp_t gfp, const guid_t *guid)
|
|
|
+struct visorchannel *visorchannel_create(u64 physaddr, gfp_t gfp,
|
|
|
+ const guid_t *guid)
|
|
|
{
|
|
|
- return visorchannel_create_guts(physaddr, channel_bytes, gfp, guid,
|
|
|
- false);
|
|
|
+ return visorchannel_create_guts(physaddr, gfp, guid, false);
|
|
|
}
|
|
|
|
|
|
-struct visorchannel *visorchannel_create_with_lock(u64 physaddr,
|
|
|
- unsigned long channel_bytes,
|
|
|
- gfp_t gfp, const guid_t *guid)
|
|
|
+struct visorchannel *visorchannel_create_with_lock(u64 physaddr, gfp_t gfp,
|
|
|
+ const guid_t *guid)
|
|
|
{
|
|
|
- return visorchannel_create_guts(physaddr, channel_bytes, gfp, guid,
|
|
|
- true);
|
|
|
+ return visorchannel_create_guts(physaddr, gfp, guid, true);
|
|
|
}
|
|
|
|
|
|
/**
|