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

Commit 14ffe009 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'akpm' (Fixups from Andrew)

Merge misc fixes from Andrew Morton:
 "Followups, fixes and some random stuff I found on the internet."

* emailed patches from Andrew Morton <akpm@linux-foundation.org>: (11 patches)
  perf: fix duplicate header inclusion
  memcg, kmem: fix build error when CONFIG_INET is disabled
  rtc: kconfig: fix RTC_INTF defaults connected to RTC_CLASS
  rapidio: fix comment
  lib/kasprintf.c: use kmalloc_track_caller() to get accurate traces for kvasprintf
  rapidio: update for destination ID allocation
  rapidio: update asynchronous discovery initialization
  rapidio: use msleep in discovery wait
  mm: compaction: fix bit ranges in {get,clear,set}_pageblock_skip()
  arch/powerpc/platforms/pseries/hotplug-memory.c: section removal cleanups
  arch/powerpc/platforms/pseries/hotplug-memory.c: fix section handling code
parents ce40be7a ec073619
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -77,8 +77,9 @@ static int pseries_remove_memblock(unsigned long base, unsigned int memblock_siz
{
	unsigned long start, start_pfn;
	struct zone *zone;
	int i, ret;
	int sections_to_remove;
	int ret;
	unsigned long section;
	unsigned long sections_to_remove;

	start_pfn = base >> PAGE_SHIFT;

@@ -99,9 +100,9 @@ static int pseries_remove_memblock(unsigned long base, unsigned int memblock_siz
	 * while writing to it. So we have to defer it to here.
	 */
	sections_to_remove = (memblock_size >> PAGE_SHIFT) / PAGES_PER_SECTION;
	for (i = 0; i < sections_to_remove; i++) {
		unsigned long pfn = start_pfn + i * PAGES_PER_SECTION;
		ret = __remove_pages(zone, start_pfn,  PAGES_PER_SECTION);
	for (section = 0; section < sections_to_remove; section++) {
		unsigned long pfn = start_pfn + section * PAGES_PER_SECTION;
		ret = __remove_pages(zone, pfn, PAGES_PER_SECTION);
		if (ret)
			return ret;
	}
+17 −23
Original line number Diff line number Diff line
@@ -55,9 +55,9 @@ static int rio_mport_phys_table[] = {
};


/*
/**
 * rio_destid_alloc - Allocate next available destID for given network
 * net: RIO network
 * @net: RIO network
 *
 * Returns next available device destination ID for the specified RIO network.
 * Marks allocated ID as one in use.
@@ -69,14 +69,9 @@ static u16 rio_destid_alloc(struct rio_net *net)
	struct rio_id_table *idtab = &net->destid_table;

	spin_lock(&idtab->lock);
	destid = find_next_zero_bit(idtab->table, idtab->max, idtab->next);
	if (destid >= idtab->max)
	destid = find_first_zero_bit(idtab->table, idtab->max);

	if (destid < idtab->max) {
		idtab->next = destid + 1;
		if (idtab->next >= idtab->max)
			idtab->next = 0;
		set_bit(destid, idtab->table);
		destid += idtab->start;
	} else
@@ -86,10 +81,10 @@ static u16 rio_destid_alloc(struct rio_net *net)
	return (u16)destid;
}

/*
/**
 * rio_destid_reserve - Reserve the specivied destID
 * net: RIO network
 * destid: destID to reserve
 * @net: RIO network
 * @destid: destID to reserve
 *
 * Tries to reserve the specified destID.
 * Returns 0 if successfull.
@@ -106,10 +101,10 @@ static int rio_destid_reserve(struct rio_net *net, u16 destid)
	return oldbit;
}

/*
/**
 * rio_destid_free - free a previously allocated destID
 * net: RIO network
 * destid: destID to free
 * @net: RIO network
 * @destid: destID to free
 *
 * Makes the specified destID available for use.
 */
@@ -123,9 +118,9 @@ static void rio_destid_free(struct rio_net *net, u16 destid)
	spin_unlock(&idtab->lock);
}

/*
/**
 * rio_destid_first - return first destID in use
 * net: RIO network
 * @net: RIO network
 */
static u16 rio_destid_first(struct rio_net *net)
{
@@ -142,10 +137,10 @@ static u16 rio_destid_first(struct rio_net *net)
	return (u16)destid;
}

/*
/**
 * rio_destid_next - return next destID in use
 * net: RIO network
 * from: destination ID from which search shall continue
 * @net: RIO network
 * @from: destination ID from which search shall continue
 */
static u16 rio_destid_next(struct rio_net *net, u16 from)
{
@@ -1163,8 +1158,8 @@ static struct rio_net __devinit *rio_alloc_net(struct rio_mport *port,

	net = kzalloc(sizeof(struct rio_net), GFP_KERNEL);
	if (net && do_enum) {
		net->destid_table.table = kzalloc(
			BITS_TO_LONGS(RIO_MAX_ROUTE_ENTRIES(port->sys_size)) *
		net->destid_table.table = kcalloc(
			BITS_TO_LONGS(RIO_MAX_ROUTE_ENTRIES(port->sys_size)),
			sizeof(long),
			GFP_KERNEL);

@@ -1174,7 +1169,6 @@ static struct rio_net __devinit *rio_alloc_net(struct rio_mport *port,
			net = NULL;
		} else {
			net->destid_table.start = start;
			net->destid_table.next = 0;
			net->destid_table.max =
					RIO_MAX_ROUTE_ENTRIES(port->sys_size);
			spin_lock_init(&net->destid_table.lock);
@@ -1391,7 +1385,7 @@ int __devinit rio_disc_mport(struct rio_mport *mport)
		while (time_before(jiffies, to_end)) {
			if (rio_enum_complete(mport))
				goto enum_done;
			schedule_timeout_uninterruptible(msecs_to_jiffies(10));
			msleep(10);
		}

		pr_debug("RIO: discovery timeout on mport %d %s\n",
+47 −28
Original line number Diff line number Diff line
@@ -1275,49 +1275,68 @@ static void __devinit disc_work_handler(struct work_struct *_work)
	pr_debug("RIO: discovery work for mport %d %s\n",
		 work->mport->id, work->mport->name);
	rio_disc_mport(work->mport);

	kfree(work);
}

int __devinit rio_init_mports(void)
{
	struct rio_mport *port;
	struct rio_disc_work *work;
	int no_disc = 0;
	int n = 0;

	if (!next_portid)
		return -ENODEV;

	/*
	 * First, run enumerations and check if we need to perform discovery
	 * on any of the registered mports.
	 */
	list_for_each_entry(port, &rio_mports, node) {
		if (port->host_deviceid >= 0)
			rio_enum_mport(port);
		else if (!no_disc) {
			if (!rio_wq) {
		else
			n++;
	}

	if (!n)
		goto no_disc;

	/*
	 * If we have mports that require discovery schedule a discovery work
	 * for each of them. If the code below fails to allocate needed
	 * resources, exit without error to keep results of enumeration
	 * process (if any).
	 * TODO: Implement restart of dicovery process for all or
	 * individual discovering mports.
	 */
	rio_wq = alloc_workqueue("riodisc", 0, 0);
	if (!rio_wq) {
		pr_err("RIO: unable allocate rio_wq\n");
					no_disc = 1;
					continue;
				}
		goto no_disc;
	}

			work = kzalloc(sizeof *work, GFP_KERNEL);
	work = kcalloc(n, sizeof *work, GFP_KERNEL);
	if (!work) {
		pr_err("RIO: no memory for work struct\n");
				no_disc = 1;
				continue;
		destroy_workqueue(rio_wq);
		goto no_disc;
	}

			work->mport = port;
			INIT_WORK(&work->work, disc_work_handler);
			queue_work(rio_wq, &work->work);
	n = 0;
	list_for_each_entry(port, &rio_mports, node) {
		if (port->host_deviceid < 0) {
			work[n].mport = port;
			INIT_WORK(&work[n].work, disc_work_handler);
			queue_work(rio_wq, &work[n].work);
			n++;
		}
	}

	if (rio_wq) {
		pr_debug("RIO: flush discovery workqueue\n");
	flush_workqueue(rio_wq);
		pr_debug("RIO: flush discovery workqueue finished\n");
	pr_debug("RIO: destroy discovery workqueue\n");
	destroy_workqueue(rio_wq);
	}
	kfree(work);

no_disc:
	rio_init();

	return 0;
+3 −0
Original line number Diff line number Diff line
@@ -59,6 +59,7 @@ comment "RTC interfaces"
config RTC_INTF_SYSFS
	boolean "/sys/class/rtc/rtcN (sysfs)"
	depends on SYSFS
	default RTC_CLASS
	help
	  Say yes here if you want to use your RTCs using sysfs interfaces,
	  /sys/class/rtc/rtc0 through /sys/.../rtcN.
@@ -68,6 +69,7 @@ config RTC_INTF_SYSFS
config RTC_INTF_PROC
	boolean "/proc/driver/rtc (procfs for rtcN)"
	depends on PROC_FS
	default RTC_CLASS
	help
	  Say yes here if you want to use your system clock RTC through
	  the proc interface, /proc/driver/rtc.
@@ -79,6 +81,7 @@ config RTC_INTF_PROC

config RTC_INTF_DEV
	boolean "/dev/rtcN (character devices)"
	default RTC_CLASS
	help
	  Say yes here if you want to use your RTCs using the /dev
	  interfaces, which "udev" sets up as /dev/rtc0 through
+2 −2
Original line number Diff line number Diff line
@@ -396,7 +396,7 @@ enum {
};

struct sock;
#ifdef CONFIG_MEMCG_KMEM
#if defined(CONFIG_INET) && defined(CONFIG_MEMCG_KMEM)
void sock_update_memcg(struct sock *sk);
void sock_release_memcg(struct sock *sk);
#else
@@ -406,6 +406,6 @@ static inline void sock_update_memcg(struct sock *sk)
static inline void sock_release_memcg(struct sock *sk)
{
}
#endif /* CONFIG_MEMCG_KMEM */
#endif /* CONFIG_INET && CONFIG_MEMCG_KMEM */
#endif /* _LINUX_MEMCONTROL_H */
Loading