All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dmitry Golubev <dmitry@mikrotik.com>
To: linux-kernel@vger.kernel.org
Subject: [PATCH]: 2.6.8.1, additional options for embedded systems
Date: Tue, 31 Aug 2004 22:55:40 +0300	[thread overview]
Message-ID: <200408312255.40511.dmitry@mikrotik.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 298 bytes --]

Additionally to the patch I sent earlier today, this patch:
- adds option to disable IGMP (that's rarely needed for desktops)
- adds option to disable DOUBLEFAULT for x86 systems

Please apply both - saves about 20K compresses or 50K uncompressed, which is 
very good for embedded systems.

Dmitry

[-- Attachment #2: diff1 --]
[-- Type: text/x-diff, Size: 10594 bytes --]

diff -Naur -X ./patt ./linux-2.6.8.1/arch/i386/kernel/Makefile ./linux-2.6.8.1_new/arch/i386/kernel/Makefile
--- ./linux-2.6.8.1/arch/i386/kernel/Makefile	2004-08-14 13:54:51.000000000 +0300
+++ ./linux-2.6.8.1_new/arch/i386/kernel/Makefile	2004-08-31 20:35:51.000000000 +0300
@@ -6,9 +6,9 @@
 
 obj-y	:= process.o semaphore.o signal.o entry.o traps.o irq.o vm86.o \
 		ptrace.o i8259.o ioport.o ldt.o setup.o time.o sys_i386.o \
-		pci-dma.o i386_ksyms.o i387.o dmi_scan.o bootflag.o \
-		doublefault.o
+		pci-dma.o i386_ksyms.o i387.o dmi_scan.o bootflag.o
 
+obj-$(CONFIG_DOUBLEFAULT)	+= doublefault.o
 obj-y				+= cpu/
 obj-y				+= timers/
 obj-$(CONFIG_ACPI_BOOT)		+= acpi/
diff -Naur -X ./patt ./linux-2.6.8.1/arch/i386/kernel/cpu/common.c ./linux-2.6.8.1_new/arch/i386/kernel/cpu/common.c
--- ./linux-2.6.8.1/arch/i386/kernel/cpu/common.c	2004-08-14 13:54:48.000000000 +0300
+++ ./linux-2.6.8.1_new/arch/i386/kernel/cpu/common.c	2004-08-31 20:39:06.000000000 +0300
@@ -228,8 +228,9 @@
 		if (cap0 & (1<<19))
 			c->x86_cache_alignment = ((misc >> 8) & 0xff) * 8;
 	}
-
+#ifdef CONFIG_X86_CPU_VENDOR_INTEL
 	early_intel_workaround(c);
+#endif	
 }
 
 void __init generic_identify(struct cpuinfo_x86 * c)
@@ -460,28 +461,84 @@
  * Then, when cpu_init() is called, we can just iterate over that array.
  */
 
+#ifdef CONFIG_X86_CPU_VENDOR_INTEL
+
 extern int intel_cpu_init(void);
+
+#endif
+
+#ifdef CONFIG_X86_CPU_VENDOR_CYRIX
+
 extern int cyrix_init_cpu(void);
 extern int nsc_init_cpu(void);
+
+#endif
+
+#ifdef CONFIG_X86_CPU_VENDOR_AMD
+
 extern int amd_init_cpu(void);
+
+#endif
+
+#ifdef CONFIG_X86_CPU_VENDOR_CENTAUR
+
 extern int centaur_init_cpu(void);
+
+#endif
+
+#ifdef CONFIG_X86_CPU_VENDOR_TRANSMETA
+
 extern int transmeta_init_cpu(void);
+
+#endif
+
+#ifdef CONFIG_X86_CPU_VENDOR_RISE
+
 extern int rise_init_cpu(void);
+
+#endif
+
+#ifdef CONFIG_X86_CPU_VENDOR_NEXGEN
+
 extern int nexgen_init_cpu(void);
+
+#endif
+
+#ifdef CONFIG_X86_CPU_VENDOR_UMC
+
 extern int umc_init_cpu(void);
+
+#endif
+
 void early_cpu_detect(void);
 
 void __init early_cpu_init(void)
 {
+#ifdef CONFIG_X86_CPU_VENDOR_INTEL
 	intel_cpu_init();
+#endif
+#ifdef CONFIG_X86_CPU_VENDOR_CYRIX
 	cyrix_init_cpu();
 	nsc_init_cpu();
+#endif
+#ifdef CONFIG_X86_CPU_VENDOR_AMD
 	amd_init_cpu();
+#endif
+#ifdef CONFIG_X86_CPU_VENDOR_CENTAUR
 	centaur_init_cpu();
+#endif
+#ifdef CONFIG_X86_CPU_VENDOR_TRANSMETA
 	transmeta_init_cpu();
+#endif
+#ifdef CONFIG_X86_CPU_VENDOR_RISE
 	rise_init_cpu();
+#endif
+#ifdef CONFIG_X86_CPU_VENDOR_NEXGEN
 	nexgen_init_cpu();
+#endif
+#ifdef CONFIG_X86_CPU_VENDOR_UMC
 	umc_init_cpu();
+#endif
 	early_cpu_detect();
 
 #ifdef CONFIG_DEBUG_PAGEALLOC
@@ -556,10 +613,14 @@
 	load_TR_desc();
 	load_LDT(&init_mm.context);
 
+#ifdef CONFIG_DOUBLEFAULT
+
 	/* Set up doublefault TSS pointer in the GDT */
 	__set_tss_desc(cpu, GDT_ENTRY_DOUBLEFAULT_TSS, &doublefault_tss);
 	cpu_gdt_table[cpu][GDT_ENTRY_DOUBLEFAULT_TSS].b &= 0xfffffdff;
 
+#endif
+
 	/* Clear %fs and %gs. */
 	asm volatile ("xorl %eax, %eax; movl %eax, %fs; movl %eax, %gs");
 
diff -Naur -X ./patt ./linux-2.6.8.1/init/Kconfig ./linux-2.6.8.1_new/init/Kconfig
--- ./linux-2.6.8.1/init/Kconfig	2004-08-14 13:55:59.000000000 +0300
+++ ./linux-2.6.8.1_new/init/Kconfig	2004-08-31 21:48:02.000000000 +0300
@@ -285,6 +285,15 @@
 
 	  If unsure, say N.
 
+config DOUBLEFAULT
+       depends on X86
+       bool "Enable doublefault exception handler" if EMBEDDED
+       default y
+       help
+         If unsure, say Y.
+	 
+	 You will save about 10KB disabling this handler.
+
 endmenu		# General setup
 
 
diff -Naur -X ./patt ./linux-2.6.8.1/net/ipv4/Kconfig ./linux-2.6.8.1_new/net/ipv4/Kconfig
--- ./linux-2.6.8.1/net/ipv4/Kconfig	2004-08-14 13:55:48.000000000 +0300
+++ ./linux-2.6.8.1_new/net/ipv4/Kconfig	2004-08-31 20:15:56.000000000 +0300
@@ -261,6 +261,15 @@
 	  gated-5). This routing protocol is not used widely, so say N unless
 	  you want to play with it.
 
+config IP_IGMP
+	bool "IP: IGMP support"
+	depends on INET
+	default y
+	help
+	  Internet Group Management Protocol support. Saying N here effectively
+	  disables support for IP multicasting and saves about 14KB of kernel
+	  size. If unsure say Y.
+
 config ARPD
 	bool "IP: ARP daemon support (EXPERIMENTAL)"
 	depends on INET && EXPERIMENTAL
diff -Naur -X ./patt ./linux-2.6.8.1/net/ipv4/Makefile ./linux-2.6.8.1_new/net/ipv4/Makefile
--- ./linux-2.6.8.1/net/ipv4/Makefile	2004-08-14 13:54:52.000000000 +0300
+++ ./linux-2.6.8.1_new/net/ipv4/Makefile	2004-08-31 20:17:52.000000000 +0300
@@ -6,9 +6,10 @@
 	     ip_input.o ip_fragment.o ip_forward.o ip_options.o \
 	     ip_output.o ip_sockglue.o \
 	     tcp.o tcp_input.o tcp_output.o tcp_timer.o tcp_ipv4.o tcp_minisocks.o \
-	     tcp_diag.o datagram.o raw.o udp.o arp.o icmp.o devinet.o af_inet.o igmp.o \
+	     tcp_diag.o datagram.o raw.o udp.o arp.o icmp.o devinet.o af_inet.o \
 	     sysctl_net_ipv4.o fib_frontend.o fib_semantics.o fib_hash.o
 
+obj-$(CONFIG_IP_IGMP) += igmp.o
 obj-$(CONFIG_PROC_FS) += proc.o
 obj-$(CONFIG_IP_MULTIPLE_TABLES) += fib_rules.o
 obj-$(CONFIG_IP_ROUTE_NAT) += ip_nat_dumb.o
diff -Naur -X ./patt ./linux-2.6.8.1/net/ipv4/af_inet.c ./linux-2.6.8.1_new/net/ipv4/af_inet.c
--- ./linux-2.6.8.1/net/ipv4/af_inet.c	2004-08-14 13:54:50.000000000 +0300
+++ ./linux-2.6.8.1_new/net/ipv4/af_inet.c	2004-08-31 19:51:58.000000000 +0300
@@ -379,8 +379,9 @@
 		long timeout;
 
 		/* Applications forget to leave groups before exiting */
+#ifdef CONFIG_IP_IGMP
 		ip_mc_drop_socket(sk);
-
+#endif
 		/* If linger is set, we don't return until the close
 		 * is complete.  Otherwise we return immediately. The
 		 * actually closing is done the same either way.
diff -Naur -X ./patt ./linux-2.6.8.1/net/ipv4/devinet.c ./linux-2.6.8.1_new/net/ipv4/devinet.c
--- ./linux-2.6.8.1/net/ipv4/devinet.c	2004-08-14 13:54:51.000000000 +0300
+++ ./linux-2.6.8.1_new/net/ipv4/devinet.c	2004-08-31 19:49:55.000000000 +0300
@@ -165,9 +165,11 @@
 #ifdef CONFIG_SYSCTL
 	devinet_sysctl_register(in_dev, &in_dev->cnf);
 #endif
+#ifdef CONFIG_IP_IGMP
 	ip_mc_init_dev(in_dev);
 	if (dev->flags & IFF_UP)
 		ip_mc_up(in_dev);
+#endif
 out:
 	return in_dev;
 out_kfree:
@@ -184,7 +186,9 @@
 
 	in_dev->dead = 1;
 
+#ifdef CONFIG_IP_IGMP
 	ip_mc_destroy_dev(in_dev);
+#endif
 
 	while ((ifa = in_dev->ifa_list) != NULL) {
 		inet_del_ifa(in_dev, &in_dev->ifa_list, 0);
@@ -981,10 +985,14 @@
 			in_dev->cnf.no_xfrm = 1;
 			in_dev->cnf.no_policy = 1;
 		}
+#ifdef CONFIG_IP_IGMP
 		ip_mc_up(in_dev);
+#endif
 		break;
 	case NETDEV_DOWN:
+#ifdef CONFIG_IP_IGMP
 		ip_mc_down(in_dev);
+#endif
 		break;
 	case NETDEV_CHANGEMTU:
 		if (dev->mtu >= 68)
diff -Naur -X ./patt ./linux-2.6.8.1/net/ipv4/ip_sockglue.c ./linux-2.6.8.1_new/net/ipv4/ip_sockglue.c
--- ./linux-2.6.8.1/net/ipv4/ip_sockglue.c	2004-08-14 13:55:09.000000000 +0300
+++ ./linux-2.6.8.1_new/net/ipv4/ip_sockglue.c	2004-08-31 19:33:07.000000000 +0300
@@ -523,6 +523,9 @@
 			if (!val)
 				skb_queue_purge(&sk->sk_error_queue);
 			break;
+
+#ifdef CONFIG_IP_IGMP
+
 		case IP_MULTICAST_TTL:
 			if (sk->sk_type == SOCK_STREAM)
 				goto e_inval;
@@ -839,6 +842,9 @@
 				kfree(gsf);
 			break;
 		}
+
+#endif
+
 		case IP_ROUTER_ALERT:	
 			err = ip_ra_control(sk, val ? 1 : 0, NULL);
 			break;
@@ -970,6 +976,9 @@
 		case IP_RECVERR:
 			val = inet->recverr;
 			break;
+
+#ifdef CONFIG_IP_IGMP
+
 		case IP_MULTICAST_TTL:
 			val = inet->mc_ttl;
 			break;
@@ -1025,6 +1034,9 @@
 			release_sock(sk);
 			return err;
 		}
+
+#endif
+
 		case IP_PKTOPTIONS:		
 		{
 			struct msghdr msg;
diff -Naur -X ./patt ./linux-2.6.8.1/net/ipv4/route.c ./linux-2.6.8.1_new/net/ipv4/route.c
--- ./linux-2.6.8.1/net/ipv4/route.c	2004-08-14 13:56:23.000000000 +0300
+++ ./linux-2.6.8.1_new/net/ipv4/route.c	2004-08-31 19:46:49.000000000 +0300
@@ -1453,6 +1453,8 @@
         rt->rt_type = res->type;
 }
 
+#ifdef CONFIG_IP_IGMP
+
 static int ip_route_input_mc(struct sk_buff *skb, u32 daddr, u32 saddr,
 				u8 tos, struct net_device *dev, int our)
 {
@@ -1538,6 +1540,8 @@
 	return -EINVAL;
 }
 
+#endif
+
 /*
  *	NOTE. We drop all the packets that has local source
  *	addresses, because every properly looped back packet
@@ -1898,6 +1902,9 @@
 	   route cache entry is created eventually.
 	 */
 	if (MULTICAST(daddr)) {
+
+#ifdef CONFIG_IP_IGMP
+
 		struct in_device *in_dev;
 
 		read_lock(&inetdev_lock);
@@ -1915,6 +1922,9 @@
 			}
 		}
 		read_unlock(&inetdev_lock);
+
+#endif
+
 		return -EINVAL;
 	}
 	return ip_route_input_slow(skb, daddr, saddr, tos, dev);
@@ -2131,7 +2141,11 @@
 			fib_info_put(res.fi);
 			res.fi = NULL;
 		}
-	} else if (res.type == RTN_MULTICAST) {
+	}
+	
+#ifdef CONFIG_IP_IGMP
+	
+	else if (res.type == RTN_MULTICAST) {
 		flags |= RTCF_MULTICAST|RTCF_LOCAL;
 		if (!ip_check_mc(in_dev, oldflp->fl4_dst, oldflp->fl4_src, oldflp->proto))
 			flags &= ~RTCF_LOCAL;
@@ -2145,6 +2159,8 @@
 		}
 	}
 
+#endif
+
 	rth = dst_alloc(&ipv4_dst_ops);
 	if (!rth)
 		goto e_nobufs;
diff -Naur -X ./patt ./linux-2.6.8.1/net/ipv4/udp.c ./linux-2.6.8.1_new/net/ipv4/udp.c
--- ./linux-2.6.8.1/net/ipv4/udp.c	2004-08-14 13:54:50.000000000 +0300
+++ ./linux-2.6.8.1_new/net/ipv4/udp.c	2004-08-31 19:40:19.000000000 +0300
@@ -275,6 +275,8 @@
 	return sk;
 }
 
+#ifdef CONFIG_IP_IGMP
+
 static inline struct sock *udp_v4_mcast_next(struct sock *sk,
 					     u16 loc_port, u32 loc_addr,
 					     u16 rmt_port, u32 rmt_addr,
@@ -303,6 +305,8 @@
   	return s;
 }
 
+#endif
+
 /*
  * This routine is called by the ICMP module when it gets some
  * sort of error condition.  If err < 0 then the socket should
@@ -1040,6 +1044,8 @@
 	return 0;
 }
 
+#ifdef CONFIG_IP_IGMP
+
 /*
  *	Multicasts and broadcasts go to each listener.
  *
@@ -1082,6 +1088,8 @@
 	return 0;
 }
 
+#endif
+
 /* Initialize UDP checksum. If exited with zero value (success),
  * CHECKSUM_UNNECESSARY means, that no more checks are required.
  * Otherwise, csum completion requires chacksumming packet body,
@@ -1116,7 +1124,6 @@
   	struct sock *sk;
   	struct udphdr *uh;
 	unsigned short ulen;
-	struct rtable *rt = (struct rtable*)skb->dst;
 	u32 saddr = skb->nh.iph->saddr;
 	u32 daddr = skb->nh.iph->daddr;
 	int len = skb->len;
@@ -1140,9 +1147,14 @@
 	if (udp_checksum_init(skb, uh, ulen, saddr, daddr) < 0)
 		goto csum_error;
 
+#ifdef CONFIG_IP_IGMP
+
+	struct rtable *rt = (struct rtable*)skb->dst;
 	if(rt->rt_flags & (RTCF_BROADCAST|RTCF_MULTICAST))
 		return udp_v4_mcast_deliver(skb, uh, saddr, daddr);
 
+#endif
+
 	sk = udp_v4_lookup(saddr, uh->source, daddr, uh->dest, skb->dev->ifindex);
 
 	if (sk != NULL) {

             reply	other threads:[~2004-08-31 20:10 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-08-31 19:55 Dmitry Golubev [this message]
2004-08-31 21:21 ` [PATCH]: 2.6.8.1, additional options for embedded systems David S. Miller
2004-08-31 21:44   ` Dmitry Golubev

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=200408312255.40511.dmitry@mikrotik.com \
    --to=dmitry@mikrotik.com \
    --cc=linux-kernel@vger.kernel.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.