From mboxrd@z Thu Jan 1 00:00:00 1970 From: Sebastian Andrzej Siewior Subject: [ANNOUNCE] 3.10.6-rt3 Date: Mon, 12 Aug 2013 18:34:13 +0200 Message-ID: <20130812163413.GI23040@linutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: LKML , Thomas Gleixner , rostedt@goodmis.org, John Kacur To: linux-rt-users Return-path: Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-Id: linux-rt-users.vger.kernel.org Dear RT folks! I'm pleased to announce the v3.10.6-rt3 patch set. Changes since v3.10.6-rt2 - the queue can be imported with git quiltimport - powerpc compiles again. Thanks to Paul Gortmaker for the patch. - added three patches from v3.8 which fall the wagon on their way to 3.10. One of them enables RT-FULL on ARM :) - removed all cpsw patches from the queue. They made it upstream. My nfsboot setup seems not to work, lets look at this later. - make arm/spear compile. Thanks to Felipe Balbi for the patch. - Add a patch from Corey Minyard to no longer use deprecated CONFIG_NO_HZ. - add the one patch which I added to the last 3.8-rt to get get list_bl work again on !SMP && !DEBUG_SPINLOCK - Spell "preemptible" properly in "Preemptible Kernel (Basic RT)" menu item. Thanks to Uwe Kleine-K=C3=B6nig for the patch. - a patch from John Kacur to avoid a warning in the hpsa. - a patch for the ppc5200 where the compiler thinks a variable isn't initialized and stops compililing due to -Werror Known issues: - SLAB support not working - The cpsw network driver shows some issues. - ARM & PPC don't fall apart once booted. More testing doesn't hurt. - bcache with CONFIG_DEBUG_LOCK_ALLOC enabled does not compile. The delta patch against v3.10.6-rt2 is appended below and can be found here: https://www.kernel.org/pub/linux/kernel/projects/rt/3.10/incr/patch-3= =2E10.6-rt2-rt3.patch.xz The RT patch against 3.10.6 can be found here: https://www.kernel.org/pub/linux/kernel/projects/rt/3.10/patch-3.10.6= -rt3.patch.xz The split quilt queue is available at: https://www.kernel.org/pub/linux/kernel/projects/rt/3.10/patches-3.10= =2E6-rt3.tar.xz Sebastian diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 2ef0b69..b34ff02 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -19,6 +19,7 @@ config ARM select GENERIC_STRNCPY_FROM_USER select GENERIC_STRNLEN_USER select HARDIRQS_SW_RESEND + select IRQ_FORCED_THREADING select HAVE_ARCH_JUMP_LABEL if !XIP_KERNEL select HAVE_ARCH_KGDB select HAVE_ARCH_SECCOMP_FILTER diff --git a/arch/arm/kernel/perf_event_cpu.c b/arch/arm/kernel/perf_ev= ent_cpu.c index 1f2740e..b32b043 100644 --- a/arch/arm/kernel/perf_event_cpu.c +++ b/arch/arm/kernel/perf_event_cpu.c @@ -118,7 +118,8 @@ static int cpu_pmu_request_irq(struct arm_pmu *cpu_= pmu, irq_handler_t handler) continue; } =20 - err =3D request_irq(irq, handler, IRQF_NOBALANCING, "arm-pmu", + err =3D request_irq(irq, handler, + IRQF_NOBALANCING | IRQF_NO_THREAD, "arm-pmu", cpu_pmu); if (err) { pr_err("unable to request IRQ%d for ARM PMU counters\n", diff --git a/arch/arm/mach-spear/platsmp.c b/arch/arm/mach-spear/platsm= p.c index 382eef6..ec5437d 100644 --- a/arch/arm/mach-spear/platsmp.c +++ b/arch/arm/mach-spear/platsmp.c @@ -20,7 +20,7 @@ #include #include "generic.h" =20 -static DEFINE_SPINLOCK(boot_lock); +static DEFINE_RAW_SPINLOCK(boot_lock); =20 static void __iomem *scu_base =3D IOMEM(VA_SCU_BASE); =20 diff --git a/arch/powerpc/include/asm/thread_info.h b/arch/powerpc/incl= ude/asm/thread_info.h index 2469444..f50711f 100644 --- a/arch/powerpc/include/asm/thread_info.h +++ b/arch/powerpc/include/asm/thread_info.h @@ -92,8 +92,7 @@ static inline struct thread_info *current_thread_info= (void) #define TIF_SYSCALL_TRACE 0 /* syscall trace active */ #define TIF_SIGPENDING 1 /* signal pending */ #define TIF_NEED_RESCHED 2 /* rescheduling necessary */ -#define TIF_POLLING_NRFLAG 3 /* true if poll_idle() is polling - TIF_NEED_RESCHED */ +#define TIF_NEED_RESCHED_LAZY 3 /* lazy rescheduling necessary */ #define TIF_32BIT 4 /* 32 bit binary */ #define TIF_PERFMON_WORK 5 /* work for pfm_handle_work() */ #define TIF_PERFMON_CTXSW 6 /* perfmon needs ctxsw calls */ @@ -109,7 +108,8 @@ static inline struct thread_info *current_thread_in= fo(void) #define TIF_EMULATE_STACK_STORE 16 /* Is an instruction emulation for stack store? */ #define TIF_MEMDIE 17 /* is terminating due to OOM killer */ -#define TIF_NEED_RESCHED_LAZY 18 /* lazy rescheduling necessary */ +#define TIF_POLLING_NRFLAG 18 /* true if poll_idle() is polling + TIF_NEED_RESCHED */ =20 /* as above, but as bit values */ #define _TIF_SYSCALL_TRACE (1<phy_name, MII_BUS_ID_SIZE, PHY_ID_FMT, mdio_bus_id, phy_id); =20 - priv->phy =3D phy_connect(dev, priv->phy_name, cpmac_adjust_link, 0, - PHY_INTERFACE_MODE_MII); + priv->phy =3D phy_connect(dev, priv->phy_name, cpmac_adjust_link, + PHY_INTERFACE_MODE_MII); =20 if (IS_ERR(priv->phy)) { if (netif_msg_drv(priv)) diff --git a/drivers/net/ethernet/ti/cpsw.c b/drivers/net/ethernet/ti/c= psw.c index c0dea7c..d1a769f 100644 --- a/drivers/net/ethernet/ti/cpsw.c +++ b/drivers/net/ethernet/ti/cpsw.c @@ -490,7 +490,7 @@ void cpsw_rx_handler(void *token, int len, int stat= us) skb_put(skb, len); cpts_rx_timestamp(priv->cpts, skb); skb->protocol =3D eth_type_trans(skb, ndev); - netif_rx(skb); + netif_receive_skb(skb); priv->stats.rx_bytes +=3D len; priv->stats.rx_packets++; } else { @@ -507,24 +507,19 @@ void cpsw_rx_handler(void *token, int len, int st= atus) static irqreturn_t cpsw_interrupt(int irq, void *dev_id) { struct cpsw_priv *priv =3D dev_id; - unsigned long flags; u32 rx, tx, rx_thresh; =20 - spin_lock_irqsave(&priv->lock, flags); rx_thresh =3D __raw_readl(&priv->wr_regs->rx_thresh_stat); rx =3D __raw_readl(&priv->wr_regs->rx_stat); tx =3D __raw_readl(&priv->wr_regs->tx_stat); - if (!rx_thresh && !rx && !tx) { - spin_unlock_irqrestore(&priv->lock, flags); + if (!rx_thresh && !rx && !tx) return IRQ_NONE; - } =20 cpsw_intr_disable(priv); if (priv->irq_enabled =3D=3D true) { cpsw_disable_irq(priv); priv->irq_enabled =3D false; } - spin_unlock_irqrestore(&priv->lock, flags); =20 if (netif_running(priv->ndev)) { napi_schedule(&priv->napi); @@ -546,9 +541,7 @@ static int cpsw_poll(struct napi_struct *napi, int = budget) { struct cpsw_priv *priv =3D napi_to_priv(napi); int num_tx, num_rx; - unsigned long flags; =20 - spin_lock_irqsave(&priv->lock, flags); num_tx =3D cpdma_chan_process(priv->txch, 128); if (num_tx) cpdma_ctlr_eoi(priv->dma, CPDMA_EOI_TX); @@ -824,7 +817,7 @@ static void cpsw_slave_open(struct cpsw_slave *slav= e, struct cpsw_priv *priv) 1 << slave_port, 0, 0, ALE_MCAST_FWD_2); =20 slave->phy =3D phy_connect(priv->ndev, slave->data->phy_id, - &cpsw_adjust_link, 0, slave->data->phy_if); + &cpsw_adjust_link, slave->data->phy_if); if (IS_ERR(slave->phy)) { dev_err(priv->dev, "phy %s not found on slave %d\n", slave->data->phy_id, slave->slave_num); @@ -1293,7 +1286,7 @@ static inline int cpsw_add_vlan_ale_entry(struct = cpsw_priv *priv, } =20 static int cpsw_ndo_vlan_rx_add_vid(struct net_device *ndev, - unsigned short vid) + __be16 proto, u16 vid) { struct cpsw_priv *priv =3D netdev_priv(ndev); =20 @@ -1305,7 +1298,7 @@ static int cpsw_ndo_vlan_rx_add_vid(struct net_de= vice *ndev, } =20 static int cpsw_ndo_vlan_rx_kill_vid(struct net_device *ndev, - unsigned short vid) + __be16 proto, u16 vid) { struct cpsw_priv *priv =3D netdev_priv(ndev); int ret; @@ -1466,12 +1459,8 @@ static int cpsw_probe_dt(struct cpsw_platform_da= ta *data, =20 if (of_property_read_u32(node, "active_slave", &prop)) { pr_err("Missing active_slave property in the DT.\n"); - if (of_property_read_u32(node, "cpts_active_slave", &prop)) { - ret =3D -EINVAL; - goto error_ret; - } else { - pr_err("Using old cpts_active_slave as fallback.\n"); - } + ret =3D -EINVAL; + goto error_ret; } data->active_slave =3D prop; =20 @@ -1644,7 +1633,7 @@ static int cpsw_probe_dual_emac(struct platform_d= evice *pdev, priv_sl2->irqs_table[i] =3D priv->irqs_table[i]; priv_sl2->num_irqs =3D priv->num_irqs; } - ndev->features |=3D NETIF_F_HW_VLAN_FILTER; + ndev->features |=3D NETIF_F_HW_VLAN_CTAG_FILTER; =20 ndev->netdev_ops =3D &cpsw_netdev_ops; SET_ETHTOOL_OPS(ndev, &cpsw_ethtool_ops); @@ -1883,7 +1872,7 @@ static int cpsw_probe(struct platform_device *pde= v) k++; } =20 - ndev->features |=3D NETIF_F_HW_VLAN_FILTER; + ndev->features |=3D NETIF_F_HW_VLAN_CTAG_FILTER; =20 ndev->netdev_ops =3D &cpsw_netdev_ops; SET_ETHTOOL_OPS(ndev, &cpsw_ethtool_ops); diff --git a/drivers/net/ethernet/ti/davinci_emac.c b/drivers/net/ether= net/ti/davinci_emac.c index 5aa9e4d..860e15d 100644 --- a/drivers/net/ethernet/ti/davinci_emac.c +++ b/drivers/net/ethernet/ti/davinci_emac.c @@ -1600,7 +1600,7 @@ static int emac_dev_open(struct net_device *ndev) =20 if (priv->phy_id && *priv->phy_id) { priv->phydev =3D phy_connect(ndev, priv->phy_id, - &emac_adjust_link, 0, + &emac_adjust_link, PHY_INTERFACE_MODE_MII); =20 if (IS_ERR(priv->phydev)) { diff --git a/drivers/scsi/hpsa.c b/drivers/scsi/hpsa.c index 7f4f790..4e19267 100644 --- a/drivers/scsi/hpsa.c +++ b/drivers/scsi/hpsa.c @@ -583,7 +583,7 @@ static void set_performant_mode(struct ctlr_info *h= , struct CommandList *c) c->busaddr |=3D 1 | (h->blockFetchTable[c->Header.SGList] << 1); if (likely(h->msix_vector)) c->Header.ReplyQueue =3D - smp_processor_id() % h->nreply_queues; + raw_smp_processor_id() % h->nreply_queues; } } =20 diff --git a/include/linux/list_bl.h b/include/linux/list_bl.h index 0ab40b6..d8876a0 100644 --- a/include/linux/list_bl.h +++ b/include/linux/list_bl.h @@ -131,8 +131,10 @@ static inline void hlist_bl_lock(struct hlist_bl_h= ead *b) bit_spin_lock(0, (unsigned long *)b); #else raw_spin_lock(&b->lock); +#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) __set_bit(0, (unsigned long *)b); #endif +#endif } =20 static inline void hlist_bl_unlock(struct hlist_bl_head *b) @@ -140,7 +142,9 @@ static inline void hlist_bl_unlock(struct hlist_bl_= head *b) #ifndef CONFIG_PREEMPT_RT_BASE __bit_spin_unlock(0, (unsigned long *)b); #else +#if defined(CONFIG_SMP) || defined(CONFIG_DEBUG_SPINLOCK) __clear_bit(0, (unsigned long *)b); +#endif raw_spin_unlock(&b->lock); #endif } diff --git a/kernel/Kconfig.preempt b/kernel/Kconfig.preempt index 38cecfe..11dbe26 100644 --- a/kernel/Kconfig.preempt +++ b/kernel/Kconfig.preempt @@ -70,7 +70,7 @@ config PREEMPT_RTB select PREEMPT_RT_BASE help This option is basically the same as (Low-Latency Desktop) but - enables changes which are preliminary for the full preemptiple + enables changes which are preliminary for the full preemptible RT kernel. =20 config PREEMPT_RT_FULL diff --git a/kernel/softirq.c b/kernel/softirq.c index db2fe2b..3298e55 100644 --- a/kernel/softirq.c +++ b/kernel/softirq.c @@ -64,7 +64,7 @@ char *softirq_to_name[NR_SOFTIRQS] =3D { "TASKLET", "SCHED", "HRTIMER", "RCU" }; =20 -#ifdef CONFIG_NO_HZ +#ifdef CONFIG_NO_HZ_COMMON # ifdef CONFIG_PREEMPT_RT_FULL =20 struct softirq_runner { @@ -151,7 +151,7 @@ void softirq_check_pending_idle(void) } # endif =20 -#else /* !NO_HZ */ +#else /* !CONFIG_NO_HZ_COMMON */ static inline void softirq_set_runner(unsigned int sirq) { } static inline void softirq_clr_runner(unsigned int sirq) { } #endif diff --git a/localversion-rt b/localversion-rt index c3054d0..1445cd6 100644 --- a/localversion-rt +++ b/localversion-rt @@ -1 +1 @@ --rt2 +-rt3