Merge tag 'v3.10.88' into update
This is the 3.10.88 stable release
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
VERSION = 3
|
||||
PATCHLEVEL = 10
|
||||
SUBLEVEL = 87
|
||||
SUBLEVEL = 88
|
||||
EXTRAVERSION =
|
||||
NAME = TOSSUG Baby Fish
|
||||
|
||||
|
||||
+2
-10
@@ -47,22 +47,14 @@ static int mmap_is_legacy(void)
|
||||
return sysctl_legacy_va_layout;
|
||||
}
|
||||
|
||||
/*
|
||||
* Since get_random_int() returns the same value within a 1 jiffy window, we
|
||||
* will almost always get the same randomisation for the stack and mmap
|
||||
* region. This will mean the relative distance between stack and mmap will be
|
||||
* the same.
|
||||
*
|
||||
* To avoid this we can shift the randomness by 1 bit.
|
||||
*/
|
||||
static unsigned long mmap_rnd(void)
|
||||
{
|
||||
unsigned long rnd = 0;
|
||||
|
||||
if (current->flags & PF_RANDOMIZE)
|
||||
rnd = (long)get_random_int() & (STACK_RND_MASK >> 1);
|
||||
rnd = (long)get_random_int() & STACK_RND_MASK;
|
||||
|
||||
return rnd << (PAGE_SHIFT + 1);
|
||||
return rnd << PAGE_SHIFT;
|
||||
}
|
||||
|
||||
static unsigned long mmap_base(void)
|
||||
|
||||
@@ -895,13 +895,14 @@ static int ahash_final_ctx(struct ahash_request *req)
|
||||
state->buflen_1;
|
||||
u32 *sh_desc = ctx->sh_desc_fin, *desc;
|
||||
dma_addr_t ptr = ctx->sh_desc_fin_dma;
|
||||
int sec4_sg_bytes;
|
||||
int sec4_sg_bytes, sec4_sg_src_index;
|
||||
int digestsize = crypto_ahash_digestsize(ahash);
|
||||
struct ahash_edesc *edesc;
|
||||
int ret = 0;
|
||||
int sh_len;
|
||||
|
||||
sec4_sg_bytes = (1 + (buflen ? 1 : 0)) * sizeof(struct sec4_sg_entry);
|
||||
sec4_sg_src_index = 1 + (buflen ? 1 : 0);
|
||||
sec4_sg_bytes = sec4_sg_src_index * sizeof(struct sec4_sg_entry);
|
||||
|
||||
/* allocate space for base edesc and hw desc commands, link tables */
|
||||
edesc = kmalloc(sizeof(struct ahash_edesc) + DESC_JOB_IO_LEN +
|
||||
@@ -928,7 +929,7 @@ static int ahash_final_ctx(struct ahash_request *req)
|
||||
state->buf_dma = try_buf_map_to_sec4_sg(jrdev, edesc->sec4_sg + 1,
|
||||
buf, state->buf_dma, buflen,
|
||||
last_buflen);
|
||||
(edesc->sec4_sg + sec4_sg_bytes - 1)->len |= SEC4_SG_LEN_FIN;
|
||||
(edesc->sec4_sg + sec4_sg_src_index - 1)->len |= SEC4_SG_LEN_FIN;
|
||||
|
||||
append_seq_in_ptr(desc, edesc->sec4_sg_dma, ctx->ctx_len + buflen,
|
||||
LDST_SGF);
|
||||
|
||||
@@ -921,7 +921,7 @@ static int ppc4xx_edac_init_csrows(struct mem_ctl_info *mci, u32 mcopt1)
|
||||
*/
|
||||
|
||||
for (row = 0; row < mci->nr_csrows; row++) {
|
||||
struct csrow_info *csi = &mci->csrows[row];
|
||||
struct csrow_info *csi = mci->csrows[row];
|
||||
|
||||
/*
|
||||
* Get the configuration settings for this
|
||||
|
||||
@@ -1281,8 +1281,8 @@ static int __release_metadata_snap(struct dm_pool_metadata *pmd)
|
||||
return r;
|
||||
|
||||
disk_super = dm_block_data(copy);
|
||||
dm_sm_dec_block(pmd->metadata_sm, le64_to_cpu(disk_super->data_mapping_root));
|
||||
dm_sm_dec_block(pmd->metadata_sm, le64_to_cpu(disk_super->device_details_root));
|
||||
dm_btree_del(&pmd->info, le64_to_cpu(disk_super->data_mapping_root));
|
||||
dm_btree_del(&pmd->details_info, le64_to_cpu(disk_super->device_details_root));
|
||||
dm_sm_dec_block(pmd->metadata_sm, held_root);
|
||||
|
||||
return dm_tm_unlock(pmd->tm, copy);
|
||||
|
||||
@@ -1039,11 +1039,26 @@ restart:
|
||||
fc_fcp_pkt_hold(fsp);
|
||||
spin_unlock_irqrestore(&si->scsi_queue_lock, flags);
|
||||
|
||||
if (!fc_fcp_lock_pkt(fsp)) {
|
||||
spin_lock_bh(&fsp->scsi_pkt_lock);
|
||||
if (!(fsp->state & FC_SRB_COMPL)) {
|
||||
fsp->state |= FC_SRB_COMPL;
|
||||
/*
|
||||
* TODO: dropping scsi_pkt_lock and then reacquiring
|
||||
* again around fc_fcp_cleanup_cmd() is required,
|
||||
* since fc_fcp_cleanup_cmd() calls into
|
||||
* fc_seq_set_resp() and that func preempts cpu using
|
||||
* schedule. May be schedule and related code should be
|
||||
* removed instead of unlocking here to avoid scheduling
|
||||
* while atomic bug.
|
||||
*/
|
||||
spin_unlock_bh(&fsp->scsi_pkt_lock);
|
||||
|
||||
fc_fcp_cleanup_cmd(fsp, error);
|
||||
|
||||
spin_lock_bh(&fsp->scsi_pkt_lock);
|
||||
fc_io_compl(fsp);
|
||||
fc_fcp_unlock_pkt(fsp);
|
||||
}
|
||||
spin_unlock_bh(&fsp->scsi_pkt_lock);
|
||||
|
||||
fc_fcp_pkt_release(fsp);
|
||||
spin_lock_irqsave(&si->scsi_queue_lock, flags);
|
||||
|
||||
@@ -150,6 +150,7 @@
|
||||
{0x1002, 0x6610, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x6611, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x6613, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x6617, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x6620, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x6621, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
|
||||
{0x1002, 0x6623, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_OLAND|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP}, \
|
||||
|
||||
@@ -252,6 +252,16 @@ static void sem_rcu_free(struct rcu_head *head)
|
||||
ipc_rcu_free(head);
|
||||
}
|
||||
|
||||
/*
|
||||
* spin_unlock_wait() and !spin_is_locked() are not memory barriers, they
|
||||
* are only control barriers.
|
||||
* The code must pair with spin_unlock(&sem->lock) or
|
||||
* spin_unlock(&sem_perm.lock), thus just the control barrier is insufficient.
|
||||
*
|
||||
* smp_rmb() is sufficient, as writes cannot pass the control barrier.
|
||||
*/
|
||||
#define ipc_smp_acquire__after_spin_is_unlocked() smp_rmb()
|
||||
|
||||
/*
|
||||
* Wait until all currently ongoing simple ops have completed.
|
||||
* Caller must own sem_perm.lock.
|
||||
@@ -275,6 +285,7 @@ static void sem_wait_array(struct sem_array *sma)
|
||||
sem = sma->sem_base + i;
|
||||
spin_unlock_wait(&sem->lock);
|
||||
}
|
||||
ipc_smp_acquire__after_spin_is_unlocked();
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -326,8 +337,13 @@ static inline int sem_lock(struct sem_array *sma, struct sembuf *sops,
|
||||
|
||||
/* Then check that the global lock is free */
|
||||
if (!spin_is_locked(&sma->sem_perm.lock)) {
|
||||
/* spin_is_locked() is not a memory barrier */
|
||||
smp_mb();
|
||||
/*
|
||||
* We need a memory barrier with acquire semantics,
|
||||
* otherwise we can race with another thread that does:
|
||||
* complex_count++;
|
||||
* spin_unlock(sem_perm.lock);
|
||||
*/
|
||||
ipc_smp_acquire__after_spin_is_unlocked();
|
||||
|
||||
/* Now repeat the test of complex_count:
|
||||
* It can't change anymore until we drop sem->lock.
|
||||
@@ -2049,17 +2065,28 @@ void exit_sem(struct task_struct *tsk)
|
||||
rcu_read_lock();
|
||||
un = list_entry_rcu(ulp->list_proc.next,
|
||||
struct sem_undo, list_proc);
|
||||
if (&un->list_proc == &ulp->list_proc)
|
||||
semid = -1;
|
||||
else
|
||||
semid = un->semid;
|
||||
|
||||
if (semid == -1) {
|
||||
if (&un->list_proc == &ulp->list_proc) {
|
||||
/*
|
||||
* We must wait for freeary() before freeing this ulp,
|
||||
* in case we raced with last sem_undo. There is a small
|
||||
* possibility where we exit while freeary() didn't
|
||||
* finish unlocking sem_undo_list.
|
||||
*/
|
||||
spin_unlock_wait(&ulp->lock);
|
||||
rcu_read_unlock();
|
||||
break;
|
||||
}
|
||||
spin_lock(&ulp->lock);
|
||||
semid = un->semid;
|
||||
spin_unlock(&ulp->lock);
|
||||
|
||||
sma = sem_obtain_object_check(tsk->nsproxy->ipc_ns, un->semid);
|
||||
/* exit_sem raced with IPC_RMID, nothing to do */
|
||||
if (semid == -1) {
|
||||
rcu_read_unlock();
|
||||
continue;
|
||||
}
|
||||
|
||||
sma = sem_obtain_object_check(tsk->nsproxy->ipc_ns, semid);
|
||||
/* exit_sem raced with IPC_RMID, nothing to do */
|
||||
if (IS_ERR(sma)) {
|
||||
rcu_read_unlock();
|
||||
|
||||
+10
-2
@@ -4000,12 +4000,20 @@ static const struct file_operations perf_fops = {
|
||||
* to user-space before waking everybody up.
|
||||
*/
|
||||
|
||||
static inline struct fasync_struct **perf_event_fasync(struct perf_event *event)
|
||||
{
|
||||
/* only the parent has fasync state */
|
||||
if (event->parent)
|
||||
event = event->parent;
|
||||
return &event->fasync;
|
||||
}
|
||||
|
||||
void perf_event_wakeup(struct perf_event *event)
|
||||
{
|
||||
ring_buffer_wakeup(event);
|
||||
|
||||
if (event->pending_kill) {
|
||||
kill_fasync(&event->fasync, SIGIO, event->pending_kill);
|
||||
kill_fasync(perf_event_fasync(event), SIGIO, event->pending_kill);
|
||||
event->pending_kill = 0;
|
||||
}
|
||||
}
|
||||
@@ -5160,7 +5168,7 @@ static int __perf_event_overflow(struct perf_event *event,
|
||||
else
|
||||
perf_event_output(event, data, regs);
|
||||
|
||||
if (event->fasync && event->pending_kill) {
|
||||
if (*perf_event_fasync(event) && event->pending_kill) {
|
||||
event->pending_wakeup = 1;
|
||||
irq_work_queue(&event->pending);
|
||||
}
|
||||
|
||||
@@ -1473,6 +1473,8 @@ static int get_any_page(struct page *page, unsigned long pfn, int flags)
|
||||
*/
|
||||
ret = __get_any_page(page, pfn, 0);
|
||||
if (!PageLRU(page)) {
|
||||
/* Drop page reference which is from __get_any_page() */
|
||||
put_page(page);
|
||||
pr_info("soft_offline: %#lx: unknown non LRU page type %lx\n",
|
||||
pfn, page->flags);
|
||||
return -EIO;
|
||||
|
||||
@@ -137,7 +137,7 @@ my $ksource = ($ARGV[0] ? $ARGV[0] : '.');
|
||||
my $kconfig = $ARGV[1];
|
||||
my $lsmod_file = $ENV{'LSMOD'};
|
||||
|
||||
my @makefiles = `find $ksource -name Makefile 2>/dev/null`;
|
||||
my @makefiles = `find $ksource -name Makefile -or -name Kbuild 2>/dev/null`;
|
||||
chomp @makefiles;
|
||||
|
||||
my %depends;
|
||||
|
||||
Reference in New Issue
Block a user