Mercurial > hg > nginx-vendor-0-7
annotate src/core/ngx_cpuinfo.c @ 506:b9fdcaf2062b NGINX_0_7_65
nginx 0.7.65
*) Security: now nginx/Windows ignores trailing spaces in URI.
Thanks to Dan Crowley, Core Security Technologies.
*) Security: now nginx/Windows ignores short files names.
Thanks to Dan Crowley, Core Security Technologies.
*) Change: now the "009" status code is written to an access log for
proxied HTTP/0.9 responses.
*) Change: now the default buffer size of the
"large_client_header_buffers" directive is 8K.
Thanks to Andrew Cholakian.
*) Change: now default SSL ciphers are "HIGH:!ADH:!MD5".
*) Change: now SSLv2 protocol is disabled by default.
*) Change: now $host variable value is always low case.
*) Feature: the conf/fastcgi.conf for simple FastCGI configurations.
*) Feature: now URI part is not required a "proxy_pass" directive if
variables are used.
*) Feature: the $ssl_session_id variable.
*) Bugfix: if a proxied or FastCGI request was internally redirected to
another proxied or FastCGI location, then $upstream_response_time
variable may have abnormally large value; the bug had appeared in
0.7.63.
*) Bugfix: if the "expires modified" set date in the past, then a
negative number was set in the "Cache-Control" response header
line.
Thanks to Alex Kapranoff.
*) Bugfix: nginx closed a connection if a cached response had an empty
body.
Thanks to Piotr Sikora.
*) Bugfix: nginx cached a 304 response if there was the "If-None-Match"
header line in a proxied request.
Thanks to Tim Dettrick and David Kostal.
*) Bugfix: nginx did not treat a comma as separator in the
"Cache-Control" backend response header line.
*) Bugfix: cached HTTP/0.9 responses were handled incorrectly.
*) Bugfix: nginx sent gzipped responses to clients those do not support
gzip, if "gzip_static on" and "gzip_vary off"; the bug had appeared
in 0.8.16.
*) Bugfix: nginx always added "Content-Encoding: gzip" response header
line in 304 responses sent by ngx_http_gzip_static_module.
*) Bugfix: the "!-x" operator did not work.
Thanks to Maxim Dounin.
*) Bugfix: a segmentation fault might occur in a worker process, if
limit_rate was used in HTTPS server.
Thanks to Maxim Dounin.
*) Bugfix: a segmentation fault might occur in a worker process while
$limit_rate logging.
Thanks to Maxim Dounin.
*) Bugfix: nginx did not support dates in 2038 year on 32-bit platforms;
*) Bugfix: nginx/Windows tried to delete a temporary file twice if the
file should replace an already existent file.
*) Bugfix: nginx/Windows tried to rename a temporary file twice if the
file should replace an already existent file.
*) Bugfix: nginx/Windows might not create temporary file, a cache file,
or "proxy/fastcgi_store"d file if a worker had no enough access
rights for top level directories.
*) Bugfix: in UTF-8 encoding support by "try_files" directive in
nginx/Windows.
*) Bugfix: UTF-8 encoding usage in the ngx_http_autoindex_module.
Thanks to Maxim Dounin.
*) Bugfix: the ngx_http_autoindex_module did not show the trailing
slash in links to a directory; the bug had appeared in 0.7.15.
*) Bugfix: nginx did not close a log file set by the --error-log-path
configuration option; the bug had appeared in 0.7.53.
*) Bugfix: "addition_types" directive was incorrectly named
"addtion_types".
*) Bugfix: invalid request line in $request variable was written in
access_log only if error_log was set to "info" or "debug" level.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Mon, 01 Feb 2010 00:00:00 +0000 |
parents | 56baf312c1b5 |
children |
rev | line source |
---|---|
160 | 1 |
2 /* | |
3 * Copyright (C) Igor Sysoev | |
4 */ | |
5 | |
6 | |
7 #include <ngx_config.h> | |
8 #include <ngx_core.h> | |
9 | |
10 | |
11 #if (( __i386__ || __amd64__ ) && ( __GNUC__ || __INTEL_COMPILER )) | |
12 | |
13 | |
14 static ngx_inline void ngx_cpuid(uint32_t i, uint32_t *buf); | |
15 | |
16 | |
166 | 17 #if ( __i386__ ) |
18 | |
19 static ngx_inline void | |
20 ngx_cpuid(uint32_t i, uint32_t *buf) | |
21 { | |
22 | |
23 /* | |
24 * we could not use %ebx as output parameter if gcc builds PIC, | |
25 * and we could not save %ebx on stack, because %esp is used, | |
26 * when the -fomit-frame-pointer optimization is specified. | |
27 */ | |
28 | |
29 __asm__ ( | |
30 | |
31 " mov %%ebx, %%esi; " | |
32 | |
33 " cpuid; " | |
200 | 34 " mov %%eax, (%1); " |
35 " mov %%ebx, 4(%1); " | |
36 " mov %%edx, 8(%1); " | |
37 " mov %%ecx, 12(%1); " | |
166 | 38 |
39 " mov %%esi, %%ebx; " | |
40 | |
200 | 41 : : "a" (i), "D" (buf) : "ecx", "edx", "esi", "memory" ); |
166 | 42 } |
43 | |
44 | |
45 #else /* __amd64__ */ | |
46 | |
47 | |
160 | 48 static ngx_inline void |
49 ngx_cpuid(uint32_t i, uint32_t *buf) | |
50 { | |
51 uint32_t eax, ebx, ecx, edx; | |
52 | |
53 __asm__ ( | |
54 | |
55 "cpuid" | |
56 | |
57 : "=a" (eax), "=b" (ebx), "=c" (ecx), "=d" (edx) : "a" (i) ); | |
58 | |
59 buf[0] = eax; | |
60 buf[1] = ebx; | |
61 buf[2] = edx; | |
62 buf[3] = ecx; | |
63 } | |
64 | |
65 | |
166 | 66 #endif |
67 | |
68 | |
160 | 69 /* auto detect the L2 cache line size of modern and widespread CPUs */ |
70 | |
71 void | |
72 ngx_cpuinfo(void) | |
73 { | |
74 u_char *vendor; | |
468 | 75 uint32_t vbuf[5], cpu[4], model; |
160 | 76 |
77 vbuf[0] = 0; | |
78 vbuf[1] = 0; | |
79 vbuf[2] = 0; | |
80 vbuf[3] = 0; | |
81 vbuf[4] = 0; | |
82 | |
83 ngx_cpuid(0, vbuf); | |
84 | |
85 vendor = (u_char *) &vbuf[1]; | |
86 | |
87 if (vbuf[0] == 0) { | |
88 return; | |
89 } | |
90 | |
91 ngx_cpuid(1, cpu); | |
92 | |
93 if (ngx_strcmp(vendor, "GenuineIntel") == 0) { | |
94 | |
364 | 95 switch ((cpu[0] & 0xf00) >> 8) { |
160 | 96 |
97 /* Pentium */ | |
98 case 5: | |
364 | 99 ngx_cacheline_size = 32; |
100 break; | |
101 | |
160 | 102 /* Pentium Pro, II, III */ |
103 case 6: | |
104 ngx_cacheline_size = 32; | |
364 | 105 |
468 | 106 model = ((cpu[0] & 0xf0000) >> 8) | (cpu[0] & 0xf0); |
107 | |
108 if (model >= 0xd0) { | |
109 /* Intel Core, Core 2, Atom */ | |
364 | 110 ngx_cacheline_size = 64; |
111 } | |
112 | |
160 | 113 break; |
114 | |
115 /* | |
116 * Pentium 4, although its cache line size is 64 bytes, | |
117 * it prefetches up to two cache lines during memory read | |
118 */ | |
119 case 15: | |
120 ngx_cacheline_size = 128; | |
121 break; | |
122 } | |
123 | |
124 } else if (ngx_strcmp(vendor, "AuthenticAMD") == 0) { | |
125 ngx_cacheline_size = 64; | |
126 } | |
127 } | |
128 | |
129 #else | |
130 | |
131 | |
132 void | |
133 ngx_cpuinfo(void) | |
134 { | |
135 } | |
136 | |
137 | |
138 #endif |