| .. | .. |
|---|
| 116 | 116 | |
|---|
| 117 | 117 | struct zcomp_strm *zcomp_stream_get(struct zcomp *comp) |
|---|
| 118 | 118 | { |
|---|
| 119 | | - return *get_cpu_ptr(comp->stream); |
|---|
| 119 | + struct zcomp_strm *zstrm; |
|---|
| 120 | + |
|---|
| 121 | + zstrm = *get_local_ptr(comp->stream); |
|---|
| 122 | + spin_lock(&zstrm->zcomp_lock); |
|---|
| 123 | + return zstrm; |
|---|
| 120 | 124 | } |
|---|
| 121 | 125 | |
|---|
| 122 | 126 | void zcomp_stream_put(struct zcomp *comp) |
|---|
| 123 | 127 | { |
|---|
| 124 | | - put_cpu_ptr(comp->stream); |
|---|
| 128 | + struct zcomp_strm *zstrm; |
|---|
| 129 | + |
|---|
| 130 | + zstrm = *this_cpu_ptr(comp->stream); |
|---|
| 131 | + spin_unlock(&zstrm->zcomp_lock); |
|---|
| 132 | + put_local_ptr(zstrm); |
|---|
| 125 | 133 | } |
|---|
| 126 | 134 | |
|---|
| 127 | 135 | int zcomp_compress(struct zcomp_strm *zstrm, |
|---|
| .. | .. |
|---|
| 171 | 179 | pr_err("Can't allocate a compression stream\n"); |
|---|
| 172 | 180 | return -ENOMEM; |
|---|
| 173 | 181 | } |
|---|
| 182 | + spin_lock_init(&zstrm->zcomp_lock); |
|---|
| 174 | 183 | *per_cpu_ptr(comp->stream, cpu) = zstrm; |
|---|
| 175 | 184 | return 0; |
|---|
| 176 | 185 | } |
|---|