diff options
-rw-r--r-- | arm-fix-omapdrm.patch | 10 | ||||
-rw-r--r-- | config-generic | 8 | ||||
-rw-r--r-- | config-nodebug | 112 | ||||
-rw-r--r-- | config-x86-generic | 2 | ||||
-rw-r--r-- | kernel.spec | 22 | ||||
-rw-r--r-- | linux-2.6-serial-460800.patch | 4 | ||||
-rw-r--r-- | lis3-improve-handling-of-null-rate.patch | 2 | ||||
-rw-r--r-- | modsign-post-KS-jwb.patch | 3 | ||||
-rw-r--r-- | secure-boot-20120924.patch | 33 | ||||
-rw-r--r-- | sources | 1 | ||||
-rw-r--r-- | team-net-next-20120808.patch | 499 | ||||
-rw-r--r-- | team-net-next-update-20120927.patch | 335 |
12 files changed, 76 insertions, 955 deletions
diff --git a/arm-fix-omapdrm.patch b/arm-fix-omapdrm.patch deleted file mode 100644 index f70b861fa..000000000 --- a/arm-fix-omapdrm.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- linux-3.6.0-0.rc3.git2.1.fc18.x86_64/drivers/staging/omapdrm/omap_drv.c.orig 2012-08-28 22:52:35.950826671 +0100 -+++ linux-3.6.0-0.rc3.git2.1.fc18.x86_64/drivers/staging/omapdrm/omap_drv.c 2012-08-28 22:52:49.393910353 +0100 -@@ -761,7 +761,6 @@ - .irq_postinstall = dev_irq_postinstall, - .irq_uninstall = dev_irq_uninstall, - .irq_handler = dev_irq_handler, -- .reclaim_buffers = drm_core_reclaim_buffers, - #ifdef CONFIG_DEBUG_FS - .debugfs_init = omap_debugfs_init, - .debugfs_cleanup = omap_debugfs_cleanup, diff --git a/config-generic b/config-generic index 8f795f5d5..9b63e75f9 100644 --- a/config-generic +++ b/config-generic @@ -1456,13 +1456,13 @@ CONFIG_B43_SDIO=y CONFIG_B43_BCMA=y # CONFIG_B43_BCMA_EXTRA is not set CONFIG_B43_BCMA_PIO=y -# CONFIG_B43_DEBUG is not set +CONFIG_B43_DEBUG=y CONFIG_B43_PHY_LP=y CONFIG_B43_PHY_N=y CONFIG_B43_PHY_HT=y # CONFIG_B43_FORCE_PIO is not set CONFIG_B43LEGACY=m -# CONFIG_B43LEGACY_DEBUG is not set +CONFIG_B43LEGACY_DEBUG=y CONFIG_B43LEGACY_DMA=y CONFIG_B43LEGACY_PIO=y CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y @@ -3028,7 +3028,7 @@ CONFIG_USB_STORAGE_REALTEK=m CONFIG_REALTEK_AUTOPM=y CONFIG_USB_STORAGE_ENE_UB6250=m # CONFIG_USB_LIBUSUAL is not set -# CONFIG_USB_UAS is not set +CONFIG_USB_UAS=m # @@ -3981,7 +3981,7 @@ CONFIG_IBMASR=m CONFIG_PM_DEBUG=y CONFIG_PM_TRACE=y CONFIG_PM_TRACE_RTC=y -# CONFIG_PM_TEST_SUSPEND is not set +CONFIG_PM_TEST_SUSPEND=y CONFIG_PM_RUNTIME=y # CONFIG_PM_OPP is not set # CONFIG_PM_AUTOSLEEP is not set diff --git a/config-nodebug b/config-nodebug index 5b4187680..d99deeb2f 100644 --- a/config-nodebug +++ b/config-nodebug @@ -2,111 +2,111 @@ CONFIG_SND_VERBOSE_PRINTK=y CONFIG_SND_DEBUG=y CONFIG_SND_PCM_XRUN_DEBUG=y -# CONFIG_DEBUG_ATOMIC_SLEEP is not set - -# CONFIG_DEBUG_MUTEXES is not set -# CONFIG_DEBUG_RT_MUTEXES is not set -# CONFIG_DEBUG_LOCK_ALLOC is not set -# CONFIG_PROVE_LOCKING is not set -# CONFIG_DEBUG_SPINLOCK is not set -# CONFIG_PROVE_RCU is not set +CONFIG_DEBUG_ATOMIC_SLEEP=y + +CONFIG_DEBUG_MUTEXES=y +CONFIG_DEBUG_RT_MUTEXES=y +CONFIG_DEBUG_LOCK_ALLOC=y +CONFIG_PROVE_LOCKING=y +CONFIG_DEBUG_SPINLOCK=y +CONFIG_PROVE_RCU=y # CONFIG_PROVE_RCU_REPEATEDLY is not set -# CONFIG_DEBUG_PER_CPU_MAPS is not set +CONFIG_DEBUG_PER_CPU_MAPS=y CONFIG_CPUMASK_OFFSTACK=y -# CONFIG_CPU_NOTIFIER_ERROR_INJECT is not set +CONFIG_CPU_NOTIFIER_ERROR_INJECT=m -# CONFIG_FAULT_INJECTION is not set -# CONFIG_FAILSLAB is not set -# CONFIG_FAIL_PAGE_ALLOC is not set -# CONFIG_FAIL_MAKE_REQUEST is not set -# CONFIG_FAULT_INJECTION_DEBUG_FS is not set -# CONFIG_FAULT_INJECTION_STACKTRACE_FILTER is not set -# CONFIG_FAIL_IO_TIMEOUT is not set -# CONFIG_FAIL_MMC_REQUEST is not set +CONFIG_FAULT_INJECTION=y +CONFIG_FAILSLAB=y +CONFIG_FAIL_PAGE_ALLOC=y +CONFIG_FAIL_MAKE_REQUEST=y +CONFIG_FAULT_INJECTION_DEBUG_FS=y +CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y +CONFIG_FAIL_IO_TIMEOUT=y +CONFIG_FAIL_MMC_REQUEST=y -# CONFIG_SLUB_DEBUG_ON is not set +CONFIG_SLUB_DEBUG_ON=y -# CONFIG_LOCK_STAT is not set +CONFIG_LOCK_STAT=y -# CONFIG_DEBUG_STACK_USAGE is not set +CONFIG_DEBUG_STACK_USAGE=y -# CONFIG_ACPI_DEBUG is not set +CONFIG_ACPI_DEBUG=y # CONFIG_ACPI_DEBUG_FUNC_TRACE is not set -# CONFIG_DEBUG_SG is not set +CONFIG_DEBUG_SG=y # CONFIG_DEBUG_PAGEALLOC is not set -# CONFIG_DEBUG_WRITECOUNT is not set -# CONFIG_DEBUG_OBJECTS is not set +CONFIG_DEBUG_WRITECOUNT=y +CONFIG_DEBUG_OBJECTS=y # CONFIG_DEBUG_OBJECTS_SELFTEST is not set -# CONFIG_DEBUG_OBJECTS_FREE is not set -# CONFIG_DEBUG_OBJECTS_TIMERS is not set -# CONFIG_DEBUG_OBJECTS_RCU_HEAD is not set +CONFIG_DEBUG_OBJECTS_FREE=y +CONFIG_DEBUG_OBJECTS_TIMERS=y +CONFIG_DEBUG_OBJECTS_RCU_HEAD=y CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1 -# CONFIG_X86_PTDUMP is not set +CONFIG_X86_PTDUMP=y -# CONFIG_CAN_DEBUG_DEVICES is not set +CONFIG_CAN_DEBUG_DEVICES=y -# CONFIG_MODULE_FORCE_UNLOAD is not set +CONFIG_MODULE_FORCE_UNLOAD=y -# CONFIG_SYSCTL_SYSCALL_CHECK is not set +CONFIG_SYSCTL_SYSCALL_CHECK=y -# CONFIG_DEBUG_NOTIFIERS is not set +CONFIG_DEBUG_NOTIFIERS=y -# CONFIG_DMA_API_DEBUG is not set +CONFIG_DMA_API_DEBUG=y -# CONFIG_MMIOTRACE is not set +CONFIG_MMIOTRACE=y -# CONFIG_DEBUG_CREDENTIALS is not set +CONFIG_DEBUG_CREDENTIALS=y # off in both production debug and nodebug builds, # on in rawhide nodebug builds -# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y -# CONFIG_EXT4_DEBUG is not set +CONFIG_EXT4_DEBUG=y -# CONFIG_DEBUG_PERF_USE_VMALLOC is not set +CONFIG_DEBUG_PERF_USE_VMALLOC=y -# CONFIG_JBD2_DEBUG is not set +CONFIG_JBD2_DEBUG=y -# CONFIG_NFSD_FAULT_INJECTION is not set +CONFIG_NFSD_FAULT_INJECTION=y -# CONFIG_DEBUG_BLK_CGROUP is not set +CONFIG_DEBUG_BLK_CGROUP=y -# CONFIG_DRBD_FAULT_INJECTION is not set +CONFIG_DRBD_FAULT_INJECTION=y -# CONFIG_ATH_DEBUG is not set -# CONFIG_CARL9170_DEBUGFS is not set -# CONFIG_IWLWIFI_DEVICE_TRACING is not set +CONFIG_ATH_DEBUG=y +CONFIG_CARL9170_DEBUGFS=y +CONFIG_IWLWIFI_DEVICE_TRACING=y -# CONFIG_DEBUG_OBJECTS_WORK is not set +CONFIG_DEBUG_OBJECTS_WORK=y -# CONFIG_DMADEVICES_DEBUG is not set -# CONFIG_DMADEVICES_VDEBUG is not set +CONFIG_DMADEVICES_DEBUG=y +CONFIG_DMADEVICES_VDEBUG=y CONFIG_PM_ADVANCED_DEBUG=y -# CONFIG_CEPH_LIB_PRETTYDEBUG is not set -# CONFIG_QUOTA_DEBUG is not set +CONFIG_CEPH_LIB_PRETTYDEBUG=y +CONFIG_QUOTA_DEBUG=y CONFIG_PCI_DEFAULT_USE_CRS=y CONFIG_KGDB_KDB=y CONFIG_KDB_KEYBOARD=y -# CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER is not set -# CONFIG_TEST_LIST_SORT is not set +CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER=y +CONFIG_TEST_LIST_SORT=y -# CONFIG_DETECT_HUNG_TASK is not set +CONFIG_DETECT_HUNG_TASK=y CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=120 # CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set -# CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK is not set +CONFIG_X86_BOOTPARAM_MEMORY_CORRUPTION_CHECK=y -# CONFIG_DEBUG_KMEMLEAK is not set +CONFIG_DEBUG_KMEMLEAK=y CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=1024 # CONFIG_DEBUG_KMEMLEAK_TEST is not set CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y diff --git a/config-x86-generic b/config-x86-generic index de9582a01..ad22edd8d 100644 --- a/config-x86-generic +++ b/config-x86-generic @@ -320,7 +320,7 @@ CONFIG_STRICT_DEVMEM=y # CONFIG_MEMTEST is not set # CONFIG_DEBUG_TLBFLUSH is not set -# CONFIG_MAXSMP is not set +CONFIG_MAXSMP=y CONFIG_HP_ILO=m diff --git a/kernel.spec b/kernel.spec index f9056f115..0001efb84 100644 --- a/kernel.spec +++ b/kernel.spec @@ -6,7 +6,7 @@ Summary: The Linux kernel # For a stable, released kernel, released_kernel should be 1. For rawhide # and/or a kernel built from an rc or git snapshot, released_kernel should # be 0. -%global released_kernel 1 +%global released_kernel 0 # Sign modules on x86. Make sure the config files match this setting if more # architectures are added. @@ -95,7 +95,7 @@ Summary: The Linux kernel # The rc snapshot level %define rcrev 0 # The git snapshot level -%define gitrev 0 +%define gitrev 2 # Set rpm version accordingly %define rpmversion 3.%{upstream_sublevel}.0 %endif @@ -163,7 +163,7 @@ Summary: The Linux kernel # Set debugbuildsenabled to 1 for production (build separate debug kernels) # and 0 for rawhide (all kernels are debug kernels). # See also 'make debug' and 'make release'. -%define debugbuildsenabled 1 +%define debugbuildsenabled 0 # Want to build a vanilla kernel build without any non-upstream patches? %define with_vanilla %{?_with_vanilla: 1} %{?!_with_vanilla: 0} @@ -176,7 +176,7 @@ Summary: The Linux kernel %define doc_build_fail true %endif -%define rawhide_skip_docs 0 +%define rawhide_skip_docs 1 %if 0%{?rawhide_skip_docs} %define with_doc 0 %define doc_build_fail true @@ -657,9 +657,6 @@ Patch100: taint-vbox.patch Patch110: vmbugon-warnon.patch -Patch150: team-net-next-20120808.patch -Patch151: team-net-next-update-20120927.patch - Patch390: linux-2.6-defaults-acpi-video.patch Patch391: linux-2.6-acpi-video-dos.patch Patch394: linux-2.6-acpi-debug-infinite-loop.patch @@ -729,7 +726,6 @@ Patch14010: lis3-improve-handling-of-null-rate.patch # ARM Patch21000: arm-read_current_timer.patch -Patch21001: arm-fix-omapdrm.patch Patch21002: arm-fix_radio_shark.patch # OMAP @@ -1323,9 +1319,6 @@ ApplyPatch taint-vbox.patch ApplyPatch vmbugon-warnon.patch -ApplyPatch team-net-next-20120808.patch -ApplyPatch team-net-next-update-20120927.patch - # Architecture patches # x86(-64) @@ -1333,7 +1326,6 @@ ApplyPatch team-net-next-update-20120927.patch # ARM # ApplyPatch arm-read_current_timer.patch -ApplyPatch arm-fix-omapdrm.patch ApplyPatch arm-fix_radio_shark.patch ApplyPatch arm-tegra-nvec-kconfig.patch ApplyPatch arm-tegra-usb-no-reset-linux33.patch @@ -1411,7 +1403,7 @@ ApplyPatch modsign-post-KS-jwb.patch ApplyPatch secure-boot-20120924.patch # Improved PCI support for UEFI -ApplyPatch handle-efi-roms.patch +# ApplyPatch handle-efi-roms.patch # Assorted Virt Fixes @@ -2320,6 +2312,10 @@ fi # ||----w | # || || %changelog +* Fri Oct 05 2012 Justin M. Forbes <jforbes@redhat.com> +- v3.6-6670-gecefbd9 +- Reenable debugging options. + * Tue Oct 2 2012 Peter Robinson <pbrobinson@fedoraproject.org> - Update ARM configs for 3.6 final - Add highbank SATA driver for stability diff --git a/linux-2.6-serial-460800.patch b/linux-2.6-serial-460800.patch index 979b248d5..0e68378e7 100644 --- a/linux-2.6-serial-460800.patch +++ b/linux-2.6-serial-460800.patch @@ -28,14 +28,14 @@ index 2209620..659c1bb 100644 quot = uart_get_divisor(port, baud); @@ -2240,7 +2251,7 @@ serial8250_set_termios(struct uart_port *port, struct ktermios *termios, - struct uart_8250_port *up = (struct uart_8250_port *)port; + container_of(port, struct uart_8250_port, port); unsigned char cval, fcr = 0; unsigned long flags; - unsigned int baud, quot; + unsigned int baud, quot, max_baud; + int fifo_bug = 0; switch (termios->c_cflag & CSIZE) { - case CS5: @@ -2272,9 +2283,10 @@ serial8250_set_termios(struct uart_port *port, struct ktermios *termios, /* * Ask the core to calculate the divisor for us. diff --git a/lis3-improve-handling-of-null-rate.patch b/lis3-improve-handling-of-null-rate.patch index 98512564a..30ed26d80 100644 --- a/lis3-improve-handling-of-null-rate.patch +++ b/lis3-improve-handling-of-null-rate.patch @@ -28,9 +28,9 @@ index 35c67e0..42dce2a 100644 -static int lis3_3dc_rates[16] = {0, 1, 10, 25, 50, 100, 200, 400, 1600, 5000}; +/* LIS3DC: 0 = power off, above 9 = undefined */ +static int lis3_3dc_rates[16] = {0, 1, 10, 25, 50, 100, 200, 400, 1600, 5000, -1, -1, -1, -1, -1, -1}; + static int lis3_3dlh_rates[4] = {50, 100, 400, 1000}; /* ODR is Output Data Rate */ - static int lis3lv02d_get_odr(struct lis3lv02d *lis3) @@ -202,12 +203,11 @@ static int lis3lv02d_get_odr(struct lis3lv02d *lis3) return lis3->odrs[(ctrl >> shift)]; } diff --git a/modsign-post-KS-jwb.patch b/modsign-post-KS-jwb.patch index 6dd81ffa0..ed5a41f00 100644 --- a/modsign-post-KS-jwb.patch +++ b/modsign-post-KS-jwb.patch @@ -1073,7 +1073,8 @@ index 2d5d041..42036c7 100644 char *datablob; int ret = 0; int key_cmd; - + size_t key_len; + - if (datalen <= 0 || datalen > 32767 || !data) + if (datalen <= 0 || datalen > 32767 || !prep->data) return -EINVAL; diff --git a/secure-boot-20120924.patch b/secure-boot-20120924.patch index 37beb41b2..12f09a035 100644 --- a/secure-boot-20120924.patch +++ b/secure-boot-20120924.patch @@ -650,39 +650,6 @@ index 93978d5..e3e5f8c 100644 1.7.11.4 -From 294d339c63b0f67a362efaa62713f26d9f496da8 Mon Sep 17 00:00:00 2001 -From: Matthew Garrett <mjg@redhat.com> -Date: Thu, 26 Jul 2012 18:00:00 -0400 -Subject: [PATCH 13/14] efi: Build EFI stub with EFI-appropriate options - -We can't assume the presence of the red zone while we're still in a boot -services environment, so we should build with -fno-red-zone to avoid -problems. Change the size of wchar at the same time to make string handling -simpler. - -Signed-off-by: Matthew Garrett <mjg@redhat.com> ---- - arch/x86/boot/compressed/Makefile | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile -index e398bb5..8a84501 100644 ---- a/arch/x86/boot/compressed/Makefile -+++ b/arch/x86/boot/compressed/Makefile -@@ -28,6 +28,9 @@ VMLINUX_OBJS = $(obj)/vmlinux.lds $(obj)/head_$(BITS).o $(obj)/misc.o \ - $(obj)/string.o $(obj)/cmdline.o $(obj)/early_serial_console.o \ - $(obj)/piggy.o - -+$(obj)/eboot.o: KBUILD_CFLAGS += -fshort-wchar -mno-red-zone -+$(obj)/efi_stub_$(BITS).o: KBUILD_CLFAGS += -fshort-wchar -mno-red-zone -+ - ifeq ($(CONFIG_EFI_STUB), y) - VMLINUX_OBJS += $(obj)/eboot.o $(obj)/efi_stub_$(BITS).o - endif --- -1.7.11.4 - - From d1a225668878a3339adcd7ce0be256e857360ada Mon Sep 17 00:00:00 2001 From: Josh Boyer <jwboyer@redhat.com> Date: Tue, 26 Jun 2012 16:27:26 -0400 @@ -1 +1,2 @@ 1a1760420eac802c541a20ab51a093d1 linux-3.6.tar.xz +b0b56985ea36be2c9aa36530b471d8d5 patch-3.6-git2.xz diff --git a/team-net-next-20120808.patch b/team-net-next-20120808.patch deleted file mode 100644 index c738a4724..000000000 --- a/team-net-next-20120808.patch +++ /dev/null @@ -1,499 +0,0 @@ -Update team driver to latest net-next. - -Split patches available here: -http://people.redhat.com/jpirko/f18_team_update_2/ - -Jiri Pirko (4): - netlink: add signed types - team: add signed 32-bit team option type - team: add per port priority option - team: add support for queue override by setting queue_id for port - - drivers/net/team/team.c | 200 ++++++++++++++++++++++++++++++++++++++++++++++- - include/linux/if_team.h | 7 ++ - include/net/netlink.h | 98 +++++++++++++++++++++++ - 3 files changed, 303 insertions(+), 2 deletions(-) - -Signed-off-by: Jiri Pirko <jpirko@redhat.com> - -diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c -index 87707ab..ba10c46 100644 ---- a/drivers/net/team/team.c -+++ b/drivers/net/team/team.c -@@ -658,6 +658,122 @@ static rx_handler_result_t team_handle_frame(struct sk_buff **pskb) - } - - -+/************************************* -+ * Multiqueue Tx port select override -+ *************************************/ -+ -+static int team_queue_override_init(struct team *team) -+{ -+ struct list_head *listarr; -+ unsigned int queue_cnt = team->dev->num_tx_queues - 1; -+ unsigned int i; -+ -+ if (!queue_cnt) -+ return 0; -+ listarr = kmalloc(sizeof(struct list_head) * queue_cnt, GFP_KERNEL); -+ if (!listarr) -+ return -ENOMEM; -+ team->qom_lists = listarr; -+ for (i = 0; i < queue_cnt; i++) -+ INIT_LIST_HEAD(listarr++); -+ return 0; -+} -+ -+static void team_queue_override_fini(struct team *team) -+{ -+ kfree(team->qom_lists); -+} -+ -+static struct list_head *__team_get_qom_list(struct team *team, u16 queue_id) -+{ -+ return &team->qom_lists[queue_id - 1]; -+} -+ -+/* -+ * note: already called with rcu_read_lock -+ */ -+static bool team_queue_override_transmit(struct team *team, struct sk_buff *skb) -+{ -+ struct list_head *qom_list; -+ struct team_port *port; -+ -+ if (!team->queue_override_enabled || !skb->queue_mapping) -+ return false; -+ qom_list = __team_get_qom_list(team, skb->queue_mapping); -+ list_for_each_entry_rcu(port, qom_list, qom_list) { -+ if (!team_dev_queue_xmit(team, port, skb)) -+ return true; -+ } -+ return false; -+} -+ -+static void __team_queue_override_port_del(struct team *team, -+ struct team_port *port) -+{ -+ list_del_rcu(&port->qom_list); -+ synchronize_rcu(); -+ INIT_LIST_HEAD(&port->qom_list); -+} -+ -+static bool team_queue_override_port_has_gt_prio_than(struct team_port *port, -+ struct team_port *cur) -+{ -+ if (port->priority < cur->priority) -+ return true; -+ if (port->priority > cur->priority) -+ return false; -+ if (port->index < cur->index) -+ return true; -+ return false; -+} -+ -+static void __team_queue_override_port_add(struct team *team, -+ struct team_port *port) -+{ -+ struct team_port *cur; -+ struct list_head *qom_list; -+ struct list_head *node; -+ -+ if (!port->queue_id || !team_port_enabled(port)) -+ return; -+ -+ qom_list = __team_get_qom_list(team, port->queue_id); -+ node = qom_list; -+ list_for_each_entry(cur, qom_list, qom_list) { -+ if (team_queue_override_port_has_gt_prio_than(port, cur)) -+ break; -+ node = &cur->qom_list; -+ } -+ list_add_tail_rcu(&port->qom_list, node); -+} -+ -+static void __team_queue_override_enabled_check(struct team *team) -+{ -+ struct team_port *port; -+ bool enabled = false; -+ -+ list_for_each_entry(port, &team->port_list, list) { -+ if (!list_empty(&port->qom_list)) { -+ enabled = true; -+ break; -+ } -+ } -+ if (enabled == team->queue_override_enabled) -+ return; -+ netdev_dbg(team->dev, "%s queue override\n", -+ enabled ? "Enabling" : "Disabling"); -+ team->queue_override_enabled = enabled; -+} -+ -+static void team_queue_override_port_refresh(struct team *team, -+ struct team_port *port) -+{ -+ __team_queue_override_port_del(team, port); -+ __team_queue_override_port_add(team, port); -+ __team_queue_override_enabled_check(team); -+} -+ -+ - /**************** - * Port handling - ****************/ -@@ -688,6 +804,7 @@ static void team_port_enable(struct team *team, - hlist_add_head_rcu(&port->hlist, - team_port_index_hash(team, port->index)); - team_adjust_ops(team); -+ team_queue_override_port_refresh(team, port); - if (team->ops.port_enabled) - team->ops.port_enabled(team, port); - } -@@ -716,6 +833,7 @@ static void team_port_disable(struct team *team, - hlist_del_rcu(&port->hlist); - __reconstruct_port_hlist(team, port->index); - port->index = -1; -+ team_queue_override_port_refresh(team, port); - __team_adjust_ops(team, team->en_port_count - 1); - /* - * Wait until readers see adjusted ops. This ensures that -@@ -881,6 +999,7 @@ static int team_port_add(struct team *team, struct net_device *port_dev) - - port->dev = port_dev; - port->team = team; -+ INIT_LIST_HEAD(&port->qom_list); - - port->orig.mtu = port_dev->mtu; - err = dev_set_mtu(port_dev, dev->mtu); -@@ -1092,6 +1211,49 @@ static int team_user_linkup_en_option_set(struct team *team, - return 0; - } - -+static int team_priority_option_get(struct team *team, -+ struct team_gsetter_ctx *ctx) -+{ -+ struct team_port *port = ctx->info->port; -+ -+ ctx->data.s32_val = port->priority; -+ return 0; -+} -+ -+static int team_priority_option_set(struct team *team, -+ struct team_gsetter_ctx *ctx) -+{ -+ struct team_port *port = ctx->info->port; -+ -+ port->priority = ctx->data.s32_val; -+ team_queue_override_port_refresh(team, port); -+ return 0; -+} -+ -+static int team_queue_id_option_get(struct team *team, -+ struct team_gsetter_ctx *ctx) -+{ -+ struct team_port *port = ctx->info->port; -+ -+ ctx->data.u32_val = port->queue_id; -+ return 0; -+} -+ -+static int team_queue_id_option_set(struct team *team, -+ struct team_gsetter_ctx *ctx) -+{ -+ struct team_port *port = ctx->info->port; -+ -+ if (port->queue_id == ctx->data.u32_val) -+ return 0; -+ if (ctx->data.u32_val >= team->dev->real_num_tx_queues) -+ return -EINVAL; -+ port->queue_id = ctx->data.u32_val; -+ team_queue_override_port_refresh(team, port); -+ return 0; -+} -+ -+ - static const struct team_option team_options[] = { - { - .name = "mode", -@@ -1120,6 +1282,20 @@ static const struct team_option team_options[] = { - .getter = team_user_linkup_en_option_get, - .setter = team_user_linkup_en_option_set, - }, -+ { -+ .name = "priority", -+ .type = TEAM_OPTION_TYPE_S32, -+ .per_port = true, -+ .getter = team_priority_option_get, -+ .setter = team_priority_option_set, -+ }, -+ { -+ .name = "queue_id", -+ .type = TEAM_OPTION_TYPE_U32, -+ .per_port = true, -+ .getter = team_queue_id_option_get, -+ .setter = team_queue_id_option_set, -+ }, - }; - - static struct lock_class_key team_netdev_xmit_lock_key; -@@ -1155,6 +1331,9 @@ static int team_init(struct net_device *dev) - for (i = 0; i < TEAM_PORT_HASHENTRIES; i++) - INIT_HLIST_HEAD(&team->en_port_hlist[i]); - INIT_LIST_HEAD(&team->port_list); -+ err = team_queue_override_init(team); -+ if (err) -+ goto err_team_queue_override_init; - - team_adjust_ops(team); - -@@ -1170,6 +1349,8 @@ static int team_init(struct net_device *dev) - return 0; - - err_options_register: -+ team_queue_override_fini(team); -+err_team_queue_override_init: - free_percpu(team->pcpu_stats); - - return err; -@@ -1187,6 +1368,7 @@ static void team_uninit(struct net_device *dev) - - __team_change_mode(team, NULL); /* cleanup */ - __team_options_unregister(team, team_options, ARRAY_SIZE(team_options)); -+ team_queue_override_fini(team); - mutex_unlock(&team->lock); - } - -@@ -1216,10 +1398,12 @@ static int team_close(struct net_device *dev) - static netdev_tx_t team_xmit(struct sk_buff *skb, struct net_device *dev) - { - struct team *team = netdev_priv(dev); -- bool tx_success = false; -+ bool tx_success; - unsigned int len = skb->len; - -- tx_success = team->ops.transmit(team, skb); -+ tx_success = team_queue_override_transmit(team, skb); -+ if (!tx_success) -+ tx_success = team->ops.transmit(team, skb); - if (tx_success) { - struct team_pcpu_stats *pcpu_stats; - -@@ -1787,6 +1971,12 @@ static int team_nl_fill_one_option_get(struct sk_buff *skb, struct team *team, - nla_put_flag(skb, TEAM_ATTR_OPTION_DATA)) - goto nest_cancel; - break; -+ case TEAM_OPTION_TYPE_S32: -+ if (nla_put_u8(skb, TEAM_ATTR_OPTION_TYPE, NLA_S32)) -+ goto nest_cancel; -+ if (nla_put_s32(skb, TEAM_ATTR_OPTION_DATA, ctx.data.s32_val)) -+ goto nest_cancel; -+ break; - default: - BUG(); - } -@@ -1975,6 +2165,9 @@ static int team_nl_cmd_options_set(struct sk_buff *skb, struct genl_info *info) - case NLA_FLAG: - opt_type = TEAM_OPTION_TYPE_BOOL; - break; -+ case NLA_S32: -+ opt_type = TEAM_OPTION_TYPE_S32; -+ break; - default: - goto team_put; - } -@@ -2031,6 +2224,9 @@ static int team_nl_cmd_options_set(struct sk_buff *skb, struct genl_info *info) - case TEAM_OPTION_TYPE_BOOL: - ctx.data.bool_val = attr_data ? true : false; - break; -+ case TEAM_OPTION_TYPE_S32: -+ ctx.data.s32_val = nla_get_s32(attr_data); -+ break; - default: - BUG(); - } -diff --git a/include/linux/if_team.h b/include/linux/if_team.h -index 6960fc1..33fcc20 100644 ---- a/include/linux/if_team.h -+++ b/include/linux/if_team.h -@@ -67,6 +67,9 @@ struct team_port { - struct netpoll *np; - #endif - -+ s32 priority; /* lower number ~ higher priority */ -+ u16 queue_id; -+ struct list_head qom_list; /* node in queue override mapping list */ - long mode_priv[0]; - }; - -@@ -130,6 +133,7 @@ enum team_option_type { - TEAM_OPTION_TYPE_STRING, - TEAM_OPTION_TYPE_BINARY, - TEAM_OPTION_TYPE_BOOL, -+ TEAM_OPTION_TYPE_S32, - }; - - struct team_option_inst_info { -@@ -146,6 +150,7 @@ struct team_gsetter_ctx { - u32 len; - } bin_val; - bool bool_val; -+ s32 s32_val; - } data; - struct team_option_inst_info *info; - }; -@@ -197,6 +202,8 @@ struct team { - - const struct team_mode *mode; - struct team_mode_ops ops; -+ bool queue_override_enabled; -+ struct list_head *qom_lists; /* array of queue override mapping lists */ - long mode_priv[TEAM_MODE_PRIV_LONGS]; - }; - -diff --git a/include/net/netlink.h b/include/net/netlink.h -index 785f37a..09175d5 100644 ---- a/include/net/netlink.h -+++ b/include/net/netlink.h -@@ -98,6 +98,10 @@ - * nla_put_u16(skb, type, value) add u16 attribute to skb - * nla_put_u32(skb, type, value) add u32 attribute to skb - * nla_put_u64(skb, type, value) add u64 attribute to skb -+ * nla_put_s8(skb, type, value) add s8 attribute to skb -+ * nla_put_s16(skb, type, value) add s16 attribute to skb -+ * nla_put_s32(skb, type, value) add s32 attribute to skb -+ * nla_put_s64(skb, type, value) add s64 attribute to skb - * nla_put_string(skb, type, str) add string attribute to skb - * nla_put_flag(skb, type) add flag attribute to skb - * nla_put_msecs(skb, type, jiffies) add msecs attribute to skb -@@ -121,6 +125,10 @@ - * nla_get_u16(nla) get payload for a u16 attribute - * nla_get_u32(nla) get payload for a u32 attribute - * nla_get_u64(nla) get payload for a u64 attribute -+ * nla_get_s8(nla) get payload for a s8 attribute -+ * nla_get_s16(nla) get payload for a s16 attribute -+ * nla_get_s32(nla) get payload for a s32 attribute -+ * nla_get_s64(nla) get payload for a s64 attribute - * nla_get_flag(nla) return 1 if flag is true - * nla_get_msecs(nla) get payload for a msecs attribute - * -@@ -160,6 +168,10 @@ enum { - NLA_NESTED_COMPAT, - NLA_NUL_STRING, - NLA_BINARY, -+ NLA_S8, -+ NLA_S16, -+ NLA_S32, -+ NLA_S64, - __NLA_TYPE_MAX, - }; - -@@ -183,6 +195,8 @@ enum { - * NLA_NESTED_COMPAT Minimum length of structure payload - * NLA_U8, NLA_U16, - * NLA_U32, NLA_U64, -+ * NLA_S8, NLA_S16, -+ * NLA_S32, NLA_S64, - * NLA_MSECS Leaving the length field zero will verify the - * given type fits, using it verifies minimum length - * just like "All other" -@@ -879,6 +893,50 @@ static inline int nla_put_le64(struct sk_buff *skb, int attrtype, __le64 value) - } - - /** -+ * nla_put_s8 - Add a s8 netlink attribute to a socket buffer -+ * @skb: socket buffer to add attribute to -+ * @attrtype: attribute type -+ * @value: numeric value -+ */ -+static inline int nla_put_s8(struct sk_buff *skb, int attrtype, s8 value) -+{ -+ return nla_put(skb, attrtype, sizeof(s8), &value); -+} -+ -+/** -+ * nla_put_s16 - Add a s16 netlink attribute to a socket buffer -+ * @skb: socket buffer to add attribute to -+ * @attrtype: attribute type -+ * @value: numeric value -+ */ -+static inline int nla_put_s16(struct sk_buff *skb, int attrtype, s16 value) -+{ -+ return nla_put(skb, attrtype, sizeof(s16), &value); -+} -+ -+/** -+ * nla_put_s32 - Add a s32 netlink attribute to a socket buffer -+ * @skb: socket buffer to add attribute to -+ * @attrtype: attribute type -+ * @value: numeric value -+ */ -+static inline int nla_put_s32(struct sk_buff *skb, int attrtype, s32 value) -+{ -+ return nla_put(skb, attrtype, sizeof(s32), &value); -+} -+ -+/** -+ * nla_put_s64 - Add a s64 netlink attribute to a socket buffer -+ * @skb: socket buffer to add attribute to -+ * @attrtype: attribute type -+ * @value: numeric value -+ */ -+static inline int nla_put_s64(struct sk_buff *skb, int attrtype, s64 value) -+{ -+ return nla_put(skb, attrtype, sizeof(s64), &value); -+} -+ -+/** - * nla_put_string - Add a string netlink attribute to a socket buffer - * @skb: socket buffer to add attribute to - * @attrtype: attribute type -@@ -994,6 +1052,46 @@ static inline __be64 nla_get_be64(const struct nlattr *nla) - } - - /** -+ * nla_get_s32 - return payload of s32 attribute -+ * @nla: s32 netlink attribute -+ */ -+static inline s32 nla_get_s32(const struct nlattr *nla) -+{ -+ return *(s32 *) nla_data(nla); -+} -+ -+/** -+ * nla_get_s16 - return payload of s16 attribute -+ * @nla: s16 netlink attribute -+ */ -+static inline s16 nla_get_s16(const struct nlattr *nla) -+{ -+ return *(s16 *) nla_data(nla); -+} -+ -+/** -+ * nla_get_s8 - return payload of s8 attribute -+ * @nla: s8 netlink attribute -+ */ -+static inline s8 nla_get_s8(const struct nlattr *nla) -+{ -+ return *(s8 *) nla_data(nla); -+} -+ -+/** -+ * nla_get_s64 - return payload of s64 attribute -+ * @nla: s64 netlink attribute -+ */ -+static inline s64 nla_get_s64(const struct nlattr *nla) -+{ -+ s64 tmp; -+ -+ nla_memcpy(&tmp, nla, sizeof(tmp)); -+ -+ return tmp; -+} -+ -+/** - * nla_get_flag - return payload of flag attribute - * @nla: flag netlink attribute - */ - diff --git a/team-net-next-update-20120927.patch b/team-net-next-update-20120927.patch deleted file mode 100644 index a61311619..000000000 --- a/team-net-next-update-20120927.patch +++ /dev/null @@ -1,335 +0,0 @@ ---- linux-3.6.0-0.rc7.git2.1.fc18.x86_64.orig/drivers/net/team/Kconfig -+++ linux-3.6.0-0.rc7.git2.1.fc18.x86_64/drivers/net/team/Kconfig -@@ -21,7 +21,7 @@ config NET_TEAM_MODE_BROADCAST - ---help--- - Basic mode where packets are transmitted always by all suitable ports. - -- All added ports are setup to have team's mac address. -+ All added ports are setup to have team's device address. - - To compile this team mode as a module, choose M here: the module - will be called team_mode_broadcast. -@@ -33,7 +33,7 @@ config NET_TEAM_MODE_ROUNDROBIN - Basic mode where port used for transmitting packets is selected in - round-robin fashion using packet counter. - -- All added ports are setup to have team's mac address. -+ All added ports are setup to have team's device address. - - To compile this team mode as a module, choose M here: the module - will be called team_mode_roundrobin. ---- linux-3.6.0-0.rc7.git2.1.fc18.x86_64.orig/drivers/net/team/team.c -+++ linux-3.6.0-0.rc7.git2.1.fc18.x86_64/drivers/net/team/team.c -@@ -54,29 +54,29 @@ static struct team_port *team_port_get_r - } - - /* -- * Since the ability to change mac address for open port device is tested in -+ * Since the ability to change device address for open port device is tested in - * team_port_add, this function can be called without control of return value - */ --static int __set_port_mac(struct net_device *port_dev, -- const unsigned char *dev_addr) -+static int __set_port_dev_addr(struct net_device *port_dev, -+ const unsigned char *dev_addr) - { - struct sockaddr addr; - -- memcpy(addr.sa_data, dev_addr, ETH_ALEN); -- addr.sa_family = ARPHRD_ETHER; -+ memcpy(addr.sa_data, dev_addr, port_dev->addr_len); -+ addr.sa_family = port_dev->type; - return dev_set_mac_address(port_dev, &addr); - } - --static int team_port_set_orig_mac(struct team_port *port) -+static int team_port_set_orig_dev_addr(struct team_port *port) - { -- return __set_port_mac(port->dev, port->orig.dev_addr); -+ return __set_port_dev_addr(port->dev, port->orig.dev_addr); - } - --int team_port_set_team_mac(struct team_port *port) -+int team_port_set_team_dev_addr(struct team_port *port) - { -- return __set_port_mac(port->dev, port->team->dev->dev_addr); -+ return __set_port_dev_addr(port->dev, port->team->dev->dev_addr); - } --EXPORT_SYMBOL(team_port_set_team_mac); -+EXPORT_SYMBOL(team_port_set_team_dev_addr); - - static void team_refresh_port_linkup(struct team_port *port) - { -@@ -967,6 +967,8 @@ static struct netpoll_info *team_netpoll - #endif - - static void __team_port_change_port_added(struct team_port *port, bool linkup); -+static int team_dev_type_check_change(struct net_device *dev, -+ struct net_device *port_dev); - - static int team_port_add(struct team *team, struct net_device *port_dev) - { -@@ -975,9 +977,8 @@ static int team_port_add(struct team *te - char *portname = port_dev->name; - int err; - -- if (port_dev->flags & IFF_LOOPBACK || -- port_dev->type != ARPHRD_ETHER) { -- netdev_err(dev, "Device %s is of an unsupported type\n", -+ if (port_dev->flags & IFF_LOOPBACK) { -+ netdev_err(dev, "Device %s is loopback device. Loopback devices can't be added as a team port\n", - portname); - return -EINVAL; - } -@@ -988,6 +989,17 @@ static int team_port_add(struct team *te - return -EBUSY; - } - -+ if (port_dev->features & NETIF_F_VLAN_CHALLENGED && -+ vlan_uses_dev(dev)) { -+ netdev_err(dev, "Device %s is VLAN challenged and team device has VLAN set up\n", -+ portname); -+ return -EPERM; -+ } -+ -+ err = team_dev_type_check_change(dev, port_dev); -+ if (err) -+ return err; -+ - if (port_dev->flags & IFF_UP) { - netdev_err(dev, "Device %s is up. Set it down before adding it as a team port\n", - portname); -@@ -1010,7 +1022,7 @@ static int team_port_add(struct team *te - goto err_set_mtu; - } - -- memcpy(port->orig.dev_addr, port_dev->dev_addr, ETH_ALEN); -+ memcpy(port->orig.dev_addr, port_dev->dev_addr, port_dev->addr_len); - - err = team_port_enter(team, port); - if (err) { -@@ -1091,7 +1103,7 @@ err_vids_add: - - err_dev_open: - team_port_leave(team, port); -- team_port_set_orig_mac(port); -+ team_port_set_orig_dev_addr(port); - - err_port_enter: - dev_set_mtu(port_dev, port->orig.mtu); -@@ -1129,7 +1141,7 @@ static int team_port_del(struct team *te - vlan_vids_del_by_dev(port_dev, dev); - dev_close(port_dev); - team_port_leave(team, port); -- team_port_set_orig_mac(port); -+ team_port_set_orig_dev_addr(port); - dev_set_mtu(port_dev, port->orig.mtu); - synchronize_rcu(); - kfree(port); -@@ -1480,17 +1492,18 @@ static void team_set_rx_mode(struct net_ - - static int team_set_mac_address(struct net_device *dev, void *p) - { -+ struct sockaddr *addr = p; - struct team *team = netdev_priv(dev); - struct team_port *port; -- int err; - -- err = eth_mac_addr(dev, p); -- if (err) -- return err; -+ if (dev->type == ARPHRD_ETHER && !is_valid_ether_addr(addr->sa_data)) -+ return -EADDRNOTAVAIL; -+ memcpy(dev->dev_addr, addr->sa_data, dev->addr_len); -+ dev->addr_assign_type &= ~NET_ADDR_RANDOM; - rcu_read_lock(); - list_for_each_entry_rcu(port, &team->port_list, list) -- if (team->ops.port_change_mac) -- team->ops.port_change_mac(team, port); -+ if (team->ops.port_change_dev_addr) -+ team->ops.port_change_dev_addr(team, port); - rcu_read_unlock(); - return 0; - } -@@ -1721,6 +1734,45 @@ static const struct net_device_ops team_ - * rt netlink interface - ***********************/ - -+static void team_setup_by_port(struct net_device *dev, -+ struct net_device *port_dev) -+{ -+ dev->header_ops = port_dev->header_ops; -+ dev->type = port_dev->type; -+ dev->hard_header_len = port_dev->hard_header_len; -+ dev->addr_len = port_dev->addr_len; -+ dev->mtu = port_dev->mtu; -+ memcpy(dev->broadcast, port_dev->broadcast, port_dev->addr_len); -+ memcpy(dev->dev_addr, port_dev->dev_addr, port_dev->addr_len); -+ dev->addr_assign_type &= ~NET_ADDR_RANDOM; -+} -+ -+static int team_dev_type_check_change(struct net_device *dev, -+ struct net_device *port_dev) -+{ -+ struct team *team = netdev_priv(dev); -+ char *portname = port_dev->name; -+ int err; -+ -+ if (dev->type == port_dev->type) -+ return 0; -+ if (!list_empty(&team->port_list)) { -+ netdev_err(dev, "Device %s is of different type\n", portname); -+ return -EBUSY; -+ } -+ err = call_netdevice_notifiers(NETDEV_PRE_TYPE_CHANGE, dev); -+ err = notifier_to_errno(err); -+ if (err) { -+ netdev_err(dev, "Refused to change device type\n"); -+ return err; -+ } -+ dev_uc_flush(dev); -+ dev_mc_flush(dev); -+ team_setup_by_port(dev, port_dev); -+ call_netdevice_notifiers(NETDEV_POST_TYPE_CHANGE, dev); -+ return 0; -+} -+ - static void team_setup(struct net_device *dev) - { - ether_setup(dev); -@@ -2442,7 +2494,7 @@ static void __team_options_change_check( - list_add_tail(&opt_inst->tmp_list, &sel_opt_inst_list); - } - err = team_nl_send_event_options_get(team, &sel_opt_inst_list); -- if (err) -+ if (err && err != -ESRCH) - netdev_warn(team->dev, "Failed to send options change via netlink (err %d)\n", - err); - } -@@ -2471,9 +2523,9 @@ static void __team_port_change_send(stru - - send_event: - err = team_nl_send_event_port_list_get(port->team); -- if (err) -- netdev_warn(port->team->dev, "Failed to send port change of device %s via netlink\n", -- port->dev->name); -+ if (err && err != -ESRCH) -+ netdev_warn(port->team->dev, "Failed to send port change of device %s via netlink (err %d)\n", -+ port->dev->name, err); - - } - ---- linux-3.6.0-0.rc7.git2.1.fc18.x86_64.orig/drivers/net/team/team_mode_broadcast.c -+++ linux-3.6.0-0.rc7.git2.1.fc18.x86_64/drivers/net/team/team_mode_broadcast.c -@@ -48,18 +48,18 @@ static bool bc_transmit(struct team *tea - - static int bc_port_enter(struct team *team, struct team_port *port) - { -- return team_port_set_team_mac(port); -+ return team_port_set_team_dev_addr(port); - } - --static void bc_port_change_mac(struct team *team, struct team_port *port) -+static void bc_port_change_dev_addr(struct team *team, struct team_port *port) - { -- team_port_set_team_mac(port); -+ team_port_set_team_dev_addr(port); - } - - static const struct team_mode_ops bc_mode_ops = { - .transmit = bc_transmit, - .port_enter = bc_port_enter, -- .port_change_mac = bc_port_change_mac, -+ .port_change_dev_addr = bc_port_change_dev_addr, - }; - - static const struct team_mode bc_mode = { ---- linux-3.6.0-0.rc7.git2.1.fc18.x86_64.orig/drivers/net/team/team_mode_roundrobin.c -+++ linux-3.6.0-0.rc7.git2.1.fc18.x86_64/drivers/net/team/team_mode_roundrobin.c -@@ -66,18 +66,18 @@ drop: - - static int rr_port_enter(struct team *team, struct team_port *port) - { -- return team_port_set_team_mac(port); -+ return team_port_set_team_dev_addr(port); - } - --static void rr_port_change_mac(struct team *team, struct team_port *port) -+static void rr_port_change_dev_addr(struct team *team, struct team_port *port) - { -- team_port_set_team_mac(port); -+ team_port_set_team_dev_addr(port); - } - - static const struct team_mode_ops rr_mode_ops = { - .transmit = rr_transmit, - .port_enter = rr_port_enter, -- .port_change_mac = rr_port_change_mac, -+ .port_change_dev_addr = rr_port_change_dev_addr, - }; - - static const struct team_mode rr_mode = { ---- linux-3.6.0-0.rc7.git2.1.fc18.x86_64.orig/include/linux/if_team.h -+++ linux-3.6.0-0.rc7.git2.1.fc18.x86_64/include/linux/if_team.h -@@ -108,7 +108,7 @@ struct team_mode_ops { - bool (*transmit)(struct team *team, struct sk_buff *skb); - int (*port_enter)(struct team *team, struct team_port *port); - void (*port_leave)(struct team *team, struct team_port *port); -- void (*port_change_mac)(struct team *team, struct team_port *port); -+ void (*port_change_dev_addr)(struct team *team, struct team_port *port); - void (*port_enabled)(struct team *team, struct team_port *port); - void (*port_disabled)(struct team *team, struct team_port *port); - }; -@@ -238,7 +238,7 @@ static inline struct team_port *team_get - return NULL; - } - --extern int team_port_set_team_mac(struct team_port *port); -+extern int team_port_set_team_dev_addr(struct team_port *port); - extern int team_options_register(struct team *team, - const struct team_option *option, - size_t option_count); ---- linux-3.6.0-0.rc7.git2.1.fc18.x86_64.orig/include/linux/if_vlan.h -+++ linux-3.6.0-0.rc7.git2.1.fc18.x86_64/include/linux/if_vlan.h -@@ -74,8 +74,6 @@ static inline struct vlan_ethhdr *vlan_e - /* found in socket.c */ - extern void vlan_ioctl_set(int (*hook)(struct net *, void __user *)); - --struct vlan_info; -- - static inline int is_vlan_dev(struct net_device *dev) - { - return dev->priv_flags & IFF_802_1Q_VLAN; -@@ -101,6 +99,8 @@ extern int vlan_vids_add_by_dev(struct n - const struct net_device *by_dev); - extern void vlan_vids_del_by_dev(struct net_device *dev, - const struct net_device *by_dev); -+ -+extern bool vlan_uses_dev(const struct net_device *dev); - #else - static inline struct net_device * - __vlan_find_dev_deep(struct net_device *real_dev, u16 vlan_id) -@@ -151,6 +151,11 @@ static inline void vlan_vids_del_by_dev( - const struct net_device *by_dev) - { - } -+ -+static inline bool vlan_uses_dev(const struct net_device *dev) -+{ -+ return false; -+} - #endif - - /** ---- linux-3.6.0-0.rc7.git2.1.fc18.x86_64.orig/net/8021q/vlan_core.c -+++ linux-3.6.0-0.rc7.git2.1.fc18.x86_64/net/8021q/vlan_core.c -@@ -368,3 +368,9 @@ void vlan_vids_del_by_dev(struct net_dev - vlan_vid_del(dev, vid_info->vid); - } - EXPORT_SYMBOL(vlan_vids_del_by_dev); -+ -+bool vlan_uses_dev(const struct net_device *dev) -+{ -+ return rtnl_dereference(dev->vlan_info) ? true : false; -+} -+EXPORT_SYMBOL(vlan_uses_dev); |