diff options
author | Amit Pundir <amit.pundir@linaro.org> | 2015-01-12 11:43:21 +0530 |
---|---|---|
committer | Amit Pundir <amit.pundir@linaro.org> | 2015-01-12 11:43:21 +0530 |
commit | 43e6989f92b421c7e234ffd1e0b590e014ce24f2 (patch) | |
tree | 7e62a7a27835d4615b561dc99cdfe3b3a72e3d94 | |
parent | 54d6df91aea686c8c46095256d8c27d3db26c4e8 (diff) | |
parent | 49536e1f387afc5b42f447d382c3ea3fe4817520 (diff) |
Merge branch 'upstream/android-3.10' into linaro-android-3.10-lsk
-rw-r--r-- | drivers/cpufreq/cpufreq_interactive.c | 22 | ||||
-rw-r--r-- | drivers/video/adf/adf_fbdev.c | 8 | ||||
-rw-r--r-- | net/ipv6/addrconf.c | 4 |
3 files changed, 20 insertions, 14 deletions
diff --git a/drivers/cpufreq/cpufreq_interactive.c b/drivers/cpufreq/cpufreq_interactive.c index 3f69013769ed..0d4a4f30efab 100644 --- a/drivers/cpufreq/cpufreq_interactive.c +++ b/drivers/cpufreq/cpufreq_interactive.c @@ -107,6 +107,7 @@ struct cpufreq_interactive_tunables { int boostpulse_duration_val; /* End time of boost pulse in ktime converted to usecs */ u64 boostpulse_endtime; + bool boosted; /* * Max additional time to wait in idle, beyond timer_rate, at speeds * above minimum before wakeup to reduce speed, or -1 if unnecessary. @@ -384,7 +385,6 @@ static void cpufreq_interactive_timer(unsigned long data) unsigned int loadadjfreq; unsigned int index; unsigned long flags; - bool boosted; if (!down_read_trylock(&pcpu->enable_sem)) return; @@ -404,9 +404,9 @@ static void cpufreq_interactive_timer(unsigned long data) do_div(cputime_speedadj, delta_time); loadadjfreq = (unsigned int)cputime_speedadj * 100; cpu_load = loadadjfreq / pcpu->target_freq; - boosted = tunables->boost_val || now < tunables->boostpulse_endtime; + tunables->boosted = tunables->boost_val || now < tunables->boostpulse_endtime; - if (cpu_load >= tunables->go_hispeed_load || boosted) { + if (cpu_load >= tunables->go_hispeed_load || tunables->boosted) { if (pcpu->target_freq < tunables->hispeed_freq) { new_freq = tunables->hispeed_freq; } else { @@ -467,7 +467,7 @@ static void cpufreq_interactive_timer(unsigned long data) * (or the indefinite boost is turned off). */ - if (!boosted || new_freq > tunables->hispeed_freq) { + if (!tunables->boosted || new_freq > tunables->hispeed_freq) { pcpu->floor_freq = new_freq; pcpu->floor_validate_time = now; } @@ -625,19 +625,21 @@ static int cpufreq_interactive_speedchange_task(void *data) return 0; } -static void cpufreq_interactive_boost(void) +static void cpufreq_interactive_boost(struct cpufreq_interactive_tunables *tunables) { int i; int anyboost = 0; unsigned long flags[2]; struct cpufreq_interactive_cpuinfo *pcpu; - struct cpufreq_interactive_tunables *tunables; + + tunables->boosted = true; spin_lock_irqsave(&speedchange_cpumask_lock, flags[0]); for_each_online_cpu(i) { pcpu = &per_cpu(cpuinfo, i); - tunables = pcpu->policy->governor_data; + if (tunables != pcpu->policy->governor_data) + continue; spin_lock_irqsave(&pcpu->target_freq_lock, flags[1]); if (pcpu->target_freq < tunables->hispeed_freq) { @@ -950,7 +952,8 @@ static ssize_t store_boost(struct cpufreq_interactive_tunables *tunables, if (tunables->boost_val) { trace_cpufreq_interactive_boost("on"); - cpufreq_interactive_boost(); + if (!tunables->boosted) + cpufreq_interactive_boost(tunables); } else { tunables->boostpulse_endtime = ktime_to_us(ktime_get()); trace_cpufreq_interactive_unboost("off"); @@ -972,7 +975,8 @@ static ssize_t store_boostpulse(struct cpufreq_interactive_tunables *tunables, tunables->boostpulse_endtime = ktime_to_us(ktime_get()) + tunables->boostpulse_duration_val; trace_cpufreq_interactive_boost("pulse"); - cpufreq_interactive_boost(); + if (!tunables->boosted) + cpufreq_interactive_boost(tunables); return count; } diff --git a/drivers/video/adf/adf_fbdev.c b/drivers/video/adf/adf_fbdev.c index 9d3c245850af..a5b53bc08c3f 100644 --- a/drivers/video/adf/adf_fbdev.c +++ b/drivers/video/adf/adf_fbdev.c @@ -136,13 +136,13 @@ void adf_modeinfo_to_fb_videomode(const struct drm_mode_modeinfo *mode, vmode->vsync_len = mode->vsync_end - mode->vsync_start; vmode->sync = 0; - if (mode->flags | DRM_MODE_FLAG_PHSYNC) + if (mode->flags & DRM_MODE_FLAG_PHSYNC) vmode->sync |= FB_SYNC_HOR_HIGH_ACT; - if (mode->flags | DRM_MODE_FLAG_PVSYNC) + if (mode->flags & DRM_MODE_FLAG_PVSYNC) vmode->sync |= FB_SYNC_VERT_HIGH_ACT; - if (mode->flags | DRM_MODE_FLAG_PCSYNC) + if (mode->flags & DRM_MODE_FLAG_PCSYNC) vmode->sync |= FB_SYNC_COMP_HIGH_ACT; - if (mode->flags | DRM_MODE_FLAG_BCAST) + if (mode->flags & DRM_MODE_FLAG_BCAST) vmode->sync |= FB_SYNC_BROADCAST; vmode->vmode = 0; diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index e1381119a6d8..165cee964e75 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c @@ -1525,7 +1525,9 @@ int ipv6_chk_addr(struct net *net, const struct in6_addr *addr, if (!net_eq(dev_net(ifp->idev->dev), net)) continue; if (ipv6_addr_equal(&ifp->addr, addr) && - !(ifp->flags&IFA_F_TENTATIVE) && + (!(ifp->flags&IFA_F_TENTATIVE) || + (ipv6_use_optimistic_addr(ifp->idev) && + ifp->flags&IFA_F_OPTIMISTIC)) && (dev == NULL || ifp->idev->dev == dev || !(ifp->scope&(IFA_LINK|IFA_HOST) || strict))) { rcu_read_unlock_bh(); |