/* * IPWireless 3G PCMCIA Network Driver * * Original code * by Stephen Blackheath , * Ben Martel * * Copyrighted as follows: * Copyright (C) 2004 by Symmetric Systems Ltd (NZ) * * Various driver changes and rewrites, port to new kernels * Copyright (C) 2006-2007 Jiri Kosina * * Misc code cleanups and updates * Copyright (C) 2007 David Sterba */ #ifndef _IPWIRELESS_CS_SETUP_PROTOCOL_H_ #define _IPWIRELESS_CS_SETUP_PROTOCOL_H_ /* Version of the setup protocol and transport protocols */ #define TL_SETUP_VERSION 1 #define TL_SETUP_VERSION_QRY_TMO 1000 #define TL_SETUP_MAX_VERSION_QRY 30 /* Message numbers 0-9 are obsoleted and must not be reused! */ #define TL_SETUP_SIGNO_GET_VERSION_QRY 10 #define TL_SETUP_SIGNO_GET_VERSION_RSP 11 #define TL_SETUP_SIGNO_CONFIG_MSG 12 #define TL_SETUP_SIGNO_CONFIG_DONE_MSG 13 #define TL_SETUP_SIGNO_OPEN_MSG 14 #define TL_SETUP_SIGNO_CLOSE_MSG 15 #define TL_SETUP_SIGNO_INFO_MSG 20 #define TL_SETUP_SIGNO_INFO_MSG_ACK 21 #define TL_SETUP_SIGNO_REBOOT_MSG 22 #define TL_SETUP_SIGNO_REBOOT_MSG_ACK 23 /* Synchronous start-messages */ struct tl_setup_get_version_qry { unsigned char sig_no; /* TL_SETUP_SIGNO_GET_VERSION_QRY */ } __attribute__ ((__packed__)); struct tl_setup_get_version_rsp { unsigned char sig_no; /* TL_SETUP_SIGNO_GET_VERSION_RSP */ unsigned char version; /* TL_SETUP_VERSION */ } __attribute__ ((__packed__)); struct tl_setup_config_msg { unsigned char sig_no; /* TL_SETUP_SIGNO_CONFIG_MSG */ unsigned char port_no; unsigned char prio_data; unsigned char prio_ctrl; } __attribute__ ((__packed__)); struct tl_setup_config_done_msg { unsigned char sig_no; /* TL_SETUP_SIGNO_CONFIG_DONE_MSG */ } __attribute__ ((__packed__)); /* Asynchronous messages */ struct tl_setup_open_msg { unsigned char sig_no; /* TL_SETUP_SIGNO_OPEN_MSG */ unsigned char port_no; } __attribute__ ((__packed__)); struct tl_setup_close_msg { unsigned char sig_no; /* TL_SETUP_SIGNO_CLOSE_MSG */ unsigned char port_no; } __attribute__ ((__packed__)); /* Driver type - for use in tl_setup_info_msg.driver_type */ #define COMM_DRIVER 0 #define NDISWAN_DRIVER 1 #define NDISWAN_DRIVER_MAJOR_VERSION 2 #define NDISWAN_DRIVER_MINOR_VERSION 0 /* * It should not matter when this message comes over as we just store the * results and send the ACK. */ struct tl_setup_info_msg { unsigned char sig_no; /* TL_SETUP_SIGNO_INFO_MSG */ unsigned char driver_type; unsigned char major_version; unsigned char minor_version; } __attribute__ ((__packed__)); struct tl_setup_info_msgAck { unsigned char sig_no; /* TL_SETUP_SIGNO_INFO_MSG_ACK */ } __attribute__ ((__packed__)); struct TlSetupRebootMsgAck { unsigned char sig_no; /* TL_SETUP_SIGNO_REBOOT_MSG_ACK */ } __attribute__ ((__packed__)); /* Define a union of all the msgs that the driver can receive from the card.*/ union ipw_setup_rx_msg { unsigned char sig_no; struct tl_setup_get_version_rsp version_rsp_msg; struct tl_setup_open_msg open_msg; struct tl_setup_close_msg close_msg; struct tl_setup_info_msg InfoMsg; struct tl_setup_info_msgAck info_msg_ack; } __attribute__ ((__packed__)); #endif /* _IPWIRELESS_CS_SETUP_PROTOCOL_H_ */ onet/af_phonet.c
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2017-01-31 09:37:34 +0100
committerThomas Gleixner <tglx@linutronix.de>2017-01-31 21:47:58 +0100
commit0becc0ae5b42828785b589f686725ff5bc3b9b25 (patch)
treebe6d0e1f37c38ed0a7dd5da2d4b1e93f0fb43101 /net/phonet/af_phonet.c
parent24c2503255d35c269b67162c397a1a1c1e02f6ce (diff)
x86/mce: Make timer handling more robust
Erik reported that on a preproduction hardware a CMCI storm triggers the BUG_ON in add_timer_on(). The reason is that the per CPU MCE timer is started by the CMCI logic before the MCE CPU hotplug callback starts the timer with add_timer_on(). So the timer is already queued which triggers the BUG. Using add_timer_on() is pretty pointless in this code because the timer is strictlty per CPU, initialized as pinned and all operations which arm the timer happen on the CPU to which the timer belongs. Simplify the whole machinery by using mod_timer() instead of add_timer_on() which avoids the problem because mod_timer() can handle already queued timers. Use __start_timer() everywhere so the earliest armed expiry time is preserved. Reported-by: Erik Veijola <erik.veijola@intel.com> Tested-by: Borislav Petkov <bp@alien8.de> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Borislav Petkov <bp@alien8.de> Cc: Tony Luck <tony.luck@intel.com> Link: http://lkml.kernel.org/r/alpine.DEB.2.20.1701310936080.3457@nanos Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'net/phonet/af_phonet.c')