Commit 9ee4d7a6 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'akpm' (patches from Andrew Morton)

Merge leftovers from Andrew Morton:
 "A few leftovers: ocfs2, gcov, RTC"

* emailed patches from Andrew Morton <akpm@linux-foundation.org>:
  rtc: s5m: consolidate two device type switch statements
  rtc: s5m: add support for S2MPS14 RTC
  rtc: s5m: support different register layout
  rtc: s5m: use shorter time of register update
  rtc: s5m: remove undocumented time init on first boot
  mfd/rtc: sec/s5m: rename SEC* symbols to S5M
  gcov: add support for GCC 4.9
  ocfs2/o2net: incorrect to terminate accepting connections loop upon rejecting an invalid one
parents dbd1abb2 a0347f20
...@@ -530,11 +530,11 @@ config RTC_DRV_RV3029C2 ...@@ -530,11 +530,11 @@ config RTC_DRV_RV3029C2
will be called rtc-rv3029c2. will be called rtc-rv3029c2.
config RTC_DRV_S5M config RTC_DRV_S5M
tristate "Samsung S5M series" tristate "Samsung S2M/S5M series"
depends on MFD_SEC_CORE depends on MFD_SEC_CORE
help help
If you say yes here you will get support for the If you say yes here you will get support for the
RTC of Samsung S5M PMIC series. RTC of Samsung S2MPS14 and S5M PMIC series.
This driver can also be built as a module. If so, the module This driver can also be built as a module. If so, the module
will be called rtc-s5m. will be called rtc-s5m.
......
This diff is collapsed.
...@@ -1799,7 +1799,7 @@ int o2net_register_hb_callbacks(void) ...@@ -1799,7 +1799,7 @@ int o2net_register_hb_callbacks(void)
/* ------------------------------------------------------------ */ /* ------------------------------------------------------------ */
static int o2net_accept_one(struct socket *sock) static int o2net_accept_one(struct socket *sock, int *more)
{ {
int ret, slen; int ret, slen;
struct sockaddr_in sin; struct sockaddr_in sin;
...@@ -1810,6 +1810,7 @@ static int o2net_accept_one(struct socket *sock) ...@@ -1810,6 +1810,7 @@ static int o2net_accept_one(struct socket *sock)
struct o2net_node *nn; struct o2net_node *nn;
BUG_ON(sock == NULL); BUG_ON(sock == NULL);
*more = 0;
ret = sock_create_lite(sock->sk->sk_family, sock->sk->sk_type, ret = sock_create_lite(sock->sk->sk_family, sock->sk->sk_type,
sock->sk->sk_protocol, &new_sock); sock->sk->sk_protocol, &new_sock);
if (ret) if (ret)
...@@ -1821,6 +1822,7 @@ static int o2net_accept_one(struct socket *sock) ...@@ -1821,6 +1822,7 @@ static int o2net_accept_one(struct socket *sock)
if (ret < 0) if (ret < 0)
goto out; goto out;
*more = 1;
new_sock->sk->sk_allocation = GFP_ATOMIC; new_sock->sk->sk_allocation = GFP_ATOMIC;
ret = o2net_set_nodelay(new_sock); ret = o2net_set_nodelay(new_sock);
...@@ -1919,11 +1921,36 @@ static int o2net_accept_one(struct socket *sock) ...@@ -1919,11 +1921,36 @@ static int o2net_accept_one(struct socket *sock)
return ret; return ret;
} }
/*
* This function is invoked in response to one or more
* pending accepts at softIRQ level. We must drain the
* entire que before returning.
*/
static void o2net_accept_many(struct work_struct *work) static void o2net_accept_many(struct work_struct *work)
{ {
struct socket *sock = o2net_listen_sock; struct socket *sock = o2net_listen_sock;
while (o2net_accept_one(sock) == 0) int more;
int err;
/*
* It is critical to note that due to interrupt moderation
* at the network driver level, we can't assume to get a
* softIRQ for every single conn since tcp SYN packets
* can arrive back-to-back, and therefore many pending
* accepts may result in just 1 softIRQ. If we terminate
* the o2net_accept_one() loop upon seeing an err, what happens
* to the rest of the conns in the queue? If no new SYN
* arrives for hours, no softIRQ will be delivered,
* and the connections will just sit in the queue.
*/
for (;;) {
err = o2net_accept_one(sock, &more);
if (!more)
break;
cond_resched(); cond_resched();
}
} }
static void o2net_listen_data_ready(struct sock *sk) static void o2net_listen_data_ready(struct sock *sk)
......
...@@ -18,38 +18,38 @@ ...@@ -18,38 +18,38 @@
#ifndef __LINUX_MFD_SEC_RTC_H #ifndef __LINUX_MFD_SEC_RTC_H
#define __LINUX_MFD_SEC_RTC_H #define __LINUX_MFD_SEC_RTC_H
enum sec_rtc_reg { enum s5m_rtc_reg {
SEC_RTC_SEC, S5M_RTC_SEC,
SEC_RTC_MIN, S5M_RTC_MIN,
SEC_RTC_HOUR, S5M_RTC_HOUR,
SEC_RTC_WEEKDAY, S5M_RTC_WEEKDAY,
SEC_RTC_DATE, S5M_RTC_DATE,
SEC_RTC_MONTH, S5M_RTC_MONTH,
SEC_RTC_YEAR1, S5M_RTC_YEAR1,
SEC_RTC_YEAR2, S5M_RTC_YEAR2,
SEC_ALARM0_SEC, S5M_ALARM0_SEC,
SEC_ALARM0_MIN, S5M_ALARM0_MIN,
SEC_ALARM0_HOUR, S5M_ALARM0_HOUR,
SEC_ALARM0_WEEKDAY, S5M_ALARM0_WEEKDAY,
SEC_ALARM0_DATE, S5M_ALARM0_DATE,
SEC_ALARM0_MONTH, S5M_ALARM0_MONTH,
SEC_ALARM0_YEAR1, S5M_ALARM0_YEAR1,
SEC_ALARM0_YEAR2, S5M_ALARM0_YEAR2,
SEC_ALARM1_SEC, S5M_ALARM1_SEC,
SEC_ALARM1_MIN, S5M_ALARM1_MIN,
SEC_ALARM1_HOUR, S5M_ALARM1_HOUR,
SEC_ALARM1_WEEKDAY, S5M_ALARM1_WEEKDAY,
SEC_ALARM1_DATE, S5M_ALARM1_DATE,
SEC_ALARM1_MONTH, S5M_ALARM1_MONTH,
SEC_ALARM1_YEAR1, S5M_ALARM1_YEAR1,
SEC_ALARM1_YEAR2, S5M_ALARM1_YEAR2,
SEC_ALARM0_CONF, S5M_ALARM0_CONF,
SEC_ALARM1_CONF, S5M_ALARM1_CONF,
SEC_RTC_STATUS, S5M_RTC_STATUS,
SEC_WTSR_SMPL_CNTL, S5M_WTSR_SMPL_CNTL,
SEC_RTC_UDR_CON, S5M_RTC_UDR_CON,
SEC_RTC_REG_MAX, S5M_RTC_REG_MAX,
}; };
enum s2mps_rtc_reg { enum s2mps_rtc_reg {
...@@ -88,9 +88,9 @@ enum s2mps_rtc_reg { ...@@ -88,9 +88,9 @@ enum s2mps_rtc_reg {
#define HOUR_12 (1 << 7) #define HOUR_12 (1 << 7)
#define HOUR_AMPM (1 << 6) #define HOUR_AMPM (1 << 6)
#define HOUR_PM (1 << 5) #define HOUR_PM (1 << 5)
#define ALARM0_STATUS (1 << 1) #define S5M_ALARM0_STATUS (1 << 1)
#define ALARM1_STATUS (1 << 2) #define S5M_ALARM1_STATUS (1 << 2)
#define UPDATE_AD (1 << 0) #define S5M_UPDATE_AD (1 << 0)
#define S2MPS_ALARM0_STATUS (1 << 2) #define S2MPS_ALARM0_STATUS (1 << 2)
#define S2MPS_ALARM1_STATUS (1 << 1) #define S2MPS_ALARM1_STATUS (1 << 1)
...@@ -101,16 +101,26 @@ enum s2mps_rtc_reg { ...@@ -101,16 +101,26 @@ enum s2mps_rtc_reg {
#define MODEL24_SHIFT 1 #define MODEL24_SHIFT 1
#define MODEL24_MASK (1 << MODEL24_SHIFT) #define MODEL24_MASK (1 << MODEL24_SHIFT)
/* RTC Update Register1 */ /* RTC Update Register1 */
#define RTC_UDR_SHIFT 0 #define S5M_RTC_UDR_SHIFT 0
#define RTC_UDR_MASK (1 << RTC_UDR_SHIFT) #define S5M_RTC_UDR_MASK (1 << S5M_RTC_UDR_SHIFT)
#define S2MPS_RTC_WUDR_SHIFT 4 #define S2MPS_RTC_WUDR_SHIFT 4
#define S2MPS_RTC_WUDR_MASK (1 << S2MPS_RTC_WUDR_SHIFT) #define S2MPS_RTC_WUDR_MASK (1 << S2MPS_RTC_WUDR_SHIFT)
#define S2MPS_RTC_RUDR_SHIFT 0 #define S2MPS_RTC_RUDR_SHIFT 0
#define S2MPS_RTC_RUDR_MASK (1 << S2MPS_RTC_RUDR_SHIFT) #define S2MPS_RTC_RUDR_MASK (1 << S2MPS_RTC_RUDR_SHIFT)
#define RTC_TCON_SHIFT 1 #define RTC_TCON_SHIFT 1
#define RTC_TCON_MASK (1 << RTC_TCON_SHIFT) #define RTC_TCON_MASK (1 << RTC_TCON_SHIFT)
#define RTC_TIME_EN_SHIFT 3 #define S5M_RTC_TIME_EN_SHIFT 3
#define RTC_TIME_EN_MASK (1 << RTC_TIME_EN_SHIFT) #define S5M_RTC_TIME_EN_MASK (1 << S5M_RTC_TIME_EN_SHIFT)
/*
* UDR_T field in S5M_RTC_UDR_CON register determines the time needed
* for updating alarm and time registers. Default is 7.32 ms.
*/
#define S5M_RTC_UDR_T_SHIFT 6
#define S5M_RTC_UDR_T_MASK (0x3 << S5M_RTC_UDR_T_SHIFT)
#define S5M_RTC_UDR_T_7320_US (0x0 << S5M_RTC_UDR_T_SHIFT)
#define S5M_RTC_UDR_T_1830_US (0x1 << S5M_RTC_UDR_T_SHIFT)
#define S5M_RTC_UDR_T_3660_US (0x2 << S5M_RTC_UDR_T_SHIFT)
#define S5M_RTC_UDR_T_450_US (0x3 << S5M_RTC_UDR_T_SHIFT)
/* RTC Hour register */ /* RTC Hour register */
#define HOUR_PM_SHIFT 6 #define HOUR_PM_SHIFT 6
......
...@@ -85,6 +85,12 @@ void __gcov_merge_ior(gcov_type *counters, unsigned int n_counters) ...@@ -85,6 +85,12 @@ void __gcov_merge_ior(gcov_type *counters, unsigned int n_counters)
} }
EXPORT_SYMBOL(__gcov_merge_ior); EXPORT_SYMBOL(__gcov_merge_ior);
void __gcov_merge_time_profile(gcov_type *counters, unsigned int n_counters)
{
/* Unused. */
}
EXPORT_SYMBOL(__gcov_merge_time_profile);
/** /**
* gcov_enable_events - enable event reporting through gcov_event() * gcov_enable_events - enable event reporting through gcov_event()
* *
......
...@@ -18,7 +18,12 @@ ...@@ -18,7 +18,12 @@
#include <linux/vmalloc.h> #include <linux/vmalloc.h>
#include "gcov.h" #include "gcov.h"
#if __GNUC__ == 4 && __GNUC_MINOR__ >= 9
#define GCOV_COUNTERS 9
#else
#define GCOV_COUNTERS 8 #define GCOV_COUNTERS 8
#endif
#define GCOV_TAG_FUNCTION_LENGTH 3 #define GCOV_TAG_FUNCTION_LENGTH 3
static struct gcov_info *gcov_info_head; static struct gcov_info *gcov_info_head;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment