Linux 3.0.7
I'm announcing the release of the 3.0.7 kernel.
All users of the 3.0 kernel series must upgrade.
The updated 3.0.y git tree can be found at (NOTE THE ADDRESS CHANGE):
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git linux-3.0.y
and can be browsed at the normal kernel.org git web browser:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
Note, I've had some boot problems with this kernel, and I can't seem to narrow the issue down, but I think it's due to something not related to the kernel itself, but am not positive. Please test to verify that I didn't mess something up.
thanks,
greg k-h
------------
Makefile | 2 - arch/arm/mach-ux500/Kconfig | 1 arch/mips/jz4740/gpio.c | 52 ++++++++++++----------------- arch/sparc/mm/init_64.c | 5 ++ arch/x86/pci/acpi.c | 11 ++++++ drivers/ata/ahci.c | 12 ++++++ drivers/gpu/drm/radeon/atombios_dp.c | 28 ++++++++++----- drivers/gpu/drm/radeon/evergreen.c | 44 ------------------------ drivers/gpu/drm/radeon/ni.c | 32 ----------------- drivers/gpu/drm/radeon/radeon_connectors.c | 8 ++-- drivers/gpu/drm/radeon/radeon_cursor.c | 12 +++--- drivers/gpu/drm/radeon/radeon_encoders.c | 9 +++-- drivers/gpu/drm/radeon/rv770.c | 51 ---------------------------- drivers/ide/ide-disk.c | 7 +++ drivers/md/dm-table.c | 13 +++---- drivers/md/md.c | 22 ++++++++++-- drivers/md/md.h | 2 - drivers/md/multipath.c | 3 - drivers/md/raid1.c | 3 - drivers/md/raid10.c | 5 +- drivers/md/raid5.c | 6 +-- drivers/misc/lis3lv02d/lis3lv02d.c | 14 ++++--- drivers/mmc/host/mxs-mmc.c | 30 +++++++--------- drivers/net/e1000e/ich8lan.c | 19 +++++++--- drivers/net/wireless/rt2x00/rt2x00queue.c | 21 ++++++++--- drivers/net/wireless/rt2x00/rt2x00queue.h | 2 + drivers/scsi/libsas/sas_expander.c | 10 +++-- drivers/scsi/qla2xxx/qla_os.c | 9 ++--- fs/exec.c | 2 + include/linux/ftrace.h | 7 ++- include/linux/ptp_classify.h | 13 +++++-- include/linux/sched.h | 1 include/net/ipv6.h | 2 - kernel/posix-cpu-timers.c | 5 +- kernel/sched.c | 26 -------------- kernel/sched_rt.c | 4 +- kernel/trace/ftrace.c | 42 +++++++++++++++++------ kernel/trace/trace_functions.c | 3 + net/ipv6/ip6_output.c | 10 ++--- net/ipv6/udp.c | 4 +- sound/soc/codecs/wm8753.c | 4 +- sound/soc/pxa/zylonite.c | 8 ++-- 42 files changed, 262 insertions(+), 302 deletions(-)
Alex Deucher (6):
drm/radeon/kms: Fix logic error in DP HPD handler drm/radeon/kms: fix regression in DP aux defer handling drm/radeon/kms: add retry limits for native DP aux defer drm/radeon/kms: fix channel_remap setup (v2)
drm/radeon/kms: retry aux transactions if there are status flags drm/radeon/kms: use hardcoded dig encoder to transmitter mapping for DCE4.1
Arnd Bergmann (1):
ASoC: use a valid device for dev_err() in Zylonite
Axel Lin (1):
ASoC: Fix setting update bits for WM8753_LADC and WM8753_RADC
Borislav Petkov (1):
ide-disk: Fix request requeuing
Bruce Allan (1):
e1000e: workaround for packet drop on 82579 at 100Mbps
David S. Miller (1):
sparc64: Force the execute bit in OpenFirmware's translation entries.
Gertjan van Wingerde (1):
rt2x00: Serialize TX operations on a queue.
Greg Kroah-Hartman (1):
Linux 3.0.7
Jason Wang (1):
ipv6: fix NULL dereference in udp6_ufo_fragment()
Koen Beel (1):
mmc: mxs-mmc: fix clock rate setting
Mark Nelson (1):
ahci: Enable SB600 64bit DMA on Asus M3A
Mark Salyzyn (1):
libsas: fix panic when single phy is disabled on a wide port
Michel Dänzer (1):
drm/radeon: Update AVIVO cursor coordinate origin before x/yorigin calculation.
Mike Snitzer (1):
dm table: avoid crash if integrity profile changes
NeilBrown (1):
md: Avoid waking up a thread after it has been freed.
Paul Menzel (1):
x86/PCI: use host bridge _CRS info on ASUS M2V-MX SE
Peter Zijlstra (1):
posix-cpu-timers: Cure SMP wobbles
Rafael J. Wysocki (1):
MIPS: PM: Use struct syscore_ops instead of sysdevs for PM (v2)
Richard Cochran (1):
ptp: fix L2 event message recognition
Roland Dreier (1):
qla2xxx: Fix crash in qla2x00_abort_all_cmds() on unload
Shawn Bohrer (1):
sched/rt: Migrate equal priority tasks to available CPUs
Simon Kirby (1):
sched: Fix up wchan borkage
Steven Rostedt (3):
ftrace: Fix regression of :mod:module function enabling
ftrace: Fix regression where ftrace breaks when modules are loaded
ftrace: Fix warning when CONFIG_FUNCTION_TRACER is not defined
Takashi Iwai (1):
lis3: fix regression of HP DriveGuard with 8bit chip
Tetsuo Handa (1):
exec: do not call request_module() twice from search_binary_handler()
srinidhi kasagar (1):
ARM: mach-ux500: enable fix for ARM errata 754322
Quoted 9 lines · Greg KH
I'm announcing the release of the 3.0.7 kernel.
All users of the 3.0 kernel series must upgrade.
The updated 3.0.y git tree can be found at (NOTE THE ADDRESS CHANGE):
git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.gitlinux-3.0.y
and can be browsed at the normal kernel.org git web browser:
http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=summary
Quoted 4 lines
Note, I've had some boot problems with this kernel, and I can't seem to narrow the issue down, but I think it's due to something not related to the kernel itself, but am not positive. Please test to verify that I didn't mess something up.
Ok, this was a userspace problem on my machines, not a kernel issue, I've resolved it (hint, don't have an old udev with a new libudev package on the same system), and this kernel works fine for me now.
I've had some reports of it working for others as well, so we can chalk this one up to my boxes being broken, not the kernel.
thanks,
greg k-h
Here is the 3.0.7 incremental patch, to be applied on top of 3.0.6, signed with my stable kernel signing key.
thanks,
greg k-h
Makefile +1 -1
@@ -1,6 +1,6 @@ VERSION = 3 PATCHLEVEL = 0 -SUBLEVEL = 6 +SUBLEVEL = 7 EXTRAVERSION = NAME = Sneaky Weasel
arch/arm/mach-ux500/Kconfig +1 -0
@@ -6,6 +6,7 @@ config UX500_SOC_COMMON select ARM_GIC select HAS_MTU select ARM_ERRATA_753970 + select ARM_ERRATA_754322 menu "Ux500 SoC"
arch/mips/jz4740/gpio.c +22 -30
107 lines not on this page · raw message
arch/sparc/mm/init_64.c +5 -0
@@ -511,6 +511,11 @@ static void __init read_obp_translations(void)for (i =0 ; i < prom_trans_ents; i++) prom_trans[i].data &= ~0x0003fe0000000000UL ; } + +/* Force execute bit on. */ +for (i =0 ; i < prom_trans_ents; i++) + prom_trans[i].data |= (tlb_type == hypervisor ? + _PAGE_EXEC_4V : _PAGE_EXEC_4U); } static void __init hypervisor_tlb_lock(unsigned long vaddr,
arch/x86/pci/acpi.c +11 -0
@@ -43,6 +43,17 @@ static const struct dmi_system_id pci_use_crs_table[] __initconst = { DMI_MATCH(DMI_PRODUCT_NAME, "ALiveSATA2-GLAN"), }, }, +/* https://bugzilla.kernel.org/show_bug.cgi?id=30552 */ +/* 2006 AMD HT/VIA system with two host bridges */ + { + .callback = set_use_crs, + .ident = "ASUS M2V-MX SE", + .matches = { + DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), + DMI_MATCH(DMI_BOARD_NAME, "M2V-MX SE"), + DMI_MATCH(DMI_BIOS_VENDOR, "American Megatrends Inc."), + }, + }, {} };
drivers/ata/ahci.c +12 -0
@@ -812,6 +812,18 @@ static bool ahci_sb600_enable_64bit(struct pci_dev *pdev) DMI_MATCH(DMI_BOARD_NAME, "MS-7376"), }, }, +/* +* All BIOS versions for the Asus M3A support 64bit DMA. +* (all release versions from 0301 to 1206 were tested) +*/ + { + .ident = "ASUS M3A", + .matches = { + DMI_MATCH(DMI_BOARD_VENDOR, + "ASUSTeK Computer INC."), + DMI_MATCH(DMI_BOARD_NAME, "M3A"), + }, + }, { } }; const struct dmi_system_id *match;
drivers/gpu/drm/radeon/atombios_dp.c +19 -9
@@ -115,6 +115,7 @@ static int radeon_dp_aux_native_write(struct radeon_connector *radeon_connector,u8 msg[20 ];int msg_bytes = send_bytes +4 ;u8 ack; +unsigned retry;if (send_bytes >16 )return -1 ;
@@ -125,20 +126,22 @@ static int radeon_dp_aux_native_write(struct radeon_connector *radeon_connector, msg[3 ] = (msg_bytes <<4 ) | (send_bytes -1 );memcpy (&msg[4 ], send, send_bytes); -while (1 ) { +for (retry =0 ; retry <4 ; retry++) { ret =radeon_process_aux_ch (dig_connector->dp_i2c_bus, msg, msg_bytes,NULL ,0 , delay, &ack); -if (ret <0 ) +if (ret == -EBUSY ) +continue ; +else if (ret <0 )return ret;if ((ack &AUX_NATIVE_REPLY_MASK ) ==AUX_NATIVE_REPLY_ACK ) -break ; +return send_bytes;else if ((ack &AUX_NATIVE_REPLY_MASK ) ==AUX_NATIVE_REPLY_DEFER )udelay (400 );else return -EIO ; } -return send_bytes; +return -EIO ; } static int radeon_dp_aux_native_read(struct radeon_connector *radeon_connector,
@@ -149,26 +152,31 @@ static int radeon_dp_aux_native_read(struct radeon_connector *radeon_connector,int msg_bytes =4 ;u8 ack;int ret; +unsigned retry; msg[0 ] = address; msg[1 ] = address >>8 ; msg[2 ] =AUX_NATIVE_READ <<4 ; msg[3 ] = (msg_bytes <<4 ) | (recv_bytes -1 ); -while (1 ) { +for (retry =0 ; retry <4 ; retry++) { ret =radeon_process_aux_ch (dig_connector->dp_i2c_bus, msg, msg_bytes, recv, recv_bytes, delay, &ack); -if (ret ==0 ) -return -EPROTO ; -if (ret <0 ) +if (ret == -EBUSY ) +continue ; +else if (ret <0 )return ret;if ((ack &AUX_NATIVE_REPLY_MASK ) ==AUX_NATIVE_REPLY_ACK )return ret;else if ((ack &AUX_NATIVE_REPLY_MASK ) ==AUX_NATIVE_REPLY_DEFER )udelay (400 ); +else if (ret ==0 ) +return -EPROTO ;else return -EIO ; } + +return -EIO ; } static void radeon_write_dpcd_reg(struct radeon_connector *radeon_connector,
@@ -232,7 +240,9 @@ int radeon_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode,for (retry =0 ; retry <4 ; retry++) { ret =radeon_process_aux_ch (auxch, msg, msg_bytes, reply, reply_bytes,0 , &ack); -if (ret <0 ) { +if (ret == -EBUSY ) +continue ; +else if (ret <0 ) {DRM_DEBUG_KMS ("aux_ch failed %d\n" , ret);return ret; }
drivers/gpu/drm/radeon/evergreen.c +0 -44
56 lines not on this page · raw message
drivers/gpu/drm/radeon/ni.c +0 -32
@@ -569,36 +569,6 @@ static u32 cayman_get_tile_pipe_to_backend_map(struct radeon_device *rdev,return backend_map; } -static void cayman_program_channel_remap (struct radeon_device *rdev) -{ -u32 tcp_chan_steer_lo, tcp_chan_steer_hi, mc_shared_chremap, tmp; - - tmp =RREG32 (MC_SHARED_CHMAP ); -switch ((tmp &NOOFCHAN_MASK ) >>NOOFCHAN_SHIFT ) { -case 0 : -case 1 : -case 2 : -case 3 : -default : -/* default mapping */ - mc_shared_chremap =0x00fac688 ; -break ; - } - -switch (rdev->family) { -case CHIP_CAYMAN : -default : -//tcp_chan_steer_lo = 0x54763210 - tcp_chan_steer_lo =0x76543210 ; - tcp_chan_steer_hi =0x0000ba98 ; -break ; - } - -WREG32 (TCP_CHAN_STEER_LO , tcp_chan_steer_lo); -WREG32 (TCP_CHAN_STEER_HI , tcp_chan_steer_hi); -WREG32 (MC_SHARED_CHREMAP , mc_shared_chremap); -} - static u32 cayman_get_disable_mask_per_asic(struct radeon_device *rdev, u32 disable_mask_per_se, u32 max_disable_mask_per_se,
@@ -841,8 +811,6 @@ static void cayman_gpu_init(struct radeon_device *rdev)WREG32 (DMIF_ADDR_CONFIG , gb_addr_config);WREG32 (HDP_ADDR_CONFIG , gb_addr_config); -cayman_program_channel_remap (rdev); -/* primary versions */ WREG32 (CC_RB_BACKEND_DISABLE , cc_rb_backend_disable);WREG32 (CC_SYS_RB_BACKEND_DISABLE , cc_rb_backend_disable);
drivers/gpu/drm/radeon/radeon_connectors.c +4 -4
@@ -68,11 +68,11 @@ void radeon_connector_hotplug(struct drm_connector *connector)if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) {int saved_dpms = connector->dpms; -if (radeon_hpd_sense (rdev, radeon_connector->hpd.hpd) && -radeon_dp_needs_link_train (radeon_connector)) -drm_helper_connector_dpms (connector,DRM_MODE_DPMS_ON ); -else +/* Only turn off the display it it's physically disconnected */ +if (!radeon_hpd_sense (rdev, radeon_connector->hpd.hpd))drm_helper_connector_dpms (connector,DRM_MODE_DPMS_OFF ); +else if (radeon_dp_needs_link_train (radeon_connector)) +drm_helper_connector_dpms (connector,DRM_MODE_DPMS_ON ); connector->dpms = saved_dpms; } }
drivers/gpu/drm/radeon/radeon_cursor.c +7 -5
@@ -208,6 +208,13 @@ int radeon_crtc_cursor_move(struct drm_crtc *crtc,int xorigin =0 , yorigin =0 ;int w = radeon_crtc->cursor_width; +if (ASIC_IS_AVIVO (rdev)) { +/* avivo cursor are offset into the total surface */ + x += crtc->x; + y += crtc->y; + } +DRM_DEBUG ("x %d y %d c->x %d c->y %d\n" , x, y, crtc->x, crtc->y); +if (x <0 ) xorigin = -x +1 ;if (y <0 )
@@ -221,11 +228,6 @@ int radeon_crtc_cursor_move(struct drm_crtc *crtc,int i =0 ;struct drm_crtc *crtc_p; -/* avivo cursor are offset into the total surface */ - x += crtc->x; - y += crtc->y; -DRM_DEBUG ("x %d y %d c->x %d c->y %d\n" , x, y, crtc->x, crtc->y); -/* avivo cursor image can't end on 128 pixel boundary or * go past the end of the frame if both crtcs are enabled */
drivers/gpu/drm/radeon/radeon_encoders.c +6 -3
@@ -1755,9 +1755,12 @@ static int radeon_atom_pick_dig_encoder(struct drm_encoder *encoder)/* DCE4/5 */ if (ASIC_IS_DCE4 (rdev)) { dig = radeon_encoder->enc_priv; -if (ASIC_IS_DCE41 (rdev)) -return radeon_crtc->crtc_id; -else { +if (ASIC_IS_DCE41 (rdev)) { +if (dig->linkb) +return 1 ; +else +return 0 ; + }else {switch (radeon_encoder->encoder_id) {case ENCODER_OBJECT_ID_INTERNAL_UNIPHY :if (dig->linkb)
drivers/gpu/drm/radeon/rv770.c +0 -51
63 lines not on this page · raw message
drivers/ide/ide-disk.c +6 -1
@@ -435,7 +435,12 @@ static int idedisk_prep_fn(struct request_queue *q, struct request *rq)if (!(rq->cmd_flags &REQ_FLUSH ))return BLKPREP_OK ; - cmd =kzalloc (sizeof (*cmd),GFP_ATOMIC ); +if (rq->special) { + cmd = rq->special; +memset (cmd,0 ,sizeof (*cmd)); + }else { + cmd =kzalloc (sizeof (*cmd),GFP_ATOMIC ); + }/* FIXME: map struct ide_taskfile on rq->cmd[] */ BUG_ON (cmd ==NULL );
drivers/md/dm-table.c +7 -6
@@ -1184,14 +1184,15 @@ static void dm_table_set_integrity(struct dm_table *t)return ; template_disk =dm_table_get_integrity_disk (t, true); -if (!template_disk && -blk_integrity_is_initialized (dm_disk (t->md))) { +if (template_disk) +blk_integrity_register (dm_disk (t->md), +blk_get_integrity (template_disk)); +else if (blk_integrity_is_initialized (dm_disk (t->md)))DMWARN ("%s: device no longer has a valid integrity profile" ,dm_device_name (t->md)); -return ; - } -blk_integrity_register (dm_disk (t->md), -blk_get_integrity (template_disk)); +else +DMWARN ("%s: unable to establish an integrity profile" , +dm_device_name (t->md)); } void dm_table_set_restrictions(struct dm_table *t, struct request_queue *q,
drivers/md/md.c +19 -3
@@ -61,6 +61,11 @@static void autostart_arrays (int part);#endif +/* pers_list is a list of registered personalities protected +* by pers_lock. +* pers_lock does extra service to protect accesses to +* mddev->thread when the mutex cannot be held. +*/ static LIST_HEAD (pers_list);static DEFINE_SPINLOCK (pers_lock);
@@ -690,7 +695,12 @@ static void mddev_unlock(mddev_t * mddev) }else mutex_unlock (&mddev->reconfig_mutex); +/* was we've dropped the mutex we need a spinlock to +* make sur the thread doesn't disappear +*/ +spin_lock (&pers_lock);md_wakeup_thread (mddev->thread); +spin_unlock (&pers_lock); }static mdk_rdev_t *find_rdev_nr (mddev_t *mddev,int nr)
@@ -6186,11 +6196,18 @@ mdk_thread_t *md_register_thread(void (*run) (mddev_t *), mddev_t *mddev,return thread; } -void md_unregister_thread (mdk_thread_t *thread) +void md_unregister_thread (mdk_thread_t **threadp) { +mdk_thread_t *thread = *threadp;if (!thread)return ;dprintk ("interrupting MD-thread pid %d\n" ,task_pid_nr (thread->tsk)); +/* Locking ensures that mddev_unlock does not wake_up a +* non-existent thread +*/ +spin_lock (&pers_lock); + *threadp =NULL ; +spin_unlock (&pers_lock);kthread_stop (thread->tsk);kfree (thread);
@@ -7125,8 +7142,7 @@ static void reap_sync_thread(mddev_t *mddev)mdk_rdev_t *rdev;/* resync has finished, collect result */ -md_unregister_thread (mddev->sync_thread); - mddev->sync_thread =NULL ; +md_unregister_thread (&mddev->sync_thread);if (!test_bit (MD_RECOVERY_INTR , &mddev->recovery) && !test_bit (MD_RECOVERY_REQUESTED , &mddev->recovery)) {/* success...*/
drivers/md/md.h +1 -1
@@ -475,7 +475,7 @@ extern int register_md_personality(struct mdk_personality *p);extern int unregister_md_personality (struct mdk_personality *p);extern mdk_thread_t *md_register_thread (void (*run) (mddev_t *mddev),mddev_t *mddev,const char *name); -extern void md_unregister_thread (mdk_thread_t *thread); +extern void md_unregister_thread (mdk_thread_t **threadp);extern void md_wakeup_thread (mdk_thread_t *thread);extern void md_check_recovery (mddev_t *mddev);extern void md_write_start (mddev_t *mddev,struct bio *bi);
drivers/md/multipath.c +1 -2
@@ -514,8 +514,7 @@ static int multipath_stop (mddev_t *mddev) {multipath_conf_t *conf = mddev->private; -md_unregister_thread (mddev->thread); - mddev->thread =NULL ; +md_unregister_thread (&mddev->thread);blk_sync_queue (mddev->queue);/* the unplug fn references 'conf'*/ mempool_destroy (conf->pool);kfree (conf->multipaths);
drivers/md/raid1.c +1 -2
@@ -2045,8 +2045,7 @@ static int stop(mddev_t *mddev)raise_barrier (conf);lower_barrier (conf); -md_unregister_thread (mddev->thread); - mddev->thread =NULL ; +md_unregister_thread (&mddev->thread);if (conf->r1bio_pool)mempool_destroy (conf->r1bio_pool);kfree (conf->mirrors);
drivers/md/raid10.c +2 -3
@@ -2331,7 +2331,7 @@ static int run(mddev_t *mddev)return 0 ; out_free_conf: -md_unregister_thread (mddev->thread); +md_unregister_thread (&mddev->thread);if (conf->r10bio_pool)mempool_destroy (conf->r10bio_pool);safe_put_page (conf->tmppage);
@@ -2349,8 +2349,7 @@ static int stop(mddev_t *mddev)raise_barrier (conf,0 );lower_barrier (conf); -md_unregister_thread (mddev->thread); - mddev->thread =NULL ; +md_unregister_thread (&mddev->thread);blk_sync_queue (mddev->queue);/* the unplug fn references 'conf'*/ if (conf->r10bio_pool)mempool_destroy (conf->r10bio_pool);
drivers/md/raid5.c +2 -4
@@ -5162,8 +5162,7 @@ static int run(mddev_t *mddev)return 0 ; abort: -md_unregister_thread (mddev->thread); - mddev->thread =NULL ; +md_unregister_thread (&mddev->thread);if (conf) {print_raid5_conf (conf);free_conf (conf);
@@ -5177,8 +5176,7 @@ static int stop(mddev_t *mddev) {raid5_conf_t *conf = mddev->private; -md_unregister_thread (mddev->thread); - mddev->thread =NULL ; +md_unregister_thread (&mddev->thread);if (mddev->queue) mddev->queue->backing_dev_info.congested_fn =NULL ;free_conf (conf);
drivers/misc/lis3lv02d/lis3lv02d.c +8 -6
@@ -375,12 +375,14 @@ void lis3lv02d_poweron(struct lis3lv02d *lis3)* both have been read. So the value read will always be correct. * Set BOOT bit to refresh factory tuning values. */ - lis3->read (lis3,CTRL_REG2 , ®); -if (lis3->whoami ==WAI_12B ) - reg |=CTRL2_BDU |CTRL2_BOOT ; -else - reg |=CTRL2_BOOT_8B ; - lis3->write (lis3,CTRL_REG2 , reg); +if (lis3->pdata) { + lis3->read (lis3,CTRL_REG2 , ®); +if (lis3->whoami ==WAI_12B ) + reg |=CTRL2_BDU |CTRL2_BOOT ; +else + reg |=CTRL2_BOOT_8B ; + lis3->write (lis3,CTRL_REG2 , reg); + }/* LIS3 power on delay is quite long */ msleep (lis3->pwron_delay /lis3lv02d_get_odr ());
drivers/mmc/host/mxs-mmc.c +14 -16
@@ -564,40 +564,38 @@ static void mxs_mmc_request(struct mmc_host *mmc, struct mmc_request *mrq)static void mxs_mmc_set_clk_rate (struct mxs_mmc_host *host,unsigned int rate) { -unsigned int ssp_rate, bit_rate; -u32 div1, div2; +unsigned int ssp_clk, ssp_sck; +u32 clock_divide, clock_rate;u32 val; - ssp_rate =clk_get_rate (host->clk); + ssp_clk =clk_get_rate (host->clk); -for (div1 =2 ; div1 <254 ; div1 +=2 ) { - div2 = ssp_rate / rate / div1; -if (div2 <0x100 ) +for (clock_divide =2 ; clock_divide <=254 ; clock_divide +=2 ) { + clock_rate =DIV_ROUND_UP (ssp_clk, rate * clock_divide); + clock_rate = (clock_rate >0 ) ? clock_rate -1 :0 ; +if (clock_rate <=255 )break ; } -if (div1 >=254 ) { +if (clock_divide >254 ) {dev_err (mmc_dev (host->mmc),"%s: cannot set clock to %d\n" , __func__, rate);return ; } -if (div2 ==0 ) - bit_rate = ssp_rate / div1; -else - bit_rate = ssp_rate / div1 / div2; + ssp_sck = ssp_clk / clock_divide / (1 + clock_rate); val =readl (host->base +HW_SSP_TIMING ); val &= ~(BM_SSP_TIMING_CLOCK_DIVIDE |BM_SSP_TIMING_CLOCK_RATE ); - val |=BF_SSP (div1,TIMING_CLOCK_DIVIDE ); - val |=BF_SSP (div2 -1 ,TIMING_CLOCK_RATE ); + val |=BF_SSP (clock_divide,TIMING_CLOCK_DIVIDE ); + val |=BF_SSP (clock_rate,TIMING_CLOCK_RATE );writel (val, host->base +HW_SSP_TIMING ); - host->clk_rate = bit_rate; + host->clk_rate = ssp_sck;dev_dbg (mmc_dev (host->mmc), -"%s: div1 %d, div2 %d, ssp %d, bit %d, rate %d\n" , - __func__, div1, div2, ssp_rate, bit_rate, rate); +"%s: clock_divide %d, clock_rate %d, ssp_clk %d, rate_actual %d, rate_requested %d\n" , + __func__, clock_divide, clock_rate, ssp_clk, ssp_sck, rate); }static void mxs_mmc_set_ios (struct mmc_host *mmc,struct mmc_ios *ios)
drivers/net/e1000e/ich8lan.c +14 -5
@@ -137,8 +137,9 @@#define HV_PM_CTRL PHY_REG(770, 17)/* PHY Low Power Idle Control */ -#define I82579_LPI_CTRL PHY_REG(772, 20) -#define I82579_LPI_CTRL_ENABLE_MASK 0x6000 +#define I82579_LPI_CTRL PHY_REG(772, 20) +#define I82579_LPI_CTRL_ENABLE_MASK 0x6000 +#define I82579_LPI_CTRL_FORCE_PLL_LOCK_COUNT 0x80/* EMI Registers */ #define I82579_EMI_ADDR 0x10
@@ -1611,6 +1612,7 @@ static s32 e1000_k1_workaround_lv(struct e1000_hw *hw)s32 ret_val =0 ;u16 status_reg =0 ;u32 mac_reg; +u16 phy_reg;if (hw->mac.type != e1000_pch2lan) goto out;
@@ -1625,12 +1627,19 @@ static s32 e1000_k1_workaround_lv(struct e1000_hw *hw) mac_reg =er32 (FEXTNVM4 ); mac_reg &= ~E1000_FEXTNVM4_BEACON_DURATION_MASK ; -if (status_reg &HV_M_STATUS_SPEED_1000 ) + ret_val =e1e_rphy (hw,I82579_LPI_CTRL , &phy_reg); +if (ret_val) + goto out; + +if (status_reg &HV_M_STATUS_SPEED_1000 ) { mac_reg |=E1000_FEXTNVM4_BEACON_DURATION_8USEC ; -else + phy_reg &= ~I82579_LPI_CTRL_FORCE_PLL_LOCK_COUNT ; + }else { mac_reg |=E1000_FEXTNVM4_BEACON_DURATION_16USEC ; - + phy_reg |=I82579_LPI_CTRL_FORCE_PLL_LOCK_COUNT ; + }ew32 (FEXTNVM4 , mac_reg); + ret_val =e1e_wphy (hw,I82579_LPI_CTRL , phy_reg); } out:
drivers/net/wireless/rt2x00/rt2x00queue.c +16 -5
@@ -556,15 +556,21 @@ int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb, bool local) {struct ieee80211_tx_info *tx_info; -struct queue_entry *entry =rt2x00queue_get_entry (queue,Q_INDEX ); +struct queue_entry *entry;struct txentry_desc txdesc;struct skb_frame_desc *skbdesc;u8 rate_idx, rate_flags; +int ret =0 ; + +spin_lock (&queue->tx_lock); + + entry =rt2x00queue_get_entry (queue,Q_INDEX );if (unlikely (rt2x00queue_full (queue))) {ERROR (queue->rt2x00dev,"Dropping frame due to full tx queue %d.\n" , queue->qid); -return -ENOBUFS ; + ret = -ENOBUFS ; + goto out; } if (unlikely(test_and_set_bit(ENTRY_OWNER_DEVICE_DATA,
@@ -573,7 +579,8 @@ int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb,"Arrived at non-free entry in the non-full queue %d.\n" "Please file bug report to %s.\n" , queue->qid, DRV_PROJECT); -return -EINVAL ; + ret = -EINVAL ; + goto out; }/*
@@ -635,7 +642,8 @@ int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb,if (unlikely (rt2x00queue_write_tx_data (entry, &txdesc))) {clear_bit (ENTRY_OWNER_DEVICE_DATA , &entry->flags); entry->skb =NULL ; -return -EIO ; + ret = -EIO ; + goto out; }set_bit (ENTRY_DATA_PENDING , &entry->flags);
@@ -644,7 +652,9 @@ int rt2x00queue_write_tx_frame(struct data_queue *queue, struct sk_buff *skb,rt2x00queue_write_tx_descriptor (entry, &txdesc);rt2x00queue_kick_tx_queue (queue, &txdesc); -return 0 ; +out: +spin_unlock (&queue->tx_lock); +return ret; } int rt2x00queue_clear_beacon(struct rt2x00_dev *rt2x00dev,
@@ -1185,6 +1195,7 @@ static void rt2x00queue_init(struct rt2x00_dev *rt2x00dev, struct data_queue *queue, enum data_queue_qid qid) {mutex_init (&queue->status_lock); +spin_lock_init (&queue->tx_lock);spin_lock_init (&queue->index_lock); queue->rt2x00dev = rt2x00dev;
drivers/net/wireless/rt2x00/rt2x00queue.h +2 -0
@@ -432,6 +432,7 @@ enum data_queue_flags {* @flags: Entry flags, see &enum queue_entry_flags. * @status_lock: The mutex for protecting the start/stop/flush * handling on this queue. +* @tx_lock: Spinlock to serialize tx operations on this queue. * @index_lock: Spinlock to protect index handling. Whenever @index, @index_done or * @index_crypt needs to be changed this lock should be grabbed to prevent * index corruption due to concurrency.
@@ -458,6 +459,7 @@ struct data_queue {unsigned long flags;struct mutex status_lock; +spinlock_t tx_lock;spinlock_t index_lock;unsigned int count;
drivers/scsi/libsas/sas_expander.c +6 -4
@@ -1769,10 +1769,12 @@ static void sas_unregister_devs_sas_addr(struct domain_device *parent,sas_disable_routing (parent, phy->attached_sas_addr); }memset (phy->attached_sas_addr,0 ,SAS_ADDR_SIZE ); -sas_port_delete_phy (phy->port, phy->phy); -if (phy->port->num_phys ==0 ) -sas_port_delete (phy->port); - phy->port =NULL ; +if (phy->port) { +sas_port_delete_phy (phy->port, phy->phy); +if (phy->port->num_phys ==0 ) +sas_port_delete (phy->port); + phy->port =NULL ; + } } static int sas_discover_bfs_by_root_level(struct domain_device *root,
drivers/scsi/qla2xxx/qla_os.c +5 -4
@@ -1240,10 +1240,9 @@ qla2x00_abort_all_cmds(scsi_qla_host_t *vha, int res)qla2x00_sp_compl (ha, sp); }else { ctx = sp->ctx; -if (ctx->type ==SRB_LOGIN_CMD || - ctx->type ==SRB_LOGOUT_CMD ) { - ctx->u.iocb_cmd->free (sp); - }else { +if (ctx->type ==SRB_ELS_CMD_RPT || + ctx->type ==SRB_ELS_CMD_HST || + ctx->type ==SRB_CT_CMD ) {struct fc_bsg_job *bsg_job = ctx->u.bsg_job; if (bsg_job->request->msgcode
@@ -1255,6 +1254,8 @@ qla2x00_abort_all_cmds(scsi_qla_host_t *vha, int res)kfree (sp->ctx);mempool_free (sp, ha->srb_mempool); + }else { + ctx->u.iocb_cmd->free (sp); } } }
fs/exec.c +2 -0
@@ -1411,6 +1411,8 @@ int search_binary_handler(struct linux_binprm *bprm,struct pt_regs *regs)printable (bprm->buf[2 ]) && printable(bprm->buf[3])) break; /* -ENOEXEC */ +if (try) +break ;/* -ENOEXEC */ request_module ("binfmt-%04x" , *(unsigned short *)(&bprm->buf[2 ]));#endif }
include/linux/ftrace.h +4 -3
@@ -19,6 +19,8 @@#include <asm/ftrace.h> +struct ftrace_hash ; +#ifdef CONFIG_FUNCTION_TRACER extern int ftrace_enabled;
@@ -29,8 +31,6 @@ ftrace_enable_sysctl(struct ctl_table *table, int write,typedef void (*ftrace_func_t )(unsigned long ip,unsigned long parent_ip); -struct ftrace_hash ; -enum {FTRACE_OPS_FL_ENABLED =1 <<0 ,FTRACE_OPS_FL_GLOBAL =1 <<1 ,
@@ -123,7 +123,8 @@ stack_trace_sysctl(struct ctl_table *table, int write,struct ftrace_func_command {struct list_head list;char *name; -int (*func)(char *func,char *cmd, +int (*func)(struct ftrace_hash *hash, +char *func,char *cmd,char *params,int enable); };
include/linux/ptp_classify.h +10 -3
@@ -51,6 +51,7 @@#define PTP_CLASS_V2_VLAN (PTP_CLASS_V2 | PTP_CLASS_VLAN)#define PTP_EV_PORT 319 +#define PTP_GEN_BIT 0x08/* indicates general message, if set in message type */ #define OFF_ETYPE 12#define OFF_IHL 14
@@ -116,14 +117,20 @@ static inline int ptp_filter_init(struct sock_filter *f, int len) {OP_OR, 0, 0, PTP_CLASS_IPV6 }, /* */ \ {OP_RETA, 0, 0, 0 }, /* */ \ /*L3x*/ {OP_RETK, 0, 0, PTP_CLASS_NONE }, /* */ \ -/*L40*/ {OP_JEQ, 0, 6, ETH_P_8021Q }, /* f goto L50 */ \ +/*L40*/ {OP_JEQ, 0, 9, ETH_P_8021Q }, /* f goto L50 */ \ {OP_LDH, 0, 0, OFF_ETYPE + 4 }, /* */ \ - {OP_JEQ, 0, 9, ETH_P_1588 }, /* f goto L60 */ \ + {OP_JEQ, 0, 15, ETH_P_1588 }, /* f goto L60 */ \ + {OP_LDB, 0, 0, ETH_HLEN + VLAN_HLEN }, /* */ \ + {OP_AND, 0, 0, PTP_GEN_BIT }, /* */ \ + {OP_JEQ, 0, 12, 0 }, /* f goto L6x */ \ {OP_LDH, 0, 0, ETH_HLEN + VLAN_HLEN }, /* */ \ {OP_AND, 0, 0, PTP_CLASS_VMASK }, /* */ \ {OP_OR, 0, 0, PTP_CLASS_VLAN }, /* */ \ {OP_RETA, 0, 0, 0 }, /* */ \ -/*L50*/ {OP_JEQ, 0, 4, ETH_P_1588 }, /* f goto L61 */ \ +/*L50*/ {OP_JEQ, 0, 7, ETH_P_1588 }, /* f goto L61 */ \ + {OP_LDB, 0, 0, ETH_HLEN }, /* */ \ + {OP_AND, 0, 0, PTP_GEN_BIT }, /* */ \ + {OP_JEQ, 0, 4, 0 }, /* f goto L6x */ \ {OP_LDH, 0, 0, ETH_HLEN }, /* */ \ {OP_AND, 0, 0, PTP_CLASS_VMASK }, /* */ \ {OP_OR, 0, 0, PTP_CLASS_L2 }, /* */ \
include/linux/sched.h +0 -1
@@ -1937,7 +1937,6 @@ static inline void disable_sched_clock_irqtime(void) {}extern unsigned long long task_sched_runtime (struct task_struct *task); -extern unsigned long long thread_group_sched_runtime (struct task_struct *task);/* sched_exec is called by processes performing an exec */ #ifdef CONFIG_SMP
include/net/ipv6.h +1 -1
@@ -463,7 +463,7 @@ static inline int ipv6_addr_diff(const struct in6_addr *a1, const struct in6_addreturn __ipv6_addr_diff (a1, a2,sizeof (struct in6_addr )); } -extern void ipv6_select_ident (struct frag_hdr *fhdr,struct rt6_info *rt); +extern void ipv6_select_ident (struct frag_hdr *fhdr,struct in6_addr *addr);/* * Prototypes exported by ipv6
kernel/posix-cpu-timers.c +3 -2
@@ -250,7 +250,7 @@ void thread_group_cputime(struct task_struct *tsk, struct task_cputime *times) do { times->utime = cputime_add(times->utime, t->utime); times->stime = cputime_add(times->stime, t->stime); - times->sum_exec_runtime += t->se.sum_exec_runtime; + times->sum_exec_runtime += task_sched_runtime(t); } while_each_thread(tsk, t); out: rcu_read_unlock();
@@ -312,7 +312,8 @@ static int cpu_clock_sample_group(const clockid_t which_clock, cpu->cpu = cputime.utime;break ;case CPUCLOCK_SCHED : - cpu->sched =thread_group_sched_runtime (p); +thread_group_cputime (p, &cputime); + cpu->sched = cputime.sum_exec_runtime;break ; }return 0 ;
kernel/sched.c +1 -25
@@ -3713,30 +3713,6 @@ unsigned long long task_sched_runtime(struct task_struct *p) }/* -* Return sum_exec_runtime for the thread group. -* In case the task is currently running, return the sum plus current's -* pending runtime that have not been accounted yet. -* -* Note that the thread group might have other running tasks as well, -* so the return value not includes other pending runtime that other -* running tasks might have. -*/ -unsigned long long thread_group_sched_runtime (struct task_struct *p) -{ -struct task_cputime totals; -unsigned long flags; -struct rq *rq; -u64 ns; - - rq =task_rq_lock (p, &flags); -thread_group_cputime (p, &totals); - ns = totals.sum_exec_runtime +do_task_delta_exec (p, rq); -task_rq_unlock (rq, p, &flags); - -return ns; -} - -/* * Account user cpu time to a process. * @p: the process that the cpu time gets accounted to * @cputime: the cpu time spent in user space since the last update
@@ -4335,7 +4311,7 @@ static inline void sched_submit_work(struct task_struct *tsk)blk_schedule_flush_plug (tsk); } -asmlinkage void schedule(void) +asmlinkage void __sched schedule(void) {struct task_struct *tsk = current;
kernel/sched_rt.c +2 -2
@@ -1038,7 +1038,7 @@ select_task_rq_rt(struct task_struct *p, int sd_flag, int flags)*/ if (curr &&unlikely (rt_task (curr)) && (curr->rt.nr_cpus_allowed <2 || - curr->prio < p->prio) && + curr->prio <= p->prio) && (p->rt.nr_cpus_allowed >1 )) {int target =find_lowest_rq (p);
@@ -1569,7 +1569,7 @@ static void task_woken_rt(struct rq *rq, struct task_struct *p) p->rt.nr_cpus_allowed > 1 && rt_task(rq->curr) && (rq->curr->rt.nr_cpus_allowed < 2 || - rq->curr->prio < p->prio)) + rq->curr->prio <= p->prio))push_rt_tasks (rq); }
kernel/trace/ftrace.c +31 -11
83 lines not on this page · raw message
kernel/trace/trace_functions.c +2 -1
@@ -324,7 +324,8 @@ ftrace_trace_onoff_unreg(char *glob, char *cmd, char *param) }static int -ftrace_trace_onoff_callback (char *glob,char *cmd,char *param,int enable) +ftrace_trace_onoff_callback (struct ftrace_hash *hash, +char *glob,char *cmd,char *param,int enable) {struct ftrace_probe_ops *ops;void *count = (void *)-1 ;
net/ipv6/ip6_output.c +5 -5
@@ -620,9 +620,9 @@ static u32 __ipv6_select_ident(const struct in6_addr *addr)return hash + newid; } -void ipv6_select_ident (struct frag_hdr *fhdr,struct rt6_info *rt) +void ipv6_select_ident (struct frag_hdr *fhdr,struct in6_addr *addr) { - fhdr->identification =htonl (__ipv6_select_ident (&rt->rt6i_dst.addr)); + fhdr->identification =htonl (__ipv6_select_ident (addr)); }int ip6_fragment (struct sk_buff *skb,int (*output)(struct sk_buff *))
@@ -709,7 +709,7 @@ int ip6_fragment(struct sk_buff *skb, int (*output)(struct sk_buff *))skb_reset_network_header (skb);memcpy (skb_network_header (skb), tmp_hdr, hlen); -ipv6_select_ident (fh, rt); +ipv6_select_ident (fh, &rt->rt6i_dst.addr); fh->nexthdr = nexthdr; fh->reserved =0 ; fh->frag_off =htons (IP6_MF );
@@ -855,7 +855,7 @@ slow_path: fh->nexthdr = nexthdr; fh->reserved =0 ;if (!frag_id) { -ipv6_select_ident (fh, rt); +ipv6_select_ident (fh, &rt->rt6i_dst.addr); frag_id = fh->identification; }else fh->identification = frag_id;
@@ -1146,7 +1146,7 @@ static inline int ip6_ufo_append_data(struct sock *sk,skb_shinfo (skb)->gso_size = (mtu - fragheaderlen -sizeof (struct frag_hdr )) & ~7 ;skb_shinfo (skb)->gso_type =SKB_GSO_UDP ; -ipv6_select_ident (&fhdr, rt); +ipv6_select_ident (&fhdr, &rt->rt6i_dst.addr);skb_shinfo (skb)->ip6_frag_id = fhdr.identification;__skb_queue_tail (&sk->sk_write_queue, skb);
net/ipv6/udp.c +3 -1
@@ -1309,6 +1309,7 @@ static struct sk_buff *udp6_ufo_fragment(struct sk_buff *skb, u32 features)u8 frag_hdr_sz =sizeof (struct frag_hdr );int offset;__wsum csum; +struct rt6_info *rt = (struct rt6_info *)skb_dst (skb); mss =skb_shinfo (skb)->gso_size;if (unlikely (skb->len <= mss))
@@ -1359,7 +1360,8 @@ static struct sk_buff *udp6_ufo_fragment(struct sk_buff *skb, u32 features) fptr = (struct frag_hdr *)(skb_network_header (skb) + unfrag_ip6hlen); fptr->nexthdr = nexthdr; fptr->reserved =0 ; -ipv6_select_ident (fptr, (struct rt6_info *)skb_dst (skb)); +ipv6_select_ident (fptr, + rt ? &rt->rt6i_dst.addr : &ipv6_hdr (skb)->daddr);/* Fragment the skb. ipv6 header and the remaining fields of the * fragment header are updated in ipv6_gso_segment()
sound/soc/codecs/wm8753.c +2 -2
@@ -1454,8 +1454,8 @@ static int wm8753_probe(struct snd_soc_codec *codec)/* set the update bits */ snd_soc_update_bits (codec,WM8753_LDAC ,0x0100 ,0x0100 );snd_soc_update_bits (codec,WM8753_RDAC ,0x0100 ,0x0100 ); -snd_soc_update_bits (codec,WM8753_LDAC ,0x0100 ,0x0100 ); -snd_soc_update_bits (codec,WM8753_RDAC ,0x0100 ,0x0100 ); +snd_soc_update_bits (codec,WM8753_LADC ,0x0100 ,0x0100 ); +snd_soc_update_bits (codec,WM8753_RADC ,0x0100 ,0x0100 );snd_soc_update_bits (codec,WM8753_LOUT1V ,0x0100 ,0x0100 );snd_soc_update_bits (codec,WM8753_ROUT1V ,0x0100 ,0x0100 );snd_soc_update_bits (codec,WM8753_LOUT2V ,0x0100 ,0x0100 );
sound/soc/pxa/zylonite.c +4 -4
@@ -196,20 +196,20 @@ static int zylonite_probe(struct snd_soc_card *card)if (clk_pout) { pout =clk_get (NULL ,"CLK_POUT" );if (IS_ERR (pout)) { -dev_err (&pdev->dev,"Unable to obtain CLK_POUT: %ld\n" , +dev_err (card->dev,"Unable to obtain CLK_POUT: %ld\n" ,PTR_ERR (pout));return PTR_ERR (pout); } ret =clk_enable (pout);if (ret !=0 ) { -dev_err (&pdev->dev,"Unable to enable CLK_POUT: %d\n" , +dev_err (card->dev,"Unable to enable CLK_POUT: %d\n" , ret);clk_put (pout);return ret; } -dev_dbg (&pdev->dev,"MCLK enabled at %luHz\n" , +dev_dbg (card->dev,"MCLK enabled at %luHz\n" ,clk_get_rate (pout)); }
@@ -241,7 +241,7 @@ static int zylonite_resume_pre(struct snd_soc_card *card)if (clk_pout) { ret =clk_enable (pout);if (ret !=0 ) -dev_err (&pdev->dev,"Unable to enable CLK_POUT: %d\n" , +dev_err (card->dev,"Unable to enable CLK_POUT: %d\n" , ret); }