From: Greg KH <gregkh@suse.de>
To: linux-kernel@vger.kernel.org, stable@kernel.org
Cc: stable-review@kernel.org, torvalds@linux-foundation.org,
akpm@linux-foundation.org, alan@lxorguk.ukuu.org.uk,
Tilman Schmidt <tilman@imap.cc>,
"David S. Miller" <davem@davemloft.net>
Subject: [164/205] isdn/gigaset: correct CAPI connection state storage
Date: Fri, 30 Jul 2010 10:53:01 -0700 [thread overview]
Message-ID: <20100730175148.844568487@clark.site> (raw)
In-Reply-To: <20100730175238.GA3924@kroah.com>
2.6.34-stable review patch. If anyone has any objections, please let us know.
------------------
From: Tilman Schmidt <tilman@imap.cc>
commit 1b4843c5e8cbab86830da8a53b8288882060c059 upstream.
CAPI applications can handle several connections in parallel,
so one connection state per application isn't sufficient.
Store the connection state in the channel structure instead.
Impact: bugfix
Signed-off-by: Tilman Schmidt <tilman@imap.cc>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
---
drivers/isdn/gigaset/capi.c | 225 +++++++++++++++++++++++++++++++----------
drivers/isdn/gigaset/common.c | 4
drivers/isdn/gigaset/gigaset.h | 4
3 files changed, 180 insertions(+), 53 deletions(-)
--- a/drivers/isdn/gigaset/capi.c
+++ b/drivers/isdn/gigaset/capi.c
@@ -70,7 +70,7 @@
#define MAX_NUMBER_DIGITS 20
#define MAX_FMT_IE_LEN 20
-/* values for gigaset_capi_appl.connected */
+/* values for bcs->apconnstate */
#define APCONN_NONE 0 /* inactive/listening */
#define APCONN_SETUP 1 /* connecting */
#define APCONN_ACTIVE 2 /* B channel up */
@@ -84,7 +84,6 @@ struct gigaset_capi_appl {
u16 nextMessageNumber;
u32 listenInfoMask;
u32 listenCIPmask;
- int connected;
};
/* CAPI specific controller data structure */
@@ -395,7 +394,7 @@ void gigaset_skb_sent(struct bc_state *b
}
/* don't send further B3 messages if disconnected */
- if (ap->connected < APCONN_ACTIVE) {
+ if (bcs->apconnstate < APCONN_ACTIVE) {
gig_dbg(DEBUG_LLDATA, "disconnected, discarding ack");
return;
}
@@ -439,7 +438,7 @@ void gigaset_skb_rcvd(struct bc_state *b
}
/* don't send further B3 messages if disconnected */
- if (ap->connected < APCONN_ACTIVE) {
+ if (bcs->apconnstate < APCONN_ACTIVE) {
gig_dbg(DEBUG_LLDATA, "disconnected, discarding data");
dev_kfree_skb_any(skb);
return;
@@ -511,6 +510,7 @@ int gigaset_isdn_icall(struct at_state_t
u32 actCIPmask;
struct sk_buff *skb;
unsigned int msgsize;
+ unsigned long flags;
int i;
/*
@@ -635,7 +635,14 @@ int gigaset_isdn_icall(struct at_state_t
format_ie(iif->hcmsg.CalledPartyNumber));
/* scan application list for matching listeners */
- bcs->ap = NULL;
+ spin_lock_irqsave(&bcs->aplock, flags);
+ if (bcs->ap != NULL || bcs->apconnstate != APCONN_NONE) {
+ dev_warn(cs->dev, "%s: channel not properly cleared (%p/%d)\n",
+ __func__, bcs->ap, bcs->apconnstate);
+ bcs->ap = NULL;
+ bcs->apconnstate = APCONN_NONE;
+ }
+ spin_unlock_irqrestore(&bcs->aplock, flags);
actCIPmask = 1 | (1 << iif->hcmsg.CIPValue);
list_for_each_entry(ap, &iif->appls, ctrlist)
if (actCIPmask & ap->listenCIPmask) {
@@ -653,10 +660,12 @@ int gigaset_isdn_icall(struct at_state_t
dump_cmsg(DEBUG_CMD, __func__, &iif->hcmsg);
/* add to listeners on this B channel, update state */
+ spin_lock_irqsave(&bcs->aplock, flags);
ap->bcnext = bcs->ap;
bcs->ap = ap;
bcs->chstate |= CHS_NOTIFY_LL;
- ap->connected = APCONN_SETUP;
+ bcs->apconnstate = APCONN_SETUP;
+ spin_unlock_irqrestore(&bcs->aplock, flags);
/* emit message */
capi_ctr_handle_message(&iif->ctr, ap->id, skb);
@@ -681,7 +690,7 @@ static void send_disconnect_ind(struct b
struct gigaset_capi_ctr *iif = cs->iif;
struct sk_buff *skb;
- if (ap->connected == APCONN_NONE)
+ if (bcs->apconnstate == APCONN_NONE)
return;
capi_cmsg_header(&iif->hcmsg, ap->id, CAPI_DISCONNECT, CAPI_IND,
@@ -695,7 +704,6 @@ static void send_disconnect_ind(struct b
}
capi_cmsg2message(&iif->hcmsg, __skb_put(skb, CAPI_DISCONNECT_IND_LEN));
dump_cmsg(DEBUG_CMD, __func__, &iif->hcmsg);
- ap->connected = APCONN_NONE;
capi_ctr_handle_message(&iif->ctr, ap->id, skb);
}
@@ -712,9 +720,9 @@ static void send_disconnect_b3_ind(struc
struct sk_buff *skb;
/* nothing to do if no logical connection active */
- if (ap->connected < APCONN_ACTIVE)
+ if (bcs->apconnstate < APCONN_ACTIVE)
return;
- ap->connected = APCONN_SETUP;
+ bcs->apconnstate = APCONN_SETUP;
capi_cmsg_header(&iif->hcmsg, ap->id, CAPI_DISCONNECT_B3, CAPI_IND,
ap->nextMessageNumber++,
@@ -741,14 +749,25 @@ void gigaset_isdn_connD(struct bc_state
{
struct cardstate *cs = bcs->cs;
struct gigaset_capi_ctr *iif = cs->iif;
- struct gigaset_capi_appl *ap = bcs->ap;
+ struct gigaset_capi_appl *ap;
struct sk_buff *skb;
unsigned int msgsize;
+ unsigned long flags;
+ spin_lock_irqsave(&bcs->aplock, flags);
+ ap = bcs->ap;
if (!ap) {
+ spin_unlock_irqrestore(&bcs->aplock, flags);
dev_err(cs->dev, "%s: no application\n", __func__);
return;
}
+ if (bcs->apconnstate == APCONN_NONE) {
+ spin_unlock_irqrestore(&bcs->aplock, flags);
+ dev_warn(cs->dev, "%s: application %u not connected\n",
+ __func__, ap->id);
+ return;
+ }
+ spin_unlock_irqrestore(&bcs->aplock, flags);
while (ap->bcnext) {
/* this should never happen */
dev_warn(cs->dev, "%s: dropping extra application %u\n",
@@ -757,11 +776,6 @@ void gigaset_isdn_connD(struct bc_state
CapiCallGivenToOtherApplication);
ap->bcnext = ap->bcnext->bcnext;
}
- if (ap->connected == APCONN_NONE) {
- dev_warn(cs->dev, "%s: application %u not connected\n",
- __func__, ap->id);
- return;
- }
/* prepare CONNECT_ACTIVE_IND message
* Note: LLC not supported by device
@@ -799,17 +813,24 @@ void gigaset_isdn_connD(struct bc_state
void gigaset_isdn_hupD(struct bc_state *bcs)
{
struct gigaset_capi_appl *ap;
+ unsigned long flags;
/*
* ToDo: pass on reason code reported by device
* (requires ev-layer state machine extension to collect
* ZCAU device reply)
*/
- for (ap = bcs->ap; ap != NULL; ap = ap->bcnext) {
+ spin_lock_irqsave(&bcs->aplock, flags);
+ while (bcs->ap != NULL) {
+ ap = bcs->ap;
+ bcs->ap = ap->bcnext;
+ spin_unlock_irqrestore(&bcs->aplock, flags);
send_disconnect_b3_ind(bcs, ap);
send_disconnect_ind(bcs, ap, 0);
+ spin_lock_irqsave(&bcs->aplock, flags);
}
- bcs->ap = NULL;
+ bcs->apconnstate = APCONN_NONE;
+ spin_unlock_irqrestore(&bcs->aplock, flags);
}
/**
@@ -823,24 +844,21 @@ void gigaset_isdn_connB(struct bc_state
{
struct cardstate *cs = bcs->cs;
struct gigaset_capi_ctr *iif = cs->iif;
- struct gigaset_capi_appl *ap = bcs->ap;
+ struct gigaset_capi_appl *ap;
struct sk_buff *skb;
+ unsigned long flags;
unsigned int msgsize;
u8 command;
+ spin_lock_irqsave(&bcs->aplock, flags);
+ ap = bcs->ap;
if (!ap) {
+ spin_unlock_irqrestore(&bcs->aplock, flags);
dev_err(cs->dev, "%s: no application\n", __func__);
return;
}
- while (ap->bcnext) {
- /* this should never happen */
- dev_warn(cs->dev, "%s: dropping extra application %u\n",
- __func__, ap->bcnext->id);
- send_disconnect_ind(bcs, ap->bcnext,
- CapiCallGivenToOtherApplication);
- ap->bcnext = ap->bcnext->bcnext;
- }
- if (!ap->connected) {
+ if (!bcs->apconnstate) {
+ spin_unlock_irqrestore(&bcs->aplock, flags);
dev_warn(cs->dev, "%s: application %u not connected\n",
__func__, ap->id);
return;
@@ -852,13 +870,26 @@ void gigaset_isdn_connB(struct bc_state
* CONNECT_B3_ACTIVE_IND in reply to CONNECT_B3_RESP
* Parameters in both cases always: NCCI = 1, NCPI empty
*/
- if (ap->connected >= APCONN_ACTIVE) {
+ if (bcs->apconnstate >= APCONN_ACTIVE) {
command = CAPI_CONNECT_B3_ACTIVE;
msgsize = CAPI_CONNECT_B3_ACTIVE_IND_BASELEN;
} else {
command = CAPI_CONNECT_B3;
msgsize = CAPI_CONNECT_B3_IND_BASELEN;
}
+ bcs->apconnstate = APCONN_ACTIVE;
+
+ spin_unlock_irqrestore(&bcs->aplock, flags);
+
+ while (ap->bcnext) {
+ /* this should never happen */
+ dev_warn(cs->dev, "%s: dropping extra application %u\n",
+ __func__, ap->bcnext->id);
+ send_disconnect_ind(bcs, ap->bcnext,
+ CapiCallGivenToOtherApplication);
+ ap->bcnext = ap->bcnext->bcnext;
+ }
+
capi_cmsg_header(&iif->hcmsg, ap->id, command, CAPI_IND,
ap->nextMessageNumber++,
iif->ctr.cnr | ((bcs->channel + 1) << 8) | (1 << 16));
@@ -869,7 +900,6 @@ void gigaset_isdn_connB(struct bc_state
}
capi_cmsg2message(&iif->hcmsg, __skb_put(skb, msgsize));
dump_cmsg(DEBUG_CMD, __func__, &iif->hcmsg);
- ap->connected = APCONN_ACTIVE;
capi_ctr_handle_message(&iif->ctr, ap->id, skb);
}
@@ -975,6 +1005,61 @@ static void gigaset_register_appl(struct
ap->rp = *rp;
list_add(&ap->ctrlist, &iif->appls);
+ dev_info(cs->dev, "application %u registered\n", ap->id);
+}
+
+/*
+ * remove CAPI application from channel
+ * helper function to keep indentation levels down and stay in 80 columns
+ */
+
+static inline void remove_appl_from_channel(struct bc_state *bcs,
+ struct gigaset_capi_appl *ap)
+{
+ struct cardstate *cs = bcs->cs;
+ struct gigaset_capi_appl *bcap;
+ unsigned long flags;
+ int prevconnstate;
+
+ spin_lock_irqsave(&bcs->aplock, flags);
+ bcap = bcs->ap;
+ if (bcap == NULL) {
+ spin_unlock_irqrestore(&bcs->aplock, flags);
+ return;
+ }
+
+ /* check first application on channel */
+ if (bcap == ap) {
+ bcs->ap = ap->bcnext;
+ if (bcs->ap != NULL) {
+ spin_unlock_irqrestore(&bcs->aplock, flags);
+ return;
+ }
+
+ /* none left, clear channel state */
+ prevconnstate = bcs->apconnstate;
+ bcs->apconnstate = APCONN_NONE;
+ spin_unlock_irqrestore(&bcs->aplock, flags);
+
+ if (prevconnstate == APCONN_ACTIVE) {
+ dev_notice(cs->dev, "%s: hanging up channel %u\n",
+ __func__, bcs->channel);
+ gigaset_add_event(cs, &bcs->at_state,
+ EV_HUP, NULL, 0, NULL);
+ gigaset_schedule_event(cs);
+ }
+ return;
+ }
+
+ /* check remaining list */
+ do {
+ if (bcap->bcnext == ap) {
+ bcap->bcnext = bcap->bcnext->bcnext;
+ return;
+ }
+ bcap = bcap->bcnext;
+ } while (bcap != NULL);
+ spin_unlock_irqrestore(&bcs->aplock, flags);
}
/*
@@ -986,19 +1071,19 @@ static void gigaset_release_appl(struct
= container_of(ctr, struct gigaset_capi_ctr, ctr);
struct cardstate *cs = iif->ctr.driverdata;
struct gigaset_capi_appl *ap, *tmp;
+ unsigned ch;
list_for_each_entry_safe(ap, tmp, &iif->appls, ctrlist)
if (ap->id == appl) {
- if (ap->connected != APCONN_NONE) {
- dev_err(cs->dev,
- "%s: application %u still connected\n",
- __func__, ap->id);
- /* ToDo: clear active connection */
- }
+ /* remove from any channels */
+ for (ch = 0; ch < cs->channels; ch++)
+ remove_appl_from_channel(&cs->bcs[ch], ap);
+
+ /* remove from registration list */
list_del(&ap->ctrlist);
kfree(ap);
+ dev_info(cs->dev, "application %u released\n", appl);
}
-
}
/*
@@ -1177,6 +1262,7 @@ static void do_connect_req(struct gigase
char **commands;
char *s;
u8 *pp;
+ unsigned long flags;
int i, l, lbc, lhlc;
u16 info;
@@ -1192,8 +1278,15 @@ static void do_connect_req(struct gigase
send_conf(iif, ap, skb, CapiNoPlciAvailable);
return;
}
+ spin_lock_irqsave(&bcs->aplock, flags);
+ if (bcs->ap != NULL || bcs->apconnstate != APCONN_NONE)
+ dev_warn(cs->dev, "%s: channel not properly cleared (%p/%d)\n",
+ __func__, bcs->ap, bcs->apconnstate);
ap->bcnext = NULL;
bcs->ap = ap;
+ bcs->apconnstate = APCONN_SETUP;
+ spin_unlock_irqrestore(&bcs->aplock, flags);
+
bcs->rx_bufsize = ap->rp.datablklen;
dev_kfree_skb(bcs->rx_skb);
gigaset_new_rx_skb(bcs);
@@ -1430,7 +1523,6 @@ static void do_connect_req(struct gigase
goto error;
}
gigaset_schedule_event(cs);
- ap->connected = APCONN_SETUP;
send_conf(iif, ap, skb, CapiSuccess);
return;
@@ -1458,6 +1550,7 @@ static void do_connect_resp(struct gigas
_cmsg *cmsg = &iif->acmsg;
struct bc_state *bcs;
struct gigaset_capi_appl *oap;
+ unsigned long flags;
int channel;
/* decode message */
@@ -1477,12 +1570,21 @@ static void do_connect_resp(struct gigas
switch (cmsg->Reject) {
case 0: /* Accept */
/* drop all competing applications, keep only this one */
- for (oap = bcs->ap; oap != NULL; oap = oap->bcnext)
- if (oap != ap)
+ spin_lock_irqsave(&bcs->aplock, flags);
+ while (bcs->ap != NULL) {
+ oap = bcs->ap;
+ bcs->ap = oap->bcnext;
+ if (oap != ap) {
+ spin_unlock_irqrestore(&bcs->aplock, flags);
send_disconnect_ind(bcs, oap,
CapiCallGivenToOtherApplication);
+ spin_lock_irqsave(&bcs->aplock, flags);
+ }
+ }
ap->bcnext = NULL;
bcs->ap = ap;
+ spin_unlock_irqrestore(&bcs->aplock, flags);
+
bcs->rx_bufsize = ap->rp.datablklen;
dev_kfree_skb(bcs->rx_skb);
gigaset_new_rx_skb(bcs);
@@ -1553,31 +1655,45 @@ static void do_connect_resp(struct gigas
send_disconnect_ind(bcs, ap, 0);
/* remove it from the list of listening apps */
+ spin_lock_irqsave(&bcs->aplock, flags);
if (bcs->ap == ap) {
bcs->ap = ap->bcnext;
- if (bcs->ap == NULL)
+ if (bcs->ap == NULL) {
/* last one: stop ev-layer hupD notifications */
+ bcs->apconnstate = APCONN_NONE;
bcs->chstate &= ~CHS_NOTIFY_LL;
+ }
+ spin_unlock_irqrestore(&bcs->aplock, flags);
return;
}
for (oap = bcs->ap; oap != NULL; oap = oap->bcnext) {
if (oap->bcnext == ap) {
oap->bcnext = oap->bcnext->bcnext;
+ spin_unlock_irqrestore(&bcs->aplock, flags);
return;
}
}
+ spin_unlock_irqrestore(&bcs->aplock, flags);
dev_err(cs->dev, "%s: application %u not found\n",
__func__, ap->id);
return;
default: /* Reject */
/* drop all competing applications, keep only this one */
- for (oap = bcs->ap; oap != NULL; oap = oap->bcnext)
- if (oap != ap)
+ spin_lock_irqsave(&bcs->aplock, flags);
+ while (bcs->ap != NULL) {
+ oap = bcs->ap;
+ bcs->ap = oap->bcnext;
+ if (oap != ap) {
+ spin_unlock_irqrestore(&bcs->aplock, flags);
send_disconnect_ind(bcs, oap,
CapiCallGivenToOtherApplication);
+ spin_lock_irqsave(&bcs->aplock, flags);
+ }
+ }
ap->bcnext = NULL;
bcs->ap = ap;
+ spin_unlock_irqrestore(&bcs->aplock, flags);
/* reject call - will trigger DISCONNECT_IND for this app */
dev_info(cs->dev, "%s: Reject=%x\n",
@@ -1600,6 +1716,7 @@ static void do_connect_b3_req(struct gig
{
struct cardstate *cs = iif->ctr.driverdata;
_cmsg *cmsg = &iif->acmsg;
+ struct bc_state *bcs;
int channel;
/* decode message */
@@ -1614,9 +1731,10 @@ static void do_connect_b3_req(struct gig
send_conf(iif, ap, skb, CapiIllContrPlciNcci);
return;
}
+ bcs = &cs->bcs[channel-1];
/* mark logical connection active */
- ap->connected = APCONN_ACTIVE;
+ bcs->apconnstate = APCONN_ACTIVE;
/* build NCCI: always 1 (one B3 connection only) */
cmsg->adr.adrNCCI |= 1 << 16;
@@ -1662,7 +1780,7 @@ static void do_connect_b3_resp(struct gi
if (cmsg->Reject) {
/* Reject: clear B3 connect received flag */
- ap->connected = APCONN_SETUP;
+ bcs->apconnstate = APCONN_SETUP;
/* trigger hangup, causing eventual DISCONNECT_IND */
if (!gigaset_add_event(cs, &bcs->at_state,
@@ -1734,11 +1852,11 @@ static void do_disconnect_req(struct gig
}
/* skip if DISCONNECT_IND already sent */
- if (!ap->connected)
+ if (!bcs->apconnstate)
return;
/* check for active logical connection */
- if (ap->connected >= APCONN_ACTIVE) {
+ if (bcs->apconnstate >= APCONN_ACTIVE) {
/*
* emit DISCONNECT_B3_IND with cause 0x3301
* use separate cmsg structure, as the content of iif->acmsg
@@ -1787,6 +1905,7 @@ static void do_disconnect_b3_req(struct
{
struct cardstate *cs = iif->ctr.driverdata;
_cmsg *cmsg = &iif->acmsg;
+ struct bc_state *bcs;
int channel;
/* decode message */
@@ -1802,17 +1921,17 @@ static void do_disconnect_b3_req(struct
send_conf(iif, ap, skb, CapiIllContrPlciNcci);
return;
}
+ bcs = &cs->bcs[channel-1];
/* reject if logical connection not active */
- if (ap->connected < APCONN_ACTIVE) {
+ if (bcs->apconnstate < APCONN_ACTIVE) {
send_conf(iif, ap, skb,
CapiMessageNotSupportedInCurrentState);
return;
}
/* trigger hangup, causing eventual DISCONNECT_B3_IND */
- if (!gigaset_add_event(cs, &cs->bcs[channel-1].at_state,
- EV_HUP, NULL, 0, NULL)) {
+ if (!gigaset_add_event(cs, &bcs->at_state, EV_HUP, NULL, 0, NULL)) {
send_conf(iif, ap, skb, CAPI_MSGOSRESOURCEERR);
return;
}
@@ -1833,6 +1952,7 @@ static void do_data_b3_req(struct gigase
struct sk_buff *skb)
{
struct cardstate *cs = iif->ctr.driverdata;
+ struct bc_state *bcs;
int channel = CAPIMSG_PLCI_PART(skb->data);
u16 ncci = CAPIMSG_NCCI_PART(skb->data);
u16 msglen = CAPIMSG_LEN(skb->data);
@@ -1855,6 +1975,7 @@ static void do_data_b3_req(struct gigase
send_conf(iif, ap, skb, CapiIllContrPlciNcci);
return;
}
+ bcs = &cs->bcs[channel-1];
if (msglen != CAPI_DATA_B3_REQ_LEN && msglen != CAPI_DATA_B3_REQ_LEN64)
dev_notice(cs->dev, "%s: unexpected length %d\n",
"DATA_B3_REQ", msglen);
@@ -1874,7 +1995,7 @@ static void do_data_b3_req(struct gigase
}
/* reject if logical connection not active */
- if (ap->connected < APCONN_ACTIVE) {
+ if (bcs->apconnstate < APCONN_ACTIVE) {
send_conf(iif, ap, skb, CapiMessageNotSupportedInCurrentState);
return;
}
@@ -1885,7 +2006,7 @@ static void do_data_b3_req(struct gigase
skb_pull(skb, msglen);
/* pass to device-specific module */
- if (cs->ops->send_skb(&cs->bcs[channel-1], skb) < 0) {
+ if (cs->ops->send_skb(bcs, skb) < 0) {
send_conf(iif, ap, skb, CAPI_MSGOSRESOURCEERR);
return;
}
--- a/drivers/isdn/gigaset/common.c
+++ b/drivers/isdn/gigaset/common.c
@@ -649,6 +649,10 @@ static struct bc_state *gigaset_initbcs(
for (i = 0; i < AT_NUM; ++i)
bcs->commands[i] = NULL;
+ spin_lock_init(&bcs->aplock);
+ bcs->ap = NULL;
+ bcs->apconnstate = 0;
+
gig_dbg(DEBUG_INIT, " setting up bcs[%d]->hw", channel);
if (cs->ops->initbcshw(bcs))
return bcs;
--- a/drivers/isdn/gigaset/gigaset.h
+++ b/drivers/isdn/gigaset/gigaset.h
@@ -403,7 +403,9 @@ struct bc_state {
struct bas_bc_state *bas; /* usb hardware driver (base) */
} hw;
- void *ap; /* LL application structure */
+ void *ap; /* associated LL application */
+ int apconnstate; /* LL application connection state */
+ spinlock_t aplock;
};
struct cardstate {
next prev parent reply other threads:[~2010-07-30 18:12 UTC|newest]
Thread overview: 206+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-07-30 17:52 [000/205] 2.6.34.2-rc1 stable review Greg KH
2010-07-30 17:50 ` [001/205] virtio-pci: disable msi at startup Greg KH
2010-07-30 17:50 ` [002/205] virtio: return ENOMEM on out of memory Greg KH
2010-07-30 17:50 ` [003/205] virtio_net: do not reschedule rx refill forever Greg KH
2010-07-30 17:50 ` [004/205] bridge: fdb cleanup runs too often Greg KH
2010-07-30 17:50 ` [005/205] net/dccp: expansion of error code size Greg KH
2010-07-30 17:50 ` [006/205] gro: Fix bogus gso_size on the first fraglist entry Greg KH
2010-07-30 17:50 ` [007/205] IPv6: fix Mobile IPv6 regression Greg KH
2010-07-30 17:50 ` [008/205] pegasus: fix USB device ID for ETX-US2 Greg KH
2010-07-30 17:50 ` [009/205] r8169: fix random mdio_write failures Greg KH
2010-07-30 17:50 ` [010/205] r8169: fix mdio_read and update mdio_write according to hw specs Greg KH
2010-07-30 17:50 ` [011/205] tcp: tcp_synack_options() fix Greg KH
2010-07-30 17:50 ` [012/205] tcp: use correct net ns in cookie_v4_check() Greg KH
2010-07-30 17:50 ` [013/205] usbnet: Set parent device early for netdev_printk() Greg KH
2010-07-30 17:50 ` [014/205] fix mis-applied upstream commit ac9721f3f54b27a16c7e1afb2481e7ee95a70318 Greg KH
2010-07-30 17:50 ` [015/205] ssb: Handle Netbook devices where the SPROM address is changed Greg KH
2010-07-30 17:50 ` [016/205] hwmon: (k8temp) Bypass core swapping on single-core processors Greg KH
2010-07-30 17:50 ` [017/205] hwmon: (k8temp) Fix temperature reporting for ASB1 processor revisions Greg KH
2010-07-30 17:50 ` [018/205] hwmon: (i5k_amb) Fix sysfs attribute for lockdep Greg KH
2010-07-30 17:50 ` [019/205] hwmon: (k10temp) Do not blacklist known working CPU models Greg KH
2010-07-30 17:50 ` [020/205] hwmon: (coretemp) Properly label the sensors Greg KH
2010-07-30 17:50 ` [021/205] hwmon: (coretemp) Skip duplicate CPU entries Greg KH
2010-07-30 17:50 ` [022/205] hwmon: (it87) Fix in7 on IT8720F Greg KH
2010-07-30 17:50 ` [023/205] cifs: remove bogus first_time check in NTLMv2 session setup code Greg KH
2010-07-30 17:50 ` [024/205] cifs: dont attempt busy-file rename unless its in same directory Greg KH
2010-07-30 17:50 ` [025/205] CIFS: Fix a malicious redirect problem in the DNS lookup code Greg KH
2010-07-30 17:50 ` [026/205] ALSA: hda - Dont check capture source mixer if no ADC is available Greg KH
2010-07-30 17:50 ` [027/205] ALSA: hda - Add Macbook 5,2 quirk Greg KH
2010-07-30 17:50 ` [028/205] ALSA: hda - Restore cleared pin controls on resume Greg KH
2010-07-30 17:50 ` [029/205] cpmac: do not leak struct net_device on phy_connect errors Greg KH
2010-07-30 17:50 ` [030/205] sky2: Restore multicast after restart Greg KH
2010-07-30 17:50 ` [031/205] sky2: enable rx/tx in sky2_phy_reinit() Greg KH
2010-07-30 17:50 ` [032/205] net: fix problem in reading sock TX queue Greg KH
2010-07-30 17:50 ` [033/205] tcp: fix crash in tcp_xmit_retransmit_queue Greg KH
2010-07-30 17:50 ` [034/205] net/core: neighbour update Oops Greg KH
2010-07-30 17:50 ` [035/205] math-emu: correct test for downshifting fraction in _FP_FROM_INT() Greg KH
2010-07-30 17:50 ` [036/205] cmd640: fix kernel oops in test_irq() method Greg KH
2010-07-30 17:50 ` [037/205] NFSv4: Fix an embarassing typo in encode_attrs() Greg KH
2010-07-30 17:50 ` [038/205] NFSv4: Ensure that /proc/self/mountinfo displays the minor version number Greg KH
2010-07-30 17:50 ` [039/205] SUNRPC: Fix a re-entrancy bug in xs_tcp_read_calldir() Greg KH
2010-07-30 17:50 ` [040/205] powerpc/5200: Fix build error in sound code Greg KH
2010-07-30 17:50 ` [041/205] ath9k: Avoid corrupt frames being forwarded to mac80211 Greg KH
2010-07-30 17:50 ` [042/205] hostap: Protect against initialization interrupt Greg KH
2010-07-30 17:51 ` [043/205] TPM: ReadPubEK output struct fix Greg KH
2010-07-30 17:51 ` [044/205] fb: fix colliding defines for fb flags Greg KH
2010-07-30 17:51 ` [045/205] iwlwifi: cancel scan watchdog in iwl_bg_abort_scan Greg KH
2010-07-30 17:51 ` [046/205] mac80211: do not wip out old supported rates Greg KH
2010-07-30 17:51 ` [047/205] Btrfs: fix checks in BTRFS_IOC_CLONE_RANGE Greg KH
2010-07-30 17:51 ` [048/205] ocfs2: No need to zero pages past i_size Greg KH
2010-07-30 17:51 ` [049/205] ocfs2: When zero extending, do it by page Greg KH
2010-07-30 17:51 ` [050/205] p54pci: add Symbol AP-300 minipci adapters pciid Greg KH
2010-07-30 17:51 ` [051/205] perf_events: Fix Intel Westmere event constraints Greg KH
2010-07-30 17:51 ` [052/205] dynamic debug: move ddebug_remove_module() down into free_module() Greg KH
2010-07-30 17:51 ` [053/205] drm/i915: fix hibernation since i915 self-reclaim fixes Greg KH
2010-07-30 17:51 ` [054/205] drm/i915: dont access FW_BLC_SELF on 965G Greg KH
2010-07-30 17:51 ` [055/205] drm/i915: add reclaimable to i915 self-reclaimable page allocations Greg KH
2010-07-30 17:51 ` [056/205] i915: fix lock imbalance on error path Greg KH
2010-07-30 17:51 ` [057/205] drm/i915: Define MI_ARB_STATE bits Greg KH
2010-07-30 17:51 ` [058/205] drm/i915: enable low power render writes on GEN3 hardware Greg KH
2010-07-30 17:51 ` [059/205] drm/i915: Make G4X-style PLL search more permissive Greg KH
2010-07-30 17:51 ` [060/205] drm/radeon/r200: handle more hw tex coord types Greg KH
2010-07-30 17:51 ` [061/205] drm/radeon/r100/r200: fix calculation of compressed cube maps Greg KH
2010-07-30 17:51 ` [062/205] drm/radeon/kms: fix DP after DPMS cycle Greg KH
2010-07-30 17:51 ` [063/205] drm/radeon/kms: CS checker texture fixes for r1xx/r2xx/r3xx Greg KH
2010-07-30 17:51 ` [064/205] drm/radeon/kms: fix shared ddc handling Greg KH
2010-07-30 17:51 ` [065/205] drm/radeon/kms: fix shared ddc harder Greg KH
2010-07-30 17:51 ` [066/205] drm/radeon/kms: add quirk for ASUS HD 3600 board Greg KH
2010-07-30 17:51 ` [067/205] drm/radeon/kms: fix possible mis-detection of sideport on rs690/rs740 Greg KH
2010-07-30 17:51 ` [068/205] drm/radeon/kms: fix legacy LVDS dpms sequence Greg KH
2010-07-30 17:51 ` [069/205] drm/radeon/kms: fix legacy tv-out pal mode Greg KH
2010-07-30 17:51 ` [070/205] tpm_tis: fix subsequent suspend failures Greg KH
2010-07-30 17:51 ` [071/205] IPv6: keep route for tentative address Greg KH
2010-07-30 17:51 ` [072/205] IPv6: only notify protocols if address is completely gone Greg KH
2010-07-30 17:51 ` [073/205] ipvs: Add missing locking during connection table hashing and unhashing Greg KH
2010-07-30 17:51 ` [074/205] ipv6: fix NULL reference in proxy neighbor discovery Greg KH
2010-07-30 17:51 ` [075/205] netfilter: ip6t_REJECT: fix a dst leak in ipv6 REJECT Greg KH
2010-07-30 17:51 ` [076/205] SCSI: aacraid: Eliminate use after free Greg KH
2010-07-30 17:51 ` [077/205] md: raid10: Fix null pointer dereference in fix_read_error() Greg KH
2010-07-30 17:51 ` [078/205] amd64-agp: Probe unknown AGP devices the right way Greg KH
2010-07-30 17:51 ` [079/205] amd64_edac: Fix syndrome calculation on K8 Greg KH
2010-07-30 17:51 ` [080/205] perf, x86: Fix incorrect branches event on AMD CPUs Greg KH
2010-07-30 17:51 ` [081/205] ARM: 6205/1: perf: ensure counter delta is treated as unsigned Greg KH
2010-07-30 17:51 ` [082/205] perf: Resurrect flat callchains Greg KH
2010-07-30 17:51 ` [083/205] x86: Send a SIGTRAP for user icebp traps Greg KH
2010-07-30 17:51 ` [084/205] x86: Fix vsyscall on gcc 4.5 with -Os Greg KH
2010-07-30 17:51 ` [085/205] x86, Calgary: Increase max PHB number Greg KH
2010-07-30 17:51 ` [086/205] x86, Calgary: Limit the max PHB number to 256 Greg KH
2010-07-30 17:51 ` [087/205] sched: Prevent compiler from optimising the sched_avg_update() loop Greg KH
2010-07-30 17:51 ` [088/205] ipmi: set schedule_timeout_wait() value back to one Greg KH
2010-07-30 17:51 ` [089/205] sched: Fix over-scheduling bug Greg KH
2010-07-30 17:51 ` [090/205] genirq: Deal with desc->set_type() changing desc->chip Greg KH
2010-07-30 17:51 ` [091/205] cfq: Dont allow queue merges for queues that have no process references Greg KH
2010-07-30 17:51 ` [092/205] sysvfs: fix NULL deref. when allocating new inode Greg KH
2010-07-30 17:51 ` [093/205] serial: cpm_uart: implement the cpm_uart_early_write() function for console poll Greg KH
2010-07-30 17:51 ` [094/205] um: os-linux/mem.c needs sys/stat.h Greg KH
2010-07-30 17:51 ` [095/205] compiler-gcc.h: gcc-4.5 needs noclone and noinline on __naked functions Greg KH
2010-07-30 17:51 ` [096/205] rtc: fix ds1388 time corruption Greg KH
2010-07-30 17:51 ` [097/205] ahci,ata_generic: let ata_generic handle new MBP w/ MCP89 Greg KH
2010-07-30 17:51 ` [098/205] ata_generic: implement ATA_GEN_* flags and force enable DMA on MBP 7,1 Greg KH
2010-07-30 17:51 ` [099/205] ethtool: Fix potential kernel buffer overflow in ETHTOOL_GRXCLSRLALL Greg KH
2010-07-30 17:51 ` [100/205] powerpc: Fix logic error in fixup_irqs Greg KH
2010-07-30 17:51 ` [101/205] powerpc/cpm: Reintroduce global spi_pram struct (fixes build issue) Greg KH
2010-07-30 17:51 ` [102/205] powerpc/cpm1: Fix build with various CONFIG_*_UCODE_PATCH combinations Greg KH
2010-07-30 17:52 ` [103/205] kmemleak: Add support for NO_BOOTMEM configurations Greg KH
2010-07-30 17:52 ` [104/205] sdhci-s3c: add missing remove function Greg KH
2010-07-30 17:52 ` [105/205] virtio_net: fix oom handling on tx Greg KH
2010-07-30 17:52 ` [106/205] virtio: fix oops on OOM Greg KH
2010-07-30 17:52 ` [107/205] edac: mpc85xx: fix MPC85xx dependency Greg KH
2010-07-30 17:52 ` [108/205] ASoC: Remove duplicate AUX definition from WM8776 Greg KH
2010-07-30 17:52 ` [109/205] x86,nobootmem: make alloc_bootmem_node fall back to other node when 32bit numa is used Greg KH
2010-07-30 17:52 ` [110/205] Input: gamecon - reference correct input device in NES mode Greg KH
2010-07-30 17:52 ` [111/205] Input: gamecon - reference correct pad in gc_psx_command() Greg KH
2010-07-30 17:52 ` [112/205] x86: Fix x2apic preenabled system with kexec Greg KH
2010-07-30 17:52 ` [113/205] IPoIB: Fix world-writable child interface control sysfs attributes Greg KH
2010-07-30 17:52 ` [114/205] Input: i8042 - add Gigabyte Spring Peak to dmi_noloop_table Greg KH
2010-07-30 17:52 ` [115/205] Input: twl40300-keypad - fix handling of "all ground" rows Greg KH
2010-07-30 17:52 ` [116/205] ARM: 6201/1: RealView: Do not use outer_sync() on ARM11MPCore boards with L220 Greg KH
2010-07-30 17:52 ` [117/205] ARM: 6211/1: atomic ops: fix register constraints for atomic64_add_unless Greg KH
2010-07-30 17:52 ` [118/205] ARM: 6212/1: atomic ops: add memory constraints to inline asm Greg KH
2010-07-30 17:52 ` [119/205] ARM: 6226/1: fix kprobe bug in ldr instruction emulation Greg KH
2010-07-30 17:52 ` [120/205] x86: Do not try to disable hpet if it hasnt been initialized before Greg KH
2010-07-30 17:52 ` [121/205] x86, pci, mrst: Add extra sanity check in walking the PCI extended cap chain Greg KH
2010-07-30 17:52 ` [122/205] x86: kprobes: fix swapped segment registers in kretprobe Greg KH
2010-07-30 17:52 ` [123/205] x86, i8259: Only register sysdev if we have a real 8259 PIC Greg KH
2010-07-30 17:52 ` [124/205] USB: dont enable remote wakeup by default Greg KH
2010-07-30 17:52 ` [125/205] USB: g_serial: dont set low_latency flag Greg KH
2010-07-30 17:52 ` [126/205] USB: g_serial: fix tty cleanup on unload Greg KH
2010-07-30 17:52 ` [127/205] usb: musb: Fix a bug by making suspend interrupt available in device mode Greg KH
2010-07-30 17:52 ` [128/205] USB: ehci-mxc: bail out on transceiver problems Greg KH
2010-07-30 17:52 ` [129/205] USB: obey the sysfs power/wakeup setting Greg KH
2010-07-30 17:52 ` [130/205] USB: musb_core: make disconnect and suspend interrupts work again Greg KH
2010-07-30 17:52 ` [131/205] USB: MUSB: make non-OMAP platforms build with CONFIG_PM=y Greg KH
2010-07-30 17:52 ` [132/205] USB: option: add support for 1da5:4518 Greg KH
2010-07-30 17:52 ` [133/205] USB: Add PID for Sierra 250U to drivers/usb/serial/sierra.c Greg KH
2010-07-30 17:52 ` [134/205] USB: ftdi_sio: support for Signalyzer tools based on FTDI chips Greg KH
2010-07-30 17:52 ` [135/205] USB: option: Add support for AMOI Skypephone S2 Greg KH
2010-07-30 17:52 ` [136/205] USB: Fix USB3.0 Port Speed Downgrade after port reset Greg KH
2010-07-30 17:52 ` [137/205] USB: adds Artisman USB dongle to list of quirky devices Greg KH
2010-07-30 17:52 ` [138/205] USB: sisusbvga: Fix for USB 3.0 Greg KH
2010-07-30 17:52 ` [139/205] USB: xhci: Set Mult field in endpoint context correctly Greg KH
2010-07-30 17:52 ` [140/205] USB: add quirk for Broadcom BT dongle Greg KH
2010-07-30 17:52 ` [141/205] USB: FTDI: Add support for the RT System VX-7 radio programming cable Greg KH
2010-07-30 17:52 ` [142/205] USB: musb: tusb6010: fix compile error with n8x0_defconfig Greg KH
2010-07-30 17:52 ` [143/205] drm/i915: gen3 page flipping fixes Greg KH
2010-07-30 17:52 ` [144/205] drm/i915: dont queue flips during a flip pending event Greg KH
2010-07-30 17:52 ` [145/205] drm/i915: Hold the spinlock whilst resetting unpin_work along error path Greg KH
2010-07-30 17:52 ` [146/205] drm/i915: handle shared framebuffers when flipping Greg KH
2010-07-30 17:52 ` [147/205] ethtool: Fix potential user buffer overflow for ETHTOOL_{G, S}RXFH Greg KH
2010-07-30 17:52 ` [148/205] KVM: MMU: Remove user access when allowing kernel access to gpte.w=0 page Greg KH
2010-07-30 17:52 ` [149/205] KVM: SVM: Handle MCEs early in the vmexit process Greg KH
2010-07-30 17:52 ` [150/205] KVM: SVM: Implement workaround for Erratum 383 Greg KH
2010-07-30 17:52 ` [151/205] KVM: MMU: invalidate and flush on spte small->large page size change Greg KH
2010-07-30 17:52 ` [152/205] KVM: read apic->irr with ioapic lock held Greg KH
2010-07-30 17:52 ` [153/205] splice: direct_splice_actor() should not use pos in sd Greg KH
2010-07-30 17:52 ` [154/205] splice: check f_mode for seekable file Greg KH
2010-07-30 17:52 ` [155/205] futex: futex_find_get_task remove credentails check Greg KH
2010-07-30 17:52 ` [156/205] PM / x86: Save/restore MISC_ENABLE register Greg KH
2010-07-30 17:52 ` [157/205] PCI/PM: Do not use native PCIe PME by default Greg KH
2010-07-30 17:52 ` [158/205] isdn/capi: make reset_ctr op truly optional Greg KH
2010-07-30 17:52 ` [159/205] isdn/gigaset: remove dummy CAPI method implementations Greg KH
2010-07-30 17:52 ` [160/205] isdn/gigaset: honor CAPI applications buffer size request Greg KH
2010-07-30 17:52 ` [161/205] isdn/gigaset: correct CAPI voice connection encoding Greg KH
2010-07-30 17:52 ` [162/205] isdn/gigaset: correct CAPI DATA_B3 Delivery Confirmation Greg KH
2010-07-30 17:53 ` [163/205] isdn/gigaset: encode HLC and BC together Greg KH
2010-07-30 17:53 ` Greg KH [this message]
2010-07-30 17:53 ` [165/205] ACPI: skip checking BM_STS if the BIOS doesnt ask for it Greg KH
2010-07-30 17:53 ` [166/205] ACPI / PM: Do not enable GPEs for system wakeup in advance Greg KH
2010-07-30 17:53 ` [167/205] ACPI: Unconditionally set SCI_EN on resume Greg KH
2010-07-30 17:53 ` [168/205] libertas/sdio: 8686: set ECSI bit for 1-bit transfers Greg KH
2010-07-30 17:53 ` [169/205] dm9000: fix "BUG: spinlock recursion" Greg KH
2010-07-30 17:53 ` [170/205] mfd: Remove unneeded and dangerous clearing of clientdata Greg KH
2010-07-30 17:53 ` [171/205] firmware_class: fix memory leak - free allocated pages Greg KH
2010-07-30 17:53 ` [172/205] [CPUFREQ] revert "[CPUFREQ] remove rwsem lock from CPUFREQ_GOV_STOP call (second call site)" Greg KH
2010-07-30 17:53 ` [173/205] V4L/DVB: dvb-core: Fix ULE decapsulation bug Greg KH
2010-07-30 17:53 ` [174/205] V4L/DVB: FusionHDTV: Use quick reads for I2C IR device probing Greg KH
2010-07-30 17:53 ` [175/205] V4L/DVB: budget: Select correct frontends Greg KH
2010-07-30 17:53 ` [176/205] 3c503: Fix IRQ probing Greg KH
2010-07-30 17:53 ` [177/205] mac80211: fix supported rates IE if AP doesnt give us its rates Greg KH
2010-07-30 17:53 ` [178/205] bnx2: Fix hang during rmmod bnx2 Greg KH
2010-07-30 17:53 ` [179/205] xfs: prevent swapext from operating on write-only files Greg KH
2010-07-30 17:53 ` [180/205] V4L/DVB: uvcvideo: Add support for unbranded Arkmicro 18ec:3290 webcams Greg KH
2010-07-30 17:53 ` [181/205] V4L/DVB: uvcvideo: Add support for Packard Bell EasyNote MX52 integrated webcam Greg KH
2010-07-30 17:53 ` [182/205] V4L/DVB: uvcvideo: Add support for V4L2_PIX_FMT_Y16 Greg KH
2010-07-30 17:53 ` [183/205] block: Dont count_vm_events for discard bio in submit_bio Greg KH
2010-07-30 17:53 ` [184/205] iwlagn: verify flow id in compressed BA packet Greg KH
2010-07-30 17:53 ` [185/205] iwlwifi: Recover TX flow stall due to stuck queue Greg KH
2010-07-30 17:53 ` [186/205] iwl3945: enable stuck queue detection on 3945 Greg KH
2010-07-30 17:53 ` [187/205] kbuild: Fix modpost segfault Greg KH
2010-07-30 17:53 ` [188/205] ACPI / ACPICA: Use helper function for computing GPE masks Greg KH
2010-07-30 17:53 ` [189/205] ACPI / ACPICA: Fix low-level GPE manipulation code Greg KH
2010-07-30 17:53 ` [190/205] ACPI / ACPICA: Avoid writing full enable masks to GPE registers Greg KH
2010-07-30 17:53 ` [191/205] ACPI / ACPICA: Fix GPE initialization Greg KH
2010-07-30 17:53 ` [192/205] ACPI / ACPICA: Fix sysfs GPE interface Greg KH
2010-07-30 17:53 ` [193/205] [IA64] Fix spinaphore down_spin() Greg KH
2010-07-30 17:53 ` [194/205] ecryptfs: Bugfix for error related to ecryptfs_hash_buckets Greg KH
2010-07-30 17:53 ` [195/205] pcmcia: do not initialize the present flag too late Greg KH
2010-07-30 17:53 ` [196/205] MIPS: MTX-1: Fix PCI on the MeshCube and related boards Greg KH
2010-07-30 17:53 ` [197/205] HID: usbhid: enable remote wakeup for keyboards Greg KH
2010-07-30 17:53 ` [198/205] ath5k: initialize ah->ah_current_channel Greg KH
2010-07-30 17:53 ` [199/205] Input: RX51 keymap - fix recent compile breakage Greg KH
2010-07-30 17:53 ` [200/205] ocfs2: make xattr extension work with new local alloc reservation Greg KH
2010-07-30 17:53 ` [201/205] ACPI: processor: fix processor_physically_present on UP Greg KH
2010-07-30 17:53 ` [202/205] ALSA: hda - Fix pin-detection of Nvidia HDMI Greg KH
2010-07-30 17:53 ` [203/205] drm/i915: add PANEL_UNLOCK_REGS definition Greg KH
2010-07-30 17:53 ` [204/205] drm/i915: make sure eDP panel is turned on Greg KH
2010-07-30 17:53 ` [205/205] drm/i915: make sure we shut off the panel in eDP configs Greg KH
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20100730175148.844568487@clark.site \
--to=gregkh@suse.de \
--cc=akpm@linux-foundation.org \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=davem@davemloft.net \
--cc=linux-kernel@vger.kernel.org \
--cc=stable-review@kernel.org \
--cc=stable@kernel.org \
--cc=tilman@imap.cc \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox