Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 93afe0b7 authored by Jeremy Fitzhardinge's avatar Jeremy Fitzhardinge
Browse files

xen/evtchn: dynamically allocate port_user array



We only need the array when running as a Xen domain, so dynamically
allocate it as needed to save on bss space.

Signed-off-by: default avatarJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
parent e3cc067b
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -73,7 +73,7 @@ struct per_user_data {
 * Who's bound to each port?  This is logically an array of struct
 * per_user_data *, but we encode the current enabled-state in bit 0.
 */
static unsigned long port_user[NR_EVENT_CHANNELS];
static unsigned long *port_user;
static DEFINE_SPINLOCK(port_user_lock); /* protects port_user[] and ring_prod */

static inline struct per_user_data *get_port_user(unsigned port)
@@ -522,8 +522,11 @@ static int __init evtchn_init(void)
	if (!xen_domain())
		return -ENODEV;

	port_user = kcalloc(NR_EVENT_CHANNELS, sizeof(*port_user), GFP_KERNEL);
	if (port_user == NULL)
		return -ENOMEM;

	spin_lock_init(&port_user_lock);
	memset(port_user, 0, sizeof(port_user));

	/* Create '/dev/misc/evtchn'. */
	err = misc_register(&evtchn_miscdev);
@@ -539,6 +542,9 @@ static int __init evtchn_init(void)

static void __exit evtchn_cleanup(void)
{
	kfree(port_user);
	port_user = NULL;

	misc_deregister(&evtchn_miscdev);
}