diff options
| -rw-r--r-- | arch/powerpc/platforms/pseries/hotplug-memory.c | 11 | ||||
| -rw-r--r-- | drivers/rapidio/rio-scan.c | 40 | ||||
| -rw-r--r-- | drivers/rapidio/rio.c | 75 | ||||
| -rw-r--r-- | drivers/rtc/Kconfig | 3 | ||||
| -rw-r--r-- | include/linux/memcontrol.h | 4 | ||||
| -rw-r--r-- | include/linux/pageblock-flags.h | 6 | ||||
| -rw-r--r-- | include/linux/rio.h | 3 | ||||
| -rw-r--r-- | lib/kasprintf.c | 2 | ||||
| -rw-r--r-- | tools/perf/util/include/linux/rbtree.h | 1 |
9 files changed, 80 insertions, 65 deletions
diff --git a/arch/powerpc/platforms/pseries/hotplug-memory.c b/arch/powerpc/platforms/pseries/hotplug-memory.c index dc0a035e63b..ecdb0a6b317 100644 --- a/arch/powerpc/platforms/pseries/hotplug-memory.c +++ b/arch/powerpc/platforms/pseries/hotplug-memory.c | |||
| @@ -77,8 +77,9 @@ static int pseries_remove_memblock(unsigned long base, unsigned int memblock_siz | |||
| 77 | { | 77 | { |
| 78 | unsigned long start, start_pfn; | 78 | unsigned long start, start_pfn; |
| 79 | struct zone *zone; | 79 | struct zone *zone; |
| 80 | int i, ret; | 80 | int ret; |
| 81 | int sections_to_remove; | 81 | unsigned long section; |
| 82 | unsigned long sections_to_remove; | ||
| 82 | 83 | ||
| 83 | start_pfn = base >> PAGE_SHIFT; | 84 | start_pfn = base >> PAGE_SHIFT; |
| 84 | 85 | ||
| @@ -99,9 +100,9 @@ static int pseries_remove_memblock(unsigned long base, unsigned int memblock_siz | |||
| 99 | * while writing to it. So we have to defer it to here. | 100 | * while writing to it. So we have to defer it to here. |
| 100 | */ | 101 | */ |
| 101 | sections_to_remove = (memblock_size >> PAGE_SHIFT) / PAGES_PER_SECTION; | 102 | sections_to_remove = (memblock_size >> PAGE_SHIFT) / PAGES_PER_SECTION; |
| 102 | for (i = 0; i < sections_to_remove; i++) { | 103 | for (section = 0; section < sections_to_remove; section++) { |
| 103 | unsigned long pfn = start_pfn + i * PAGES_PER_SECTION; | 104 | unsigned long pfn = start_pfn + section * PAGES_PER_SECTION; |
| 104 | ret = __remove_pages(zone, start_pfn, PAGES_PER_SECTION); | 105 | ret = __remove_pages(zone, pfn, PAGES_PER_SECTION); |
| 105 | if (ret) | 106 | if (ret) |
| 106 | return ret; | 107 | return ret; |
| 107 | } | 108 | } |
diff --git a/drivers/rapidio/rio-scan.c b/drivers/rapidio/rio-scan.c index 48e9041dd1e..07da58bb495 100644 --- a/drivers/rapidio/rio-scan.c +++ b/drivers/rapidio/rio-scan.c | |||
| @@ -55,9 +55,9 @@ static int rio_mport_phys_table[] = { | |||
| 55 | }; | 55 | }; |
| 56 | 56 | ||
| 57 | 57 | ||
| 58 | /* | 58 | /** |
| 59 | * rio_destid_alloc - Allocate next available destID for given network | 59 | * rio_destid_alloc - Allocate next available destID for given network |
| 60 | * net: RIO network | 60 | * @net: RIO network |
| 61 | * | 61 | * |
| 62 | * Returns next available device destination ID for the specified RIO network. | 62 | * Returns next available device destination ID for the specified RIO network. |
| 63 | * Marks allocated ID as one in use. | 63 | * Marks allocated ID as one in use. |
| @@ -69,14 +69,9 @@ static u16 rio_destid_alloc(struct rio_net *net) | |||
| 69 | struct rio_id_table *idtab = &net->destid_table; | 69 | struct rio_id_table *idtab = &net->destid_table; |
| 70 | 70 | ||
| 71 | spin_lock(&idtab->lock); | 71 | spin_lock(&idtab->lock); |
| 72 | destid = find_next_zero_bit(idtab->table, idtab->max, idtab->next); | 72 | destid = find_first_zero_bit(idtab->table, idtab->max); |
| 73 | if (destid >= idtab->max) | ||
| 74 | destid = find_first_zero_bit(idtab->table, idtab->max); | ||
| 75 | 73 | ||
| 76 | if (destid < idtab->max) { | 74 | if (destid < idtab->max) { |
| 77 | idtab->next = destid + 1; | ||
| 78 | if (idtab->next >= idtab->max) | ||
| 79 | idtab->next = 0; | ||
| 80 | set_bit(destid, idtab->table); | 75 | set_bit(destid, idtab->table); |
| 81 | destid += idtab->start; | 76 | destid += idtab->start; |
| 82 | } else | 77 | } else |
| @@ -86,10 +81,10 @@ static u16 rio_destid_alloc(struct rio_net *net) | |||
| 86 | return (u16)destid; | 81 | return (u16)destid; |
| 87 | } | 82 | } |
| 88 | 83 | ||
| 89 | /* | 84 | /** |
| 90 | * rio_destid_reserve - Reserve the specivied destID | 85 | * rio_destid_reserve - Reserve the specivied destID |
| 91 | * net: RIO network | 86 | * @net: RIO network |
| 92 | * destid: destID to reserve | 87 | * @destid: destID to reserve |
| 93 | * | 88 | * |
| 94 | * Tries to reserve the specified destID. | 89 | * Tries to reserve the specified destID. |
| 95 | * Returns 0 if successfull. | 90 | * Returns 0 if successfull. |
| @@ -106,10 +101,10 @@ static int rio_destid_reserve(struct rio_net *net, u16 destid) | |||
| 106 | return oldbit; | 101 | return oldbit; |
| 107 | } | 102 | } |
| 108 | 103 | ||
| 109 | /* | 104 | /** |
| 110 | * rio_destid_free - free a previously allocated destID | 105 | * rio_destid_free - free a previously allocated destID |
| 111 | * net: RIO network | 106 | * @net: RIO network |
| 112 | * destid: destID to free | 107 | * @destid: destID to free |
| 113 | * | 108 | * |
| 114 | * Makes the specified destID available for use. | 109 | * Makes the specified destID available for use. |
| 115 | */ | 110 | */ |
| @@ -123,9 +118,9 @@ static void rio_destid_free(struct rio_net *net, u16 destid) | |||
| 123 | spin_unlock(&idtab->lock); | 118 | spin_unlock(&idtab->lock); |
| 124 | } | 119 | } |
| 125 | 120 | ||
| 126 | /* | 121 | /** |
| 127 | * rio_destid_first - return first destID in use | 122 | * rio_destid_first - return first destID in use |
| 128 | * net: RIO network | 123 | * @net: RIO network |
| 129 | */ | 124 | */ |
| 130 | static u16 rio_destid_first(struct rio_net *net) | 125 | static u16 rio_destid_first(struct rio_net *net) |
| 131 | { | 126 | { |
| @@ -142,10 +137,10 @@ static u16 rio_destid_first(struct rio_net *net) | |||
| 142 | return (u16)destid; | 137 | return (u16)destid; |
| 143 | } | 138 | } |
| 144 | 139 | ||
| 145 | /* | 140 | /** |
| 146 | * rio_destid_next - return next destID in use | 141 | * rio_destid_next - return next destID in use |
| 147 | * net: RIO network | 142 | * @net: RIO network |
| 148 | * from: destination ID from which search shall continue | 143 | * @from: destination ID from which search shall continue |
| 149 | */ | 144 | */ |
| 150 | static u16 rio_destid_next(struct rio_net *net, u16 from) | 145 | static u16 rio_destid_next(struct rio_net *net, u16 from) |
| 151 | { | 146 | { |
| @@ -1163,8 +1158,8 @@ static struct rio_net __devinit *rio_alloc_net(struct rio_mport *port, | |||
| 1163 | 1158 | ||
| 1164 | net = kzalloc(sizeof(struct rio_net), GFP_KERNEL); | 1159 | net = kzalloc(sizeof(struct rio_net), GFP_KERNEL); |
| 1165 | if (net && do_enum) { | 1160 | if (net && do_enum) { |
| 1166 | net->destid_table.table = kzalloc( | 1161 | net->destid_table.table = kcalloc( |
| 1167 | BITS_TO_LONGS(RIO_MAX_ROUTE_ENTRIES(port->sys_size)) * | 1162 | BITS_TO_LONGS(RIO_MAX_ROUTE_ENTRIES(port->sys_size)), |
| 1168 | sizeof(long), | 1163 | sizeof(long), |
| 1169 | GFP_KERNEL); | 1164 | GFP_KERNEL); |
| 1170 | 1165 | ||
| @@ -1174,7 +1169,6 @@ static struct rio_net __devinit *rio_alloc_net(struct rio_mport *port, | |||
| 1174 | net = NULL; | 1169 | net = NULL; |
| 1175 | } else { | 1170 | } else { |
| 1176 | net->destid_table.start = start; | 1171 | net->destid_table.start = start; |
| 1177 | net->destid_table.next = 0; | ||
| 1178 | net->destid_table.max = | 1172 | net->destid_table.max = |
| 1179 | RIO_MAX_ROUTE_ENTRIES(port->sys_size); | 1173 | RIO_MAX_ROUTE_ENTRIES(port->sys_size); |
| 1180 | spin_lock_init(&net->destid_table.lock); | 1174 | spin_lock_init(&net->destid_table.lock); |
| @@ -1391,7 +1385,7 @@ int __devinit rio_disc_mport(struct rio_mport *mport) | |||
| 1391 | while (time_before(jiffies, to_end)) { | 1385 | while (time_before(jiffies, to_end)) { |
| 1392 | if (rio_enum_complete(mport)) | 1386 | if (rio_enum_complete(mport)) |
| 1393 | goto enum_done; | 1387 | goto enum_done; |
| 1394 | schedule_timeout_uninterruptible(msecs_to_jiffies(10)); | 1388 | msleep(10); |
| 1395 | } | 1389 | } |
| 1396 | 1390 | ||
| 1397 | pr_debug("RIO: discovery timeout on mport %d %s\n", | 1391 | pr_debug("RIO: discovery timeout on mport %d %s\n", |
diff --git a/drivers/rapidio/rio.c b/drivers/rapidio/rio.c index d4bd69013c5..c17ae22567e 100644 --- a/drivers/rapidio/rio.c +++ b/drivers/rapidio/rio.c | |||
| @@ -1275,49 +1275,68 @@ static void __devinit disc_work_handler(struct work_struct *_work) | |||
| 1275 | pr_debug("RIO: discovery work for mport %d %s\n", | 1275 | pr_debug("RIO: discovery work for mport %d %s\n", |
| 1276 | work->mport->id, work->mport->name); | 1276 | work->mport->id, work->mport->name); |
| 1277 | rio_disc_mport(work->mport); | 1277 | rio_disc_mport(work->mport); |
| 1278 | |||
| 1279 | kfree(work); | ||
| 1280 | } | 1278 | } |
| 1281 | 1279 | ||
| 1282 | int __devinit rio_init_mports(void) | 1280 | int __devinit rio_init_mports(void) |
| 1283 | { | 1281 | { |
| 1284 | struct rio_mport *port; | 1282 | struct rio_mport *port; |
| 1285 | struct rio_disc_work *work; | 1283 | struct rio_disc_work *work; |
| 1286 | int no_disc = 0; | 1284 | int n = 0; |
| 1285 | |||
| 1286 | if (!next_portid) | ||
| 1287 | return -ENODEV; | ||
| 1287 | 1288 | ||
| 1289 | /* | ||
| 1290 | * First, run enumerations and check if we need to perform discovery | ||
| 1291 | * on any of the registered mports. | ||
| 1292 | */ | ||
| 1288 | list_for_each_entry(port, &rio_mports, node) { | 1293 | list_for_each_entry(port, &rio_mports, node) { |
| 1289 | if (port->host_deviceid >= 0) | 1294 | if (port->host_deviceid >= 0) |
| 1290 | rio_enum_mport(port); | 1295 | rio_enum_mport(port); |
| 1291 | else if (!no_disc) { | 1296 | else |
| 1292 | if (!rio_wq) { | 1297 | n++; |
| 1293 | rio_wq = alloc_workqueue("riodisc", 0, 0); | 1298 | } |
| 1294 | if (!rio_wq) { | 1299 | |
| 1295 | pr_err("RIO: unable allocate rio_wq\n"); | 1300 | if (!n) |
| 1296 | no_disc = 1; | 1301 | goto no_disc; |
| 1297 | continue; | 1302 | |
| 1298 | } | 1303 | /* |
| 1299 | } | 1304 | * If we have mports that require discovery schedule a discovery work |
| 1300 | 1305 | * for each of them. If the code below fails to allocate needed | |
| 1301 | work = kzalloc(sizeof *work, GFP_KERNEL); | 1306 | * resources, exit without error to keep results of enumeration |
| 1302 | if (!work) { | 1307 | * process (if any). |
| 1303 | pr_err("RIO: no memory for work struct\n"); | 1308 | * TODO: Implement restart of dicovery process for all or |
| 1304 | no_disc = 1; | 1309 | * individual discovering mports. |
| 1305 | continue; | 1310 | */ |
| 1306 | } | 1311 | rio_wq = alloc_workqueue("riodisc", 0, 0); |
| 1307 | 1312 | if (!rio_wq) { | |
| 1308 | work->mport = port; | 1313 | pr_err("RIO: unable allocate rio_wq\n"); |
| 1309 | INIT_WORK(&work->work, disc_work_handler); | 1314 | goto no_disc; |
| 1310 | queue_work(rio_wq, &work->work); | ||
| 1311 | } | ||
| 1312 | } | 1315 | } |
| 1313 | 1316 | ||
| 1314 | if (rio_wq) { | 1317 | work = kcalloc(n, sizeof *work, GFP_KERNEL); |
| 1315 | pr_debug("RIO: flush discovery workqueue\n"); | 1318 | if (!work) { |
| 1316 | flush_workqueue(rio_wq); | 1319 | pr_err("RIO: no memory for work struct\n"); |
| 1317 | pr_debug("RIO: flush discovery workqueue finished\n"); | ||
| 1318 | destroy_workqueue(rio_wq); | 1320 | destroy_workqueue(rio_wq); |
| 1321 | goto no_disc; | ||
| 1319 | } | 1322 | } |
| 1320 | 1323 | ||
| 1324 | n = 0; | ||
| 1325 | list_for_each_entry(port, &rio_mports, node) { | ||
| 1326 | if (port->host_deviceid < 0) { | ||
| 1327 | work[n].mport = port; | ||
| 1328 | INIT_WORK(&work[n].work, disc_work_handler); | ||
| 1329 | queue_work(rio_wq, &work[n].work); | ||
| 1330 | n++; | ||
| 1331 | } | ||
| 1332 | } | ||
| 1333 | |||
| 1334 | flush_workqueue(rio_wq); | ||
| 1335 | pr_debug("RIO: destroy discovery workqueue\n"); | ||
| 1336 | destroy_workqueue(rio_wq); | ||
| 1337 | kfree(work); | ||
| 1338 | |||
| 1339 | no_disc: | ||
| 1321 | rio_init(); | 1340 | rio_init(); |
| 1322 | 1341 | ||
| 1323 | return 0; | 1342 | return 0; |
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig index e069f176a82..19c03ab2bdc 100644 --- a/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig | |||
| @@ -59,6 +59,7 @@ comment "RTC interfaces" | |||
| 59 | config RTC_INTF_SYSFS | 59 | config RTC_INTF_SYSFS |
| 60 | boolean "/sys/class/rtc/rtcN (sysfs)" | 60 | boolean "/sys/class/rtc/rtcN (sysfs)" |
| 61 | depends on SYSFS | 61 | depends on SYSFS |
| 62 | default RTC_CLASS | ||
| 62 | help | 63 | help |
| 63 | Say yes here if you want to use your RTCs using sysfs interfaces, | 64 | Say yes here if you want to use your RTCs using sysfs interfaces, |
| 64 | /sys/class/rtc/rtc0 through /sys/.../rtcN. | 65 | /sys/class/rtc/rtc0 through /sys/.../rtcN. |
| @@ -68,6 +69,7 @@ config RTC_INTF_SYSFS | |||
| 68 | config RTC_INTF_PROC | 69 | config RTC_INTF_PROC |
| 69 | boolean "/proc/driver/rtc (procfs for rtcN)" | 70 | boolean "/proc/driver/rtc (procfs for rtcN)" |
| 70 | depends on PROC_FS | 71 | depends on PROC_FS |
| 72 | default RTC_CLASS | ||
| 71 | help | 73 | help |
| 72 | Say yes here if you want to use your system clock RTC through | 74 | Say yes here if you want to use your system clock RTC through |
| 73 | the proc interface, /proc/driver/rtc. | 75 | the proc interface, /proc/driver/rtc. |
| @@ -79,6 +81,7 @@ config RTC_INTF_PROC | |||
| 79 | 81 | ||
| 80 | config RTC_INTF_DEV | 82 | config RTC_INTF_DEV |
| 81 | boolean "/dev/rtcN (character devices)" | 83 | boolean "/dev/rtcN (character devices)" |
| 84 | default RTC_CLASS | ||
| 82 | help | 85 | help |
| 83 | Say yes here if you want to use your RTCs using the /dev | 86 | Say yes here if you want to use your RTCs using the /dev |
| 84 | interfaces, which "udev" sets up as /dev/rtc0 through | 87 | interfaces, which "udev" sets up as /dev/rtc0 through |
diff --git a/include/linux/memcontrol.h b/include/linux/memcontrol.h index fd0e6d53836..11ddc7ffeba 100644 --- a/include/linux/memcontrol.h +++ b/include/linux/memcontrol.h | |||
| @@ -396,7 +396,7 @@ enum { | |||
| 396 | }; | 396 | }; |
| 397 | 397 | ||
| 398 | struct sock; | 398 | struct sock; |
| 399 | #ifdef CONFIG_MEMCG_KMEM | 399 | #if defined(CONFIG_INET) && defined(CONFIG_MEMCG_KMEM) |
| 400 | void sock_update_memcg(struct sock *sk); | 400 | void sock_update_memcg(struct sock *sk); |
| 401 | void sock_release_memcg(struct sock *sk); | 401 | void sock_release_memcg(struct sock *sk); |
| 402 | #else | 402 | #else |
| @@ -406,6 +406,6 @@ static inline void sock_update_memcg(struct sock *sk) | |||
| 406 | static inline void sock_release_memcg(struct sock *sk) | 406 | static inline void sock_release_memcg(struct sock *sk) |
| 407 | { | 407 | { |
| 408 | } | 408 | } |
| 409 | #endif /* CONFIG_MEMCG_KMEM */ | 409 | #endif /* CONFIG_INET && CONFIG_MEMCG_KMEM */ |
| 410 | #endif /* _LINUX_MEMCONTROL_H */ | 410 | #endif /* _LINUX_MEMCONTROL_H */ |
| 411 | 411 | ||
diff --git a/include/linux/pageblock-flags.h b/include/linux/pageblock-flags.h index eed27f4f4c3..be655e4a2a7 100644 --- a/include/linux/pageblock-flags.h +++ b/include/linux/pageblock-flags.h | |||
| @@ -71,13 +71,13 @@ void set_pageblock_flags_group(struct page *page, unsigned long flags, | |||
| 71 | #ifdef CONFIG_COMPACTION | 71 | #ifdef CONFIG_COMPACTION |
| 72 | #define get_pageblock_skip(page) \ | 72 | #define get_pageblock_skip(page) \ |
| 73 | get_pageblock_flags_group(page, PB_migrate_skip, \ | 73 | get_pageblock_flags_group(page, PB_migrate_skip, \ |
| 74 | PB_migrate_skip + 1) | 74 | PB_migrate_skip) |
| 75 | #define clear_pageblock_skip(page) \ | 75 | #define clear_pageblock_skip(page) \ |
| 76 | set_pageblock_flags_group(page, 0, PB_migrate_skip, \ | 76 | set_pageblock_flags_group(page, 0, PB_migrate_skip, \ |
| 77 | PB_migrate_skip + 1) | 77 | PB_migrate_skip) |
| 78 | #define set_pageblock_skip(page) \ | 78 | #define set_pageblock_skip(page) \ |
| 79 | set_pageblock_flags_group(page, 1, PB_migrate_skip, \ | 79 | set_pageblock_flags_group(page, 1, PB_migrate_skip, \ |
| 80 | PB_migrate_skip + 1) | 80 | PB_migrate_skip) |
| 81 | #endif /* CONFIG_COMPACTION */ | 81 | #endif /* CONFIG_COMPACTION */ |
| 82 | 82 | ||
| 83 | #define get_pageblock_flags(page) \ | 83 | #define get_pageblock_flags(page) \ |
diff --git a/include/linux/rio.h b/include/linux/rio.h index d2dff22cf68..4187da51100 100644 --- a/include/linux/rio.h +++ b/include/linux/rio.h | |||
| @@ -63,7 +63,7 @@ | |||
| 63 | * | 63 | * |
| 64 | * 0 RapidIO inbound doorbells | 64 | * 0 RapidIO inbound doorbells |
| 65 | * 1 RapidIO inbound mailboxes | 65 | * 1 RapidIO inbound mailboxes |
| 66 | * 1 RapidIO outbound mailboxes | 66 | * 2 RapidIO outbound mailboxes |
| 67 | */ | 67 | */ |
| 68 | #define RIO_DOORBELL_RESOURCE 0 | 68 | #define RIO_DOORBELL_RESOURCE 0 |
| 69 | #define RIO_INB_MBOX_RESOURCE 1 | 69 | #define RIO_INB_MBOX_RESOURCE 1 |
| @@ -266,7 +266,6 @@ struct rio_mport { | |||
| 266 | 266 | ||
| 267 | struct rio_id_table { | 267 | struct rio_id_table { |
| 268 | u16 start; /* logical minimal id */ | 268 | u16 start; /* logical minimal id */ |
| 269 | u16 next; /* hint for find */ | ||
| 270 | u32 max; /* max number of IDs in table */ | 269 | u32 max; /* max number of IDs in table */ |
| 271 | spinlock_t lock; | 270 | spinlock_t lock; |
| 272 | unsigned long *table; | 271 | unsigned long *table; |
diff --git a/lib/kasprintf.c b/lib/kasprintf.c index ae0de80c1c8..32f12150fc4 100644 --- a/lib/kasprintf.c +++ b/lib/kasprintf.c | |||
| @@ -21,7 +21,7 @@ char *kvasprintf(gfp_t gfp, const char *fmt, va_list ap) | |||
| 21 | len = vsnprintf(NULL, 0, fmt, aq); | 21 | len = vsnprintf(NULL, 0, fmt, aq); |
| 22 | va_end(aq); | 22 | va_end(aq); |
| 23 | 23 | ||
| 24 | p = kmalloc(len+1, gfp); | 24 | p = kmalloc_track_caller(len+1, gfp); |
| 25 | if (!p) | 25 | if (!p) |
| 26 | return NULL; | 26 | return NULL; |
| 27 | 27 | ||
diff --git a/tools/perf/util/include/linux/rbtree.h b/tools/perf/util/include/linux/rbtree.h index 9bcdc844b33..2a030c5af3a 100644 --- a/tools/perf/util/include/linux/rbtree.h +++ b/tools/perf/util/include/linux/rbtree.h | |||
| @@ -1,3 +1,2 @@ | |||
| 1 | #include <stdbool.h> | 1 | #include <stdbool.h> |
| 2 | #include <stdbool.h> | ||
| 3 | #include "../../../../include/linux/rbtree.h" | 2 | #include "../../../../include/linux/rbtree.h" |
