~ubuntu-branches/ubuntu/quantal/zfs-fuse/quantal

« back to all changes in this revision

Viewing changes to src/lib/libsolcompat/amd64/atomic.S

  • Committer: Bazaar Package Importer
  • Author(s): Mike Hommey, Mike Hommey, Seth Heeren
  • Date: 2010-06-30 18:03:52 UTC
  • mfrom: (1.1.3 upstream)
  • Revision ID: james.westby@ubuntu.com-20100630180352-d3jq25ytbcl23q3y
Tags: 0.6.9-1
* New upstream release.

[ Mike Hommey ]
* debian/control:
  - Build depend on libssl-dev and libattr1-dev, now required to build.
  - Build depend on docbook-xml to avoid xsltproc I/O error loading
    docbook DTD.
  - Add suggestions for a NFS server and kpartx.
* debian/man/*, debian/copyright, debian/rules: Remove manual pages, they
  are now shipped upstream.
* debian/copyright: Change download link.
* src/SConstruct:
  - Add an optim option to the build system.
  - Add support for DESTDIR.
  - Force debug=1 to mean optim, no strip, no debug.
  - Use -ffunction-sections, -fdata-sections, and --gc-sections flags to
    reduce the binary sizes.
* src/lib/libumem/SConscript: Cleanup src/lib/libumem when cleaning up
  build directory.
* src/cmd/*/SConscript: Don't link zfs, zpool and zdb against libssl.
* src/lib/libumem/SConscript: Only build static libumem.
* src/lib/libumem/sol_compat.h:
  - Add atomic cas support for sparc.
  - Use atomic functions from libsolcompat in libumem on unsupported
    platforms.
* debian/rules:
  - Set optimization level in build system according to DEB_BUILD_OPTIONS.
  - Build with debug=1 to have unstripped binaries ; dh_strip will do the
    right thing.
  - Don't depend on the local location of the docbook XSLT stylesheets.
    Use the catalogged url in place of the full path.
  - Don't clean src/.sconsign.dblite and src/path.pyc.
  - Set all destination directories when installing with scons.
  - Install bash completion and zfsrc files.
  - Don't use scons cache when building.
* debian/prerm: Remove /var/lib/zfs/zpool.cache in prerm.
* debian/dirs: Create /etc/bash_completion.d.
* debian/watch: Fix watch file.
* debian/rules, debian/control, debian/compat: Switch to dh.
* debian/README.Debian: Update README.Debian.
* debian/zfs-fuse.man.xml: Update zfs-fuse manual page.
* debian/zfs-fuse.init: Start sharing datasets marked as such at daemon
  startup.
* debian/rules, debian/control: Use config.guess and config.sub from
  autotools-dev.

[ Seth Heeren ]
* debian/zfs-fuse.man.xml:
  Added notes on the precedence, zfsrc, commandline, initscript vs.
  /etc/default/zfs-fuse on some systems.
* debian/zfs-fuse.init, debian/zfs-fuse.default: Deprecating DAEMON_OPTS.
* debian/zfs-fuse.init:
  - Removing import -a -f.
  - Removing the now unnecessary 'sleep 2'.
  - Extended shutdown wait to allow for zfs-fuse daemon's own shutdown
    timeouts.
  - Re-ordered dubious PATH setting.
* debian/zfs-fuse.init: Move existing zpool.cache to new location if
  possible.

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
 * Use is subject to license terms.
25
25
 */
26
26
 
27
 
        .file   "atomic.s"
 
27
        .file   "atomic.s"
28
28
 
29
29
#define _ASM
30
30
#include <sys/asm_linkage.h>
76
76
 
77
77
        ENTRY(atomic_inc_8_nv)
78
78
        ALTENTRY(atomic_inc_uchar_nv)
79
 
        movb    (%rdi), %al
 
79
        movb    (%rdi), %al     // %al = old value
80
80
1:
81
 
        leaq    1(%rax), %rcx
 
81
        leaq    1(%rax), %rcx   // %cl = new value
82
82
        lock
83
 
        cmpxchgb %cl, (%rdi)
 
83
        cmpxchgb %cl, (%rdi)    // try to stick it in
84
84
        jne     1b
85
 
        movzbl  %cl, %eax
 
85
        movzbl  %cl, %eax       // return new value
86
86
        ret
87
87
        SET_SIZE(atomic_inc_uchar_nv)
88
88
        SET_SIZE(atomic_inc_8_nv)
89
89
 
90
90
        ENTRY(atomic_inc_16_nv)
91
91
        ALTENTRY(atomic_inc_ushort_nv)
92
 
        movw    (%rdi), %ax
 
92
        movw    (%rdi), %ax     // %ax = old value
93
93
1:
94
 
        leaq    1(%rax), %rcx
 
94
        leaq    1(%rax), %rcx   // %cx = new value
95
95
        lock
96
 
        cmpxchgw %cx, (%rdi)
 
96
        cmpxchgw %cx, (%rdi)    // try to stick it in
97
97
        jne     1b
98
 
        movzwl  %cx, %eax
 
98
        movzwl  %cx, %eax       // return new value
99
99
        ret
100
100
        SET_SIZE(atomic_inc_ushort_nv)
101
101
        SET_SIZE(atomic_inc_16_nv)
102
102
 
103
103
        ENTRY(atomic_inc_32_nv)
104
104
        ALTENTRY(atomic_inc_uint_nv)
105
 
        movl    (%rdi), %eax
 
105
        movl    (%rdi), %eax    // %eax = old value
106
106
1:
107
 
        leaq    1(%rax), %rcx
 
107
        leaq    1(%rax), %rcx   // %ecx = new value
108
108
        lock
109
 
        cmpxchgl %ecx, (%rdi)
 
109
        cmpxchgl %ecx, (%rdi)   // try to stick it in
110
110
        jne     1b
111
 
        movl    %ecx, %eax
 
111
        movl    %ecx, %eax      // return new value
112
112
        ret
113
113
        SET_SIZE(atomic_inc_uint_nv)
114
114
        SET_SIZE(atomic_inc_32_nv)
115
115
 
116
116
        ENTRY(atomic_inc_64_nv)
117
117
        ALTENTRY(atomic_inc_ulong_nv)
118
 
        movq    (%rdi), %rax
 
118
        movq    (%rdi), %rax    // %rax = old value
119
119
1:
120
 
        leaq    1(%rax), %rcx
 
120
        leaq    1(%rax), %rcx   // %rcx = new value
121
121
        lock
122
 
        cmpxchgq %rcx, (%rdi)
 
122
        cmpxchgq %rcx, (%rdi)   // try to stick it in
123
123
        jne     1b
124
 
        movq    %rcx, %rax
 
124
        movq    %rcx, %rax      // return new value
125
125
        ret
126
126
        SET_SIZE(atomic_inc_ulong_nv)
127
127
        SET_SIZE(atomic_inc_64_nv)
160
160
 
161
161
        ENTRY(atomic_dec_8_nv)
162
162
        ALTENTRY(atomic_dec_uchar_nv)
163
 
        movb    (%rdi), %al
 
163
        movb    (%rdi), %al     // %al = old value
164
164
1:
165
 
        leaq    -1(%rax), %rcx
 
165
        leaq    -1(%rax), %rcx  // %cl = new value
166
166
        lock
167
 
        cmpxchgb %cl, (%rdi)
 
167
        cmpxchgb %cl, (%rdi)    // try to stick it in
168
168
        jne     1b
169
 
        movzbl  %cl, %eax
 
169
        movzbl  %cl, %eax       // return new value
170
170
        ret
171
171
        SET_SIZE(atomic_dec_uchar_nv)
172
172
        SET_SIZE(atomic_dec_8_nv)
173
173
 
174
174
        ENTRY(atomic_dec_16_nv)
175
175
        ALTENTRY(atomic_dec_ushort_nv)
176
 
        movw    (%rdi), %ax
 
176
        movw    (%rdi), %ax     // %ax = old value
177
177
1:
178
 
        leaq    -1(%rax), %rcx
 
178
        leaq    -1(%rax), %rcx  // %cx = new value
179
179
        lock
180
 
        cmpxchgw %cx, (%rdi)
 
180
        cmpxchgw %cx, (%rdi)    // try to stick it in
181
181
        jne     1b
182
 
        movzwl  %cx, %eax
 
182
        movzwl  %cx, %eax       // return new value
183
183
        ret
184
184
        SET_SIZE(atomic_dec_ushort_nv)
185
185
        SET_SIZE(atomic_dec_16_nv)
186
186
 
187
187
        ENTRY(atomic_dec_32_nv)
188
188
        ALTENTRY(atomic_dec_uint_nv)
189
 
        movl    (%rdi), %eax
 
189
        movl    (%rdi), %eax    // %eax = old value
190
190
1:
191
 
        leaq    -1(%rax), %rcx
 
191
        leaq    -1(%rax), %rcx  // %ecx = new value
192
192
        lock
193
 
        cmpxchgl %ecx, (%rdi)
 
193
        cmpxchgl %ecx, (%rdi)   // try to stick it in
194
194
        jne     1b
195
 
        movl    %ecx, %eax
 
195
        movl    %ecx, %eax      // return new value
196
196
        ret
197
197
        SET_SIZE(atomic_dec_uint_nv)
198
198
        SET_SIZE(atomic_dec_32_nv)
199
199
 
200
200
        ENTRY(atomic_dec_64_nv)
201
201
        ALTENTRY(atomic_dec_ulong_nv)
202
 
        movq    (%rdi), %rax
 
202
        movq    (%rdi), %rax    // %rax = old value
203
203
1:
204
 
        leaq    -1(%rax), %rcx
 
204
        leaq    -1(%rax), %rcx  // %rcx = new value
205
205
        lock
206
 
        cmpxchgq %rcx, (%rdi)
 
206
        cmpxchgq %rcx, (%rdi)   // try to stick it in
207
207
        jne     1b
208
 
        movq    %rcx, %rax
 
208
        movq    %rcx, %rax      // return new value
209
209
        ret
210
210
        SET_SIZE(atomic_dec_ulong_nv)
211
211
        SET_SIZE(atomic_dec_64_nv)
310
310
 
311
311
        ENTRY(atomic_add_8_nv)
312
312
        ALTENTRY(atomic_add_char_nv)
313
 
        movb    (%rdi), %al
 
313
        movb    (%rdi), %al     // %al = old value
314
314
1:
315
315
        movb    %sil, %cl
316
 
        addb    %al, %cl
 
316
        addb    %al, %cl        // %cl = new value
317
317
        lock
318
 
        cmpxchgb %cl, (%rdi)
 
318
        cmpxchgb %cl, (%rdi)    // try to stick it in
319
319
        jne     1b
320
 
        movzbl  %cl, %eax
 
320
        movzbl  %cl, %eax       // return new value
321
321
        ret
322
322
        SET_SIZE(atomic_add_char_nv)
323
323
        SET_SIZE(atomic_add_8_nv)
324
324
 
325
325
        ENTRY(atomic_add_16_nv)
326
326
        ALTENTRY(atomic_add_short_nv)
327
 
        movw    (%rdi), %ax
 
327
        movw    (%rdi), %ax     // %ax = old value
328
328
1:
329
329
        movw    %si, %cx
330
 
        addw    %ax, %cx
 
330
        addw    %ax, %cx        // %cx = new value
331
331
        lock
332
 
        cmpxchgw %cx, (%rdi)
 
332
        cmpxchgw %cx, (%rdi)    // try to stick it in
333
333
        jne     1b
334
 
        movzwl  %cx, %eax
 
334
        movzwl  %cx, %eax       // return new value
335
335
        ret
336
336
        SET_SIZE(atomic_add_short_nv)
337
337
        SET_SIZE(atomic_add_16_nv)
368
368
 
369
369
        ENTRY(atomic_and_8_nv)
370
370
        ALTENTRY(atomic_and_uchar_nv)
371
 
        movb    (%rdi), %al
 
371
        movb    (%rdi), %al     // %al = old value
372
372
1:
373
373
        movb    %sil, %cl
374
 
        andb    %al, %cl
 
374
        andb    %al, %cl        // %cl = new value
375
375
        lock
376
 
        cmpxchgb %cl, (%rdi)
 
376
        cmpxchgb %cl, (%rdi)    // try to stick it in
377
377
        jne     1b
378
 
        movzbl  %cl, %eax
 
378
        movzbl  %cl, %eax       // return new value
379
379
        ret
380
380
        SET_SIZE(atomic_and_uchar_nv)
381
381
        SET_SIZE(atomic_and_8_nv)
382
382
 
383
383
        ENTRY(atomic_and_16_nv)
384
384
        ALTENTRY(atomic_and_ushort_nv)
385
 
        movw    (%rdi), %ax
 
385
        movw    (%rdi), %ax     // %ax = old value
386
386
1:
387
387
        movw    %si, %cx
388
 
        andw    %ax, %cx
 
388
        andw    %ax, %cx        // %cx = new value
389
389
        lock
390
 
        cmpxchgw %cx, (%rdi)
 
390
        cmpxchgw %cx, (%rdi)    // try to stick it in
391
391
        jne     1b
392
 
        movzwl  %cx, %eax
 
392
        movzwl  %cx, %eax       // return new value
393
393
        ret
394
394
        SET_SIZE(atomic_and_ushort_nv)
395
395
        SET_SIZE(atomic_and_16_nv)
424
424
 
425
425
        ENTRY(atomic_or_8_nv)
426
426
        ALTENTRY(atomic_or_uchar_nv)
427
 
        movb    (%rdi), %al
 
427
        movb    (%rdi), %al     // %al = old value
428
428
1:
429
429
        movb    %sil, %cl
430
 
        orb     %al, %cl
 
430
        orb     %al, %cl        // %cl = new value
431
431
        lock
432
 
        cmpxchgb %cl, (%rdi)
 
432
        cmpxchgb %cl, (%rdi)    // try to stick it in
433
433
        jne     1b
434
 
        movzbl  %cl, %eax
 
434
        movzbl  %cl, %eax       // return new value
435
435
        ret
436
436
        SET_SIZE(atomic_and_uchar_nv)
437
437
        SET_SIZE(atomic_and_8_nv)
438
438
 
439
439
        ENTRY(atomic_or_16_nv)
440
440
        ALTENTRY(atomic_or_ushort_nv)
441
 
        movw    (%rdi), %ax
 
441
        movw    (%rdi), %ax     // %ax = old value
442
442
1:
443
443
        movw    %si, %cx
444
 
        orw     %ax, %cx
 
444
        orw     %ax, %cx        // %cx = new value
445
445
        lock
446
 
        cmpxchgw %cx, (%rdi)
 
446
        cmpxchgw %cx, (%rdi)    // try to stick it in
447
447
        jne     1b
448
 
        movzwl  %cx, %eax
 
448
        movzwl  %cx, %eax       // return new value
449
449
        ret
450
450
        SET_SIZE(atomic_or_ushort_nv)
451
451
        SET_SIZE(atomic_or_16_nv)
559
559
        lock
560
560
        btsq    %rsi, (%rdi)
561
561
        jnc     1f
562
 
        decl    %eax
 
562
        decl    %eax                    // return -1
563
563
1:
564
564
        ret
565
565
        SET_SIZE(atomic_set_long_excl)
569
569
        lock
570
570
        btrq    %rsi, (%rdi)
571
571
        jc      1f
572
 
        decl    %eax
 
572
        decl    %eax                    // return -1
573
573
1:
574
574
        ret
575
575
        SET_SIZE(atomic_clear_long_excl)
605
605
        SET_SIZE(membar_consumer)
606
606
 
607
607
#endif  /* !_KERNEL */
608
 
 
609
 
#ifdef __ELF__
610
 
.section .note.GNU-stack,"",%progbits
611
 
#endif