Skip to content

Commit af15ae4

Browse files
author
Alex Shi
committed
Merge tag 'v4.4.60' into linux-linaro-lsk-v4.4
This is the 4.4.60 stable release
2 parents e3f0f47 + 8f8ee97 commit af15ae4

28 files changed

Lines changed: 387 additions & 133 deletions

File tree

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
VERSION = 4
22
PATCHLEVEL = 4
3-
SUBLEVEL = 59
3+
SUBLEVEL = 60
44
EXTRAVERSION =
55
NAME = Blurry Fish Butt
66

arch/mips/lantiq/irq.c

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -269,6 +269,11 @@ static void ltq_hw5_irqdispatch(void)
269269
DEFINE_HWx_IRQDISPATCH(5)
270270
#endif
271271

272+
static void ltq_hw_irq_handler(struct irq_desc *desc)
273+
{
274+
ltq_hw_irqdispatch(irq_desc_get_irq(desc) - 2);
275+
}
276+
272277
#ifdef CONFIG_MIPS_MT_SMP
273278
void __init arch_init_ipiirq(int irq, struct irqaction *action)
274279
{
@@ -313,23 +318,19 @@ static struct irqaction irq_call = {
313318
asmlinkage void plat_irq_dispatch(void)
314319
{
315320
unsigned int pending = read_c0_status() & read_c0_cause() & ST0_IM;
316-
unsigned int i;
317-
318-
if ((MIPS_CPU_TIMER_IRQ == 7) && (pending & CAUSEF_IP7)) {
319-
do_IRQ(MIPS_CPU_TIMER_IRQ);
320-
goto out;
321-
} else {
322-
for (i = 0; i < MAX_IM; i++) {
323-
if (pending & (CAUSEF_IP2 << i)) {
324-
ltq_hw_irqdispatch(i);
325-
goto out;
326-
}
327-
}
321+
int irq;
322+
323+
if (!pending) {
324+
spurious_interrupt();
325+
return;
328326
}
329-
pr_alert("Spurious IRQ: CAUSE=0x%08x\n", read_c0_status());
330327

331-
out:
332-
return;
328+
pending >>= CAUSEB_IP;
329+
while (pending) {
330+
irq = fls(pending) - 1;
331+
do_IRQ(MIPS_CPU_IRQ_BASE + irq);
332+
pending &= ~BIT(irq);
333+
}
333334
}
334335

335336
static int icu_map(struct irq_domain *d, unsigned int irq, irq_hw_number_t hw)
@@ -354,11 +355,6 @@ static const struct irq_domain_ops irq_domain_ops = {
354355
.map = icu_map,
355356
};
356357

357-
static struct irqaction cascade = {
358-
.handler = no_action,
359-
.name = "cascade",
360-
};
361-
362358
int __init icu_of_init(struct device_node *node, struct device_node *parent)
363359
{
364360
struct device_node *eiu_node;
@@ -390,7 +386,7 @@ int __init icu_of_init(struct device_node *node, struct device_node *parent)
390386
mips_cpu_irq_init();
391387

392388
for (i = 0; i < MAX_IM; i++)
393-
setup_irq(i + 2, &cascade);
389+
irq_set_chained_handler(i + 2, ltq_hw_irq_handler);
394390

395391
if (cpu_has_vint) {
396392
pr_info("Setting up vectored interrupts\n");

arch/x86/xen/setup.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -713,10 +713,9 @@ static void __init xen_reserve_xen_mfnlist(void)
713713
size = PFN_PHYS(xen_start_info->nr_p2m_frames);
714714
}
715715

716-
if (!xen_is_e820_reserved(start, size)) {
717-
memblock_reserve(start, size);
716+
memblock_reserve(start, size);
717+
if (!xen_is_e820_reserved(start, size))
718718
return;
719-
}
720719

721720
#ifdef CONFIG_X86_32
722721
/*
@@ -727,6 +726,7 @@ static void __init xen_reserve_xen_mfnlist(void)
727726
BUG();
728727
#else
729728
xen_relocate_p2m();
729+
memblock_free(start, size);
730730
#endif
731731
}
732732

block/bio.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -373,10 +373,14 @@ static void punt_bios_to_rescuer(struct bio_set *bs)
373373
bio_list_init(&punt);
374374
bio_list_init(&nopunt);
375375

376-
while ((bio = bio_list_pop(current->bio_list)))
376+
while ((bio = bio_list_pop(&current->bio_list[0])))
377377
bio_list_add(bio->bi_pool == bs ? &punt : &nopunt, bio);
378+
current->bio_list[0] = nopunt;
378379

379-
*current->bio_list = nopunt;
380+
bio_list_init(&nopunt);
381+
while ((bio = bio_list_pop(&current->bio_list[1])))
382+
bio_list_add(bio->bi_pool == bs ? &punt : &nopunt, bio);
383+
current->bio_list[1] = nopunt;
380384

381385
spin_lock(&bs->rescue_lock);
382386
bio_list_merge(&bs->rescue_list, &punt);
@@ -464,7 +468,9 @@ struct bio *bio_alloc_bioset(gfp_t gfp_mask, int nr_iovecs, struct bio_set *bs)
464468
* we retry with the original gfp_flags.
465469
*/
466470

467-
if (current->bio_list && !bio_list_empty(current->bio_list))
471+
if (current->bio_list &&
472+
(!bio_list_empty(&current->bio_list[0]) ||
473+
!bio_list_empty(&current->bio_list[1])))
468474
gfp_mask &= ~__GFP_DIRECT_RECLAIM;
469475

470476
p = mempool_alloc(bs->bio_pool, gfp_mask);

block/blk-core.c

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2021,7 +2021,14 @@ generic_make_request_checks(struct bio *bio)
20212021
*/
20222022
blk_qc_t generic_make_request(struct bio *bio)
20232023
{
2024-
struct bio_list bio_list_on_stack;
2024+
/*
2025+
* bio_list_on_stack[0] contains bios submitted by the current
2026+
* make_request_fn.
2027+
* bio_list_on_stack[1] contains bios that were submitted before
2028+
* the current make_request_fn, but that haven't been processed
2029+
* yet.
2030+
*/
2031+
struct bio_list bio_list_on_stack[2];
20252032
blk_qc_t ret = BLK_QC_T_NONE;
20262033

20272034
if (!generic_make_request_checks(bio))
@@ -2038,7 +2045,7 @@ blk_qc_t generic_make_request(struct bio *bio)
20382045
* should be added at the tail
20392046
*/
20402047
if (current->bio_list) {
2041-
bio_list_add(current->bio_list, bio);
2048+
bio_list_add(&current->bio_list[0], bio);
20422049
goto out;
20432050
}
20442051

@@ -2057,24 +2064,39 @@ blk_qc_t generic_make_request(struct bio *bio)
20572064
* bio_list, and call into ->make_request() again.
20582065
*/
20592066
BUG_ON(bio->bi_next);
2060-
bio_list_init(&bio_list_on_stack);
2061-
current->bio_list = &bio_list_on_stack;
2067+
bio_list_init(&bio_list_on_stack[0]);
2068+
current->bio_list = bio_list_on_stack;
20622069
do {
20632070
struct request_queue *q = bdev_get_queue(bio->bi_bdev);
20642071

20652072
if (likely(blk_queue_enter(q, __GFP_DIRECT_RECLAIM) == 0)) {
2073+
struct bio_list lower, same;
2074+
2075+
/* Create a fresh bio_list for all subordinate requests */
2076+
bio_list_on_stack[1] = bio_list_on_stack[0];
2077+
bio_list_init(&bio_list_on_stack[0]);
20662078

20672079
ret = q->make_request_fn(q, bio);
20682080

20692081
blk_queue_exit(q);
2070-
2071-
bio = bio_list_pop(current->bio_list);
2082+
/* sort new bios into those for a lower level
2083+
* and those for the same level
2084+
*/
2085+
bio_list_init(&lower);
2086+
bio_list_init(&same);
2087+
while ((bio = bio_list_pop(&bio_list_on_stack[0])) != NULL)
2088+
if (q == bdev_get_queue(bio->bi_bdev))
2089+
bio_list_add(&same, bio);
2090+
else
2091+
bio_list_add(&lower, bio);
2092+
/* now assemble so we handle the lowest level first */
2093+
bio_list_merge(&bio_list_on_stack[0], &lower);
2094+
bio_list_merge(&bio_list_on_stack[0], &same);
2095+
bio_list_merge(&bio_list_on_stack[0], &bio_list_on_stack[1]);
20722096
} else {
2073-
struct bio *bio_next = bio_list_pop(current->bio_list);
2074-
20752097
bio_io_error(bio);
2076-
bio = bio_next;
20772098
}
2099+
bio = bio_list_pop(&bio_list_on_stack[0]);
20782100
} while (bio);
20792101
current->bio_list = NULL; /* deactivate */
20802102

drivers/acpi/Makefile

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
# Makefile for the Linux ACPI interpreter
33
#
44

5-
ccflags-y := -Os
65
ccflags-$(CONFIG_ACPI_DEBUG) += -DACPI_DEBUG_OUTPUT
76

87
#

drivers/acpi/acpi_platform.c

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,11 @@
2424
ACPI_MODULE_NAME("platform");
2525

2626
static const struct acpi_device_id forbidden_id_list[] = {
27-
{"PNP0000", 0}, /* PIC */
28-
{"PNP0100", 0}, /* Timer */
29-
{"PNP0200", 0}, /* AT DMA Controller */
27+
{"PNP0000", 0}, /* PIC */
28+
{"PNP0100", 0}, /* Timer */
29+
{"PNP0200", 0}, /* AT DMA Controller */
30+
{"ACPI0009", 0}, /* IOxAPIC */
31+
{"ACPI000A", 0}, /* IOAPIC */
3032
{"", 0},
3133
};
3234

drivers/gpu/drm/radeon/radeon_ttm.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,8 +213,8 @@ static void radeon_evict_flags(struct ttm_buffer_object *bo,
213213
rbo->placement.num_busy_placement = 0;
214214
for (i = 0; i < rbo->placement.num_placement; i++) {
215215
if (rbo->placements[i].flags & TTM_PL_FLAG_VRAM) {
216-
if (rbo->placements[0].fpfn < fpfn)
217-
rbo->placements[0].fpfn = fpfn;
216+
if (rbo->placements[i].fpfn < fpfn)
217+
rbo->placements[i].fpfn = fpfn;
218218
} else {
219219
rbo->placement.busy_placement =
220220
&rbo->placements[i];

drivers/md/dm.c

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1481,26 +1481,29 @@ static void flush_current_bio_list(struct blk_plug_cb *cb, bool from_schedule)
14811481
struct dm_offload *o = container_of(cb, struct dm_offload, cb);
14821482
struct bio_list list;
14831483
struct bio *bio;
1484+
int i;
14841485

14851486
INIT_LIST_HEAD(&o->cb.list);
14861487

14871488
if (unlikely(!current->bio_list))
14881489
return;
14891490

1490-
list = *current->bio_list;
1491-
bio_list_init(current->bio_list);
1492-
1493-
while ((bio = bio_list_pop(&list))) {
1494-
struct bio_set *bs = bio->bi_pool;
1495-
if (unlikely(!bs) || bs == fs_bio_set) {
1496-
bio_list_add(current->bio_list, bio);
1497-
continue;
1491+
for (i = 0; i < 2; i++) {
1492+
list = current->bio_list[i];
1493+
bio_list_init(&current->bio_list[i]);
1494+
1495+
while ((bio = bio_list_pop(&list))) {
1496+
struct bio_set *bs = bio->bi_pool;
1497+
if (unlikely(!bs) || bs == fs_bio_set) {
1498+
bio_list_add(&current->bio_list[i], bio);
1499+
continue;
1500+
}
1501+
1502+
spin_lock(&bs->rescue_lock);
1503+
bio_list_add(&bs->rescue_list, bio);
1504+
queue_work(bs->rescue_workqueue, &bs->rescue_work);
1505+
spin_unlock(&bs->rescue_lock);
14981506
}
1499-
1500-
spin_lock(&bs->rescue_lock);
1501-
bio_list_add(&bs->rescue_list, bio);
1502-
queue_work(bs->rescue_workqueue, &bs->rescue_work);
1503-
spin_unlock(&bs->rescue_lock);
15041507
}
15051508
}
15061509

drivers/md/raid1.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -877,7 +877,8 @@ static sector_t wait_barrier(struct r1conf *conf, struct bio *bio)
877877
((conf->start_next_window <
878878
conf->next_resync + RESYNC_SECTORS) &&
879879
current->bio_list &&
880-
!bio_list_empty(current->bio_list))),
880+
(!bio_list_empty(&current->bio_list[0]) ||
881+
!bio_list_empty(&current->bio_list[1])))),
881882
conf->resync_lock);
882883
conf->nr_waiting--;
883884
}

0 commit comments

Comments
 (0)