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: Jes Sorensen <Jes.Sorensen@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
1210f8e72b
commit
df94247a89
5 changed files with 21 additions and 20 deletions
|
@ -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 =
|
||||||
|
|
||||||
#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);
|
||||||
* 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,
|
||||||
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)
|
||||||
|
|
||||||
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 {
|
||||||
* 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 @@ cleanup:
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
|
|
||||||
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();
|
||||||
|
|
Loading…
Add table
Reference in a new issue