Commit df94247a authored by Jes Sorensen's avatar Jes Sorensen Committed by Greg Kroah-Hartman

staging: unisys: visorchannel: Make visorchannel_create take a gfp_t

This allows the caller to specify an appropriate GFP flag instead of
hardcoding the lowest common denominator.
Signed-off-by: default avatarJes Sorensen <Jes.Sorensen@redhat.com>
Signed-off-by: default avatarBenjamin Romer <benjamin.romer@unisys.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 1210f8e7
...@@ -25,9 +25,6 @@ ...@@ -25,9 +25,6 @@
UUID_LE(0x2b3c2d10, 0x7ef5, 0x4ad8, \ UUID_LE(0x2b3c2d10, 0x7ef5, 0x4ad8, \
0xb9, 0x66, 0x34, 0x48, 0xb7, 0x38, 0x6b, 0x3d) 0xb9, 0x66, 0x34, 0x48, 0xb7, 0x38, 0x6b, 0x3d)
static const uuid_le spar_controlvm_channel_protocol_uuid =
SPAR_CONTROLVM_CHANNEL_PROTOCOL_UUID;
#define ULTRA_CONTROLVM_CHANNEL_PROTOCOL_SIGNATURE \ #define ULTRA_CONTROLVM_CHANNEL_PROTOCOL_SIGNATURE \
ULTRA_CHANNEL_PROTOCOL_SIGNATURE ULTRA_CHANNEL_PROTOCOL_SIGNATURE
#define CONTROLVM_MESSAGE_MAX 64 #define CONTROLVM_MESSAGE_MAX 64
...@@ -42,7 +39,7 @@ static const uuid_le spar_controlvm_channel_protocol_uuid = ...@@ -42,7 +39,7 @@ static const uuid_le spar_controlvm_channel_protocol_uuid =
#define SPAR_CONTROLVM_CHANNEL_OK_CLIENT(ch) \ #define SPAR_CONTROLVM_CHANNEL_OK_CLIENT(ch) \
spar_check_channel_client(ch, \ spar_check_channel_client(ch, \
spar_controlvm_channel_protocol_uuid, \ SPAR_CONTROLVM_CHANNEL_PROTOCOL_UUID, \
"controlvm", \ "controlvm", \
sizeof(struct spar_controlvm_channel_protocol), \ sizeof(struct spar_controlvm_channel_protocol), \
ULTRA_CONTROLVM_CHANNEL_PROTOCOL_VERSIONID, \ ULTRA_CONTROLVM_CHANNEL_PROTOCOL_VERSIONID, \
......
...@@ -168,10 +168,11 @@ void visorbus_disable_channel_interrupts(struct visor_device *dev); ...@@ -168,10 +168,11 @@ void visorbus_disable_channel_interrupts(struct visor_device *dev);
* In this case, the values can simply be read from the channel header. * In this case, the values can simply be read from the channel header.
*/ */
struct visorchannel *visorchannel_create(u64 physaddr, struct visorchannel *visorchannel_create(u64 physaddr,
ulong channel_bytes, uuid_le guid); unsigned long channel_bytes,
gfp_t gfp, uuid_le guid);
struct visorchannel *visorchannel_create_with_lock(u64 physaddr, struct visorchannel *visorchannel_create_with_lock(u64 physaddr,
ulong channel_bytes, unsigned long channel_bytes,
uuid_le guid); gfp_t gfp, uuid_le guid);
void visorchannel_destroy(struct visorchannel *channel); void visorchannel_destroy(struct visorchannel *channel);
int visorchannel_read(struct visorchannel *channel, ulong offset, int visorchannel_read(struct visorchannel *channel, ulong offset,
void *local, ulong nbytes); void *local, ulong nbytes);
......
...@@ -1308,8 +1308,8 @@ create_visor_device(struct visorbus_devdata *devdata, ...@@ -1308,8 +1308,8 @@ create_visor_device(struct visorbus_devdata *devdata,
POSTCODE_SEVERITY_INFO); POSTCODE_SEVERITY_INFO);
/* prepare chan_hdr (abstraction to read/write channel memory) */ /* prepare chan_hdr (abstraction to read/write channel memory) */
visorchannel = visorchannel_create(chan_info.channel_addr, visorchannel = visorchannel_create(chan_info.channel_addr,
(unsigned long)
chan_info.n_channel_bytes, chan_info.n_channel_bytes,
GFP_KERNEL,
chan_info.channel_type_uuid); chan_info.channel_type_uuid);
if (!visorchannel) { if (!visorchannel) {
POSTCODE_LINUX_3(DEVICE_CREATE_FAILURE_PC, chipset_dev_no, POSTCODE_LINUX_3(DEVICE_CREATE_FAILURE_PC, chipset_dev_no,
...@@ -1676,6 +1676,7 @@ create_bus_instance(int id) ...@@ -1676,6 +1676,7 @@ create_bus_instance(int id)
devdata->chan = visorchannel_create(channel_addr, devdata->chan = visorchannel_create(channel_addr,
n_channel_bytes, n_channel_bytes,
GFP_KERNEL,
channel_type_guid); channel_type_guid);
if (!devdata->chan) { if (!devdata->chan) {
POSTCODE_LINUX_3(DEVICE_CREATE_FAILURE_PC, channel_addr, POSTCODE_LINUX_3(DEVICE_CREATE_FAILURE_PC, channel_addr,
......
...@@ -50,14 +50,15 @@ struct visorchannel { ...@@ -50,14 +50,15 @@ struct visorchannel {
* but does NOT modify this data area. * but does NOT modify this data area.
*/ */
static struct visorchannel * static struct visorchannel *
visorchannel_create_guts(u64 physaddr, ulong channel_bytes, visorchannel_create_guts(u64 physaddr, unsigned long channel_bytes,
ulong off, uuid_le guid, bool needs_lock) gfp_t gfp, unsigned long off,
uuid_le guid, bool needs_lock)
{ {
struct visorchannel *channel; struct visorchannel *channel;
int err; int err;
size_t size = sizeof(struct channel_header); size_t size = sizeof(struct channel_header);
channel = kzalloc(sizeof(*channel), GFP_KERNEL|__GFP_NORETRY); channel = kzalloc(sizeof(*channel), gfp);
if (!channel) if (!channel)
goto cleanup; goto cleanup;
...@@ -112,18 +113,19 @@ visorchannel_create_guts(u64 physaddr, ulong channel_bytes, ...@@ -112,18 +113,19 @@ visorchannel_create_guts(u64 physaddr, ulong channel_bytes,
} }
struct visorchannel * struct visorchannel *
visorchannel_create(u64 physaddr, ulong channel_bytes, uuid_le guid) visorchannel_create(u64 physaddr, unsigned long channel_bytes,
gfp_t gfp, uuid_le guid)
{ {
return visorchannel_create_guts(physaddr, channel_bytes, 0, guid, return visorchannel_create_guts(physaddr, channel_bytes, gfp, 0, guid,
false); false);
} }
EXPORT_SYMBOL_GPL(visorchannel_create); EXPORT_SYMBOL_GPL(visorchannel_create);
struct visorchannel * struct visorchannel *
visorchannel_create_with_lock(u64 physaddr, ulong channel_bytes, visorchannel_create_with_lock(u64 physaddr, unsigned long channel_bytes,
uuid_le guid) gfp_t gfp, uuid_le guid)
{ {
return visorchannel_create_guts(physaddr, channel_bytes, 0, guid, return visorchannel_create_guts(physaddr, channel_bytes, gfp, 0, guid,
true); true);
} }
EXPORT_SYMBOL_GPL(visorchannel_create_with_lock); EXPORT_SYMBOL_GPL(visorchannel_create_with_lock);
......
...@@ -2659,11 +2659,11 @@ visorchipset_init(struct acpi_device *acpi_device) ...@@ -2659,11 +2659,11 @@ visorchipset_init(struct acpi_device *acpi_device)
addr = controlvm_get_channel_address(); addr = controlvm_get_channel_address();
if (addr) { if (addr) {
int tmp_sz = sizeof(struct spar_controlvm_channel_protocol);
uuid_le uuid = SPAR_CONTROLVM_CHANNEL_PROTOCOL_UUID;
controlvm_channel = controlvm_channel =
visorchannel_create_with_lock visorchannel_create_with_lock(addr, tmp_sz,
(addr, GFP_KERNEL, uuid);
sizeof(struct spar_controlvm_channel_protocol),
spar_controlvm_channel_protocol_uuid);
if (SPAR_CONTROLVM_CHANNEL_OK_CLIENT( if (SPAR_CONTROLVM_CHANNEL_OK_CLIENT(
visorchannel_get_header(controlvm_channel))) { visorchannel_get_header(controlvm_channel))) {
initialize_controlvm_payload(); initialize_controlvm_payload();
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment